Docker Swarm 클러스터를 모니터링 할 수 있는 방안은 여러가지가 있지만 Grafana를 이용한 방안을 알아보겠다.
Docker Swarm 클러스터 구성 방법은 이전 포스팅 글에서 확인할 수 있다.
Step 1. Docker 데몬 메트릭 노출 및 Docker 재기동
$ sudo vi /etc/docker/daemon.json
{
"metrics-addr" : "0.0.0.0:4999",
"experimental" : true
}
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
Step 2. Docker Monitoring 네트워크 생성
$ docker \
network create --driver overlay monitoring
Step 3. Cadvisor 서비스 등록
도커 호스트에 컨테이너로서 실행되는 모니터링 툴로, 도커 엔진 및 컨테이너, 이미지 등에 대한 데이터를 수집해준다. /metrics endpoint로 데이터를 수집할 수 있다.
$ docker \
service create --name cadvisor \
--mode global \
--network monitoring \
--label com.docker.stack.namespace=monitoring \
--container-label com.docker.stack.namespace=monitoring \
--mount type=bind,src=/,dst=/rootfs:ro \
--mount type=bind,src=/var/run,dst=/var/run:rw \
--mount type=bind,src=/sys,dst=/sys:ro \
--mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker:ro \
google/cadvisor:v0.24.1
Step 4. Node-exporter 서비스 등록
Node Exporter는 해당 노드, 즉 호스트 자체를 모니터링하기 위한 툴이다. 이 또한 컨테이너로서 실행되며, CAdvisor와 다른 점은 도커 엔진이 아닌 호스트 자체에 대한 데이터를 주로 제공한다는 점이다.
/metrics endpoint로 데이터를 수집할 수 있다.
$ docker \
service create --name node-exporter \
--mode global \
--network monitoring \
--label com.docker.stack.namespace=monitoring \
--container-label com.docker.stack.namespace=monitoring \
--mount type=bind,source=/proc,target=/host/proc \
--mount type=bind,source=/sys,target=/host/sys \
--mount type=bind,source=/,target=/rootfs \
--mount type=bind,source=/etc/hostname,target=/etc/host_hostname \
-e HOST_HOSTNAME=/etc/host_hostname \
basi/node-exporter \
--path.procfs /host/proc \
--path.sysfs /host/sys \
--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)" \
--collector.textfile.directory /etc/node-exporter/
Step 5. Prometheus 서비스 등록
Prometheus는 데이터를 수집해주는, 중간 매개체같은 역할이라고 생각하면 쉽다. 여러 곳으로부터 들어오는 데이터의 흐름을 Prometheus 서버 하나로 몰아주면 거기에 데이터가 쌓이게 되고, 관리자가 데이터를 가공하고 분석할 수 있는 쿼리를 제공한다.
참고로 Prometheus는 CNCF(Cloud Native Computing Foundation)에 등록이 되어 있는 툴이다.
$ docker \
service create \
--name prometheus \
--network monitoring \
--label com.docker.stack.namespace=monitoring \
--container-label com.docker.stack.namespace=monitoring \
--publish 9090:9090 \
basi/prometheus-swarm \
-config.file=/etc/prometheus/prometheus.yml \
-storage.local.path=/prometheus \
-web.console.libraries=/etc/prometheus/console_libraries \
-web.console.templates=/etc/prometheus/consoles \
-alertmanager.url=http://alertmanager:9093
Step 6. Grafana 서비스 등록
Grafana는 웹 브라우저 기반 데이터 시각화 툴로써 Prometheus, Elasticsearch 등의 데이터 수집 서버로부터 데이터를 제공받아 이를 사용자 입맛에 맞게 시각화해준다.
$ docker \
service create \
--name grafana \
--network monitoring \
--label com.docker.stack.namespace=monitoring \
--container-label com.docker.stack.namespace=monitoring \
--publish 3000:3000 \
-e "GF_SERVER_ROOT_URL=http://grafana.${CLUSTER_DOMAIN}" \
-e "GF_SECURITY_ADMIN_PASSWORD=$GF_PASSWORD" \
-e "PROMETHEUS_ENDPOINT=http://prometheus:9090" \
# -e "ELASTICSEARCH_ENDPOINT=$ES_ADDRESS" \
# -e "ELASTICSEARCH_USER=$ES_USERNAME" \
# -e "ELASTICSEARCH_PASSWORD=$ES_PASSWORD" \
basi/grafana
Step 7. 등록된 서비스 확인
$ docker service ls
Step 8. Grafana 접속
- Default Id / Pw : admin / admin
$ http://<Swarm Node IP>:3000
Step 9. Grafana DataSource (Prometheus) 생성
Step 10. Grafana 대시보드 Import
- 위 사이트에서 docker swarm을 검색 후 원하는 대시보드의 Id를 복사한다.
- 대시보드를 Import 한다.
Step 11. 대시보드 확인
결론
확인해보니 위 방법으로는 기본적인 서버의 리소스 상태, 네트워크 트래픽, 컨테이너 수 정도의 모니터링이 가능한것으로 보인다.
내가 바라는 것은 Docker Swarm 클러스터에 등록된 노드들의 상태나 컨테이너 정보들이기 때문에 관련 정보를 모니터링 할 수있는 방법을 더 찾아봐야 할 것 같다.
<참고 사이트>
dockerlabs.collabnix.com/play-with-docker/docker-prometheus-swarm/
blog.naver.com/alice_k106/221090348538
'Cloud > Docker' 카테고리의 다른 글
# Docker Swarm 클러스터 구성 (0) | 2020.10.13 |
---|---|
# docker 설치 (0) | 2019.09.06 |