- 작성시간 : 2022/05/11 00:24
- 퍼머링크 : mcchae.egloos.com/11408934
- 덧글수 : 0
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 등 좀 더 튜닝이 필요한 것들이 남아 있습니다.)
어느 분께는 도움이 되셨기를 ..



덧글