[인프라] Grafana, Prometheus 시스템 매트릭 모니터링

참고


개요

  • Grafana, Prometheus, node-exporter 를 이용해서 시스템 메트릭을 모니터링 할 수 있도록 대시보드 구축 진행합니다.

node-exporter 란 무엇인가?

  • node-exporter 란 UNIX 계열 커널을 가진 하드웨어와 OS 릭 등 "시스템 메트릭" 을 수집하는 Exporter 입니다.
  • Pormetheus 재단이 공식적으로 지원하고 있는 Exporter 중 하나이며, Prometheus 로 모니터링 시스템을 구축 시스템 메트릭 수집을 위해 가장 우선적으로 고려되는 Exporter 이기도 합니다.

Exporter 란? 특정 메트릭을 수집해서 엔드 포인트에 노출 시키는 소프트웨어 혹은 에이전트라고 보시면 됩니다. node-exporter 가 UNIX 계열 서버의 cpu, memory 등의 메트릭을 수집할 수 있는 것처럼, DB, 하드웨어, 메시지 시스템, 저장소 등 여러 시스템에 대한 익스포터가 존재하며, CollectD 등 기존의 서버 모니터링에 사용되는 에이전트들과 통합할 수 있는 Exporter 도 존재합니다.


node-exporter 설치

  • Docker 를 통하여 node-exporter 설치를 진행할 수 있습니다.
  • 저는 docker-compose.yml 파일을 작성하여 Docker-Compose 로 실행하였습니다.
  node_exporter:
    container_name: node_exporter
    image: prom/node-exporter
    ports:
      - 9100:9100
  • 위와 같이 node-exporter 컨테이너를 실행할 수 있는 Docker-Compose 를 정의하였습니다.
> docker-compose up node_exporter
  • 위 명령어를 통해 node-exporter 컨테이너를 실행합니다.
  • 정상적으로 컨테이너가 실행 되었다면, localhost:9100/metrics 을 통해 현재 수집되는 데이터가 있는지 확인합니다.
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.000184
go_gc_duration_seconds{quantile="0.25"} 0.000184
go_gc_duration_seconds{quantile="0.5"} 0.000184
go_gc_duration_seconds{quantile="0.75"} 0.000184
go_gc_duration_seconds{quantile="1"} 0.000184
go_gc_duration_seconds_sum 0.000184
go_gc_duration_seconds_count 1

...

Prometheus 연동

  • 이제 Prometheus 에서 node-exporter 가 수집하고 있는 metric 을 스크래이핑 해봅니다.
  • Prometheus 설정 파일을 보면 scrape_config 밑에 다음과 같이 node-exporter 관련 job 이 등록 된 것을 확인할 수 있습니다.
scrape_configs:
  # Scrape Prometheus itself.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

  - job_name: 'node-exporter'
    scrape_interval: 5s

    static_configs:
      - targets: ['192.168.100.167:9100']
  • static_config 밑에 targets 에서 node-exporter 가 구동된 인스턴스들의 IP:9100 을 적어주면, Prometheus 가 scrape_interval 에 설정된 주기마다 각 인스턴스들에서 수집되는 메트릭을 스크래이핑하여 저장합니다.
  • 이제 Proemtheus 를 구동시킵니다.
  • Prometheus 역시 docker-compose.yml 파일에 작성하여 컨테이너 실행합니다.
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      -  9090:9090
    volumes:
      - D:/postgresql/prometheus/data/:/prometheus
      - D:/postgresql/prometheus/:/etc/prometheus/
    command: # web.enalbe-lifecycle은 api 재시작없이 설정파일들을 reload 할 수 있게 해줌
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
    restart: always
  • 위처럼 docker-compose 를 작성하여 prometheus 컨테이너를 정상 실행 하였다면, localhost:9090/targets 으로 접속합니다.
  • 다음과 같이 node-exporter 가 정상적으로 수행되고 있는 것을 확인할 수 있습니다.


Grafana 대시보드 구축

  • Grafana 역시 docker-compose.yml 을 통해 컨테이너를 실행합니다.
  grafana:
    container_name: grafana
    image: grafana/grafana
    restart: always
    ports:
      - 3000:3000
  • 위 처럼 docker-compose.yml 에 Grafana 이미지를 추가했다면, 컨테이너를 실행합니다.

node-exporter Grafana DsahBoard 다운로드

  • 이미 node-exporter 관련해서 무료로 공개된 DashBoard 들이 있습니다.
  • 이 중에서 node-exporter 대시보드 해당 URL 에 있는 대시보드를 다운로드 하여 적용 시켜 봅니다.


node-exporter 대시보드 적용하기

  • localhost:3000 접속 후, 다음 방법을 통해, 앞서 다운로드 받은 node-exporter 대시보드를 적용합니다.


실행 결과

  • 실행 결과, 정상적으로 대시보드에서 정보들이 표시되는 것을 확인할 수 있습니다.

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY