[Docker Host] 프로메테우스, node-exporter, cAdvisor, Grafana 로 컨테이너 모니터링 Develop Tip

docker 또는 docker-compose, docker swarm 또는 Kubernetes 등으로 특정머신에서 docker 컨테이너를 돌릴 때
모니터링을 해야할 필요가 있습니다. 이런 경우 다음과 같은 방법으로 쉽게 할 수 있습니다.

본 테스트에서는 이미 다른 서비스가 docker-compose 로 돌고 있다고 가정합니다.
그런데 그것과는 무관하게 다음과 같은 별도 docker-compose.yml 파일을 만듧니다.

version: '3.2'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
    - 9090:9090
    command:
    - --config.file=/etc/prometheus/prometheus.yml
    volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    depends_on:
    - cadvisor
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node_exporter
    restart: unless-stopped
    expose:
      - 9100
    ports:
    - 9100:9100
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    links:
      - prometheus:prometheus
    ports:
    - 3000:3000
    volumes:
      - ./data/grafana:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=myadmin
      - GF_USERS_ALLOW_SIGN_UP=false


그리고 prometheus.yml 파일에는 다음 내용을 넣었습니다.

scrape_configs:
- job_name: cadvisor
  scrape_interval: 5s
  static_configs:
  - targets:
    - localhost:9090
    - cadvisor:8080
    - node-exporter:9100

(grafana를 돌릴 때 root 계정이 아니라면 data/grafana 를 777 퍼미션 또는 사용자:그룹을 472:472
 로 주어야 제대로 뜹니다)

이제 위의 docker-compose.yml 을 up 시키고
3000 번 포트로 웹브라우져에서 접속하면,
사용자와 암호를 묻는데, 위의 경우에서는 admin / myadmin 으로 로그인하면 됩니다.

그러면,

위와 같은 일반 grafana 화면이 뜹니다.

설정에 "Add data source" 를 누르고,

첫번 째 "Prometheus" 를 선택합니다.

grafana 와 prometheus 는 같은 docker-compose 에 기동되므로 위와 같이 URL에 http://prometheus:9090 이라고 줍니다.

하단의 "Save & Test" 를 누르고 "Data source is working" 이라고 뜨면 일단 프로메테우스와 연결 성공입니다.

위와 같이 "Default" 데이터소스로 표시되면 됩니다.

이제 위와 같이 Import 를 누르고,

Import ID에 893을 넣고 "Load" 를 누릅니다.

Grafana 에 대시보드를 만들고 그것을 고유 ID로 넣어 가져올 수 있게 되어 있군요. 
(자신이 Export 한 JSON으로도 Import 할 수 있습니다)

Import 단추 위에 데이터 소스를 정확히 지정합니다.

그러면,

짠~~ 하고 나오는데.. 어라~ 상단에는 컨테이너 개수만 제외하고 다 "N/A" Not Available 이군요.

구글링을 해 보니, 저 위에 보이는 것은 Docker Host 의 메트릭을 가져오는데 그 역할을 담당하고 있는 것이
바로 node-exporter 컨테이너의 역할 이더군요.

node-exporter의 9100 포트로 웹브라우저를 접속하면 metrics를 확인할 수 있는데, 여기서 가져오는 정보가
틀려서 N/A 가 뜬 것이었습니다.

좌측 상단의 Uptime 을 Edit 해서 들어가보면 note_boot_time{...} 처럼 되어 있는데, 위에 node-exporter의 metrics을 검색해보면 단순히 node_boot_time_seconds 라고 하고 "Run query" 를 해 보면 나옵니다.. 오호..

같은 방법으로 Disk Space 도 찾고,

메모리도 찾았습니다..

이런 식으로 하여 다음과 같이,

어느 정도 볼 만한 Docker 호스트와 컨테이너 들의 모니터링 툴이 뚝딱 하고 만들어 졌습니다.
실제 서비스가 되고 있다면 충분히 역할을 담당할 것이라 확신합니다.

(위의 내용에서 CPU Usage와 LOAD 등 좀 더 튜닝이 필요한 것들이 남아 있습니다.)


어느 분께는 도움이 되셨기를 ..




덧글

댓글 입력 영역

구글애드텍스트