Prometheus + Grafana로 시스템 상태 모니터링 하기

2025. 5. 28. 15:15·Infra

모니터링 기법에는 여러가지가 있지만 그 중에서 시스템 상태를 모니터링 하기에 적합한 기술 조합으로 Prometheus + Grafana 조합이 있다.

이 모니터링 기법에는 다음과 같은 특징이 있다.

 

매트릭 수집 / 실시간 데이터 수집 역할

  • 시스템의 상태를 빠르게 파악하기에 적합하다. (CPU, 메모리, 응답 시간, 트래픽 변화 등)
  • 죽기전 징후를 알려준다.

시스템 모니터링을 위하여 Prometheus + Grafana를 적용한 과정에 대하여 설명하겠다.

 

현재 진행 중인 프로젝트는 Docker를 이용하여 여러 컨테이너를 띄워서 배포하고 있었다.

이 과정에서 편리하게 컨테이너를 관리하기 위해 docker-compose를 작성 해 놨었다.

 

Prometheus와 Grafana의 컨테이너도 추가로 띄워야 하므로 docker-compose에 다음을 추가하자

 

docker-compose.yml

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus
    restart: unless-stopped

  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    restart: unless-stopped

 

위 코드들을 추가하고 컨테이너를 띄우자

 

만약 컨테이너를 띄우는 과정에서 아래와 같은 오류가 발생했다면 해당 디렉터리에 prometheus.yml이 제대로 생성되지 않았다는 뜻이다.

prometheus.yml 파일이 아닌 디렉터리로 생성되어있을 가능성이 있기 때문에 확인하고 파일로 새로 생성 해 주자.

Error response from daemon: failed to create task for container: 
failed to create shim task: OCI runtime create failed: runc create failed: 
unable to start container process: error during container init: error mounting 
"/home/ubuntu/msa-deploy/prometheus.yml" to rootfs at 
"/etc/prometheus/prometheus.yml": mount /home/ubuntu/msa-deploy/prometheus.yml:
/etc/prometheus/prometheus.yml (via /proc/self/fd/6), flags: 0x5000: not a directory: 
unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the
specified host path exists and is the expected type

 

파일을 생성했다면 해당 파일에 들어가서 아래와 같이 내용을 작성한다.

해당 내용은 내 서비스의 로컬 기준으로 작성한 것이므로 참고만 하면 된다.

 

prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'message-service'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['host.docker.internal:8082']

  - job_name: 'user-service'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['host.docker.internal:8081']

  - job_name: 'alarm-service'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['host.docker.internal:8083']

 

Prometheus

9090 포트로 접속 후 target 탭으로 이동한다.

현재 message-service만 띄워놨으므로 Prometheus가 정상적으로 모니터링을 수행한다.

 

Grafana

이제 Prometheus에서 얻은 매트릭들을 시각화하여 보기 위해 Grafana 설정을 시작하자.

3000번 포트로 접속하면 초기화면이 나타난다.

 

 

 

초기 로그인 정보는 아래와 같고, 로그인 시 비밀번호를 변경해야한다.

ID : admin

PW : admin

 

 

왼쪽 메뉴로 가서 connections -> Data sources로 이동한 후 Add data source를 클릭한다.

 

리스트에서 Prometheus를 선택하고 아래와 같이 URL을 입력한다.

  • 여기서 prometheus는 컨테이너의 이름이다.
  • grafana와 같은 네트워크로 묶여 있어야지 grafana가 인식할 수 있다. (docker-compose에 같이 있다면 기본적으로 같은 네트워크이다.)

 

아래로 내려가서 save & test를 클릭 후 사진과 같이 정상적으로 연결되는지 확인한다.

 

 

대시보드 만들기

 

좌측 메뉴에서 DashBoards에 들어가서 Create dashboard를 클릭한다.

그 후 오른쪽 아래의 import dashboard를 클릭한다.

 

아래의 입력창에 대시보드 ID를 입력하고 Load 버튼을 누르자

지금은 4701을 입력할 건데, JVM/Actuator 기반 Spring Boot 모니터링 템플릿이다.

 

그럼 다음과 같은 창으로 바뀌는데 데이터 소스를 아까 만든 Prometheus로 설정하고 Import하면 대시보드 설정도 완료가 된다.

 

이제 대시보드에서 지표를 확인할 수 있다.

JVM 메모리 사용량, GC 시간, CPU 사용률 등을 확인할 수 있다.

 

 

추가로 왼쪽 메뉴의 explorer 탭에 들어가서 메트릭에 http_server_request_active_seconds_active_count를 추가하면 현재 진행 중인 http 요청 횟수도 볼 수 있다.

'Infra' 카테고리의 다른 글

ELK Stack을 이용하여 로그 모니터링 하기  (2) 2025.05.28
Netlify에 프론트 서버 띄우기  (0) 2025.04.17
CI/CD (GitHub Actions, Jenkins)  (0) 2025.03.25
'Infra' 카테고리의 다른 글
  • ELK Stack을 이용하여 로그 모니터링 하기
  • Netlify에 프론트 서버 띄우기
  • CI/CD (GitHub Actions, Jenkins)
juuuuuuun
juuuuuuun
  • juuuuuuun
    namae
    juuuuuuun
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • java (2)
      • Infra (4)
      • server (2)
      • algorithm (52)
      • HTTP (8)
      • android (1)
      • baekjoon (16)
      • 소프트웨어공학 (6)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
juuuuuuun
Prometheus + Grafana로 시스템 상태 모니터링 하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.