Cloud/Docker

# Docker Swarm 클러스터 모니터링

skysoo1111 2020. 10. 13. 11:24

Docker Swarm 클러스터를 모니터링 할 수 있는 방안은 여러가지가 있지만 Grafana를 이용한 방안을 알아보겠다.

Docker Swarm 클러스터 구성 방법은 이전 포스팅 글에서 확인할 수 있다.

 

# Docker Swarm 클러스터 구성

 

# Docker Swarm 클러스터 구성

Docker Swarm 이란 컨테이너를 관리하는 Orchestration Tool 중의 하나이다. Orchestration Tool 이란? 컨테이너의 단순 배포 뿐만이 아니라 확장, 네트워킹 등을 자동화하여 수백 또는 수천 개의 컨테이너를 ��

skysoo1111.tistory.com

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

 

Grafana Dashboards - discover and share dashboards for Grafana.

Grafana.com provides a central repository where the community can come together to discover and share dashboards.

grafana.com

  • 위 사이트에서 docker swarm을 검색 후 원하는 대시보드의 Id를 복사한다.

  • 대시보드를 Import 한다.

 

Step 11. 대시보드 확인

결론

확인해보니 위 방법으로는 기본적인 서버의 리소스 상태, 네트워크 트래픽, 컨테이너 수 정도의 모니터링이 가능한것으로 보인다.

 

내가 바라는 것은 Docker Swarm 클러스터에 등록된 노드들의 상태나 컨테이너 정보들이기 때문에 관련 정보를 모니터링 할 수있는 방법을 더 찾아봐야 할 것 같다.

 

 

<참고 사이트>

dockerlabs.collabnix.com/play-with-docker/docker-prometheus-swarm/

 

Prometheus Swarm

Docker - Beginners Intermediate Advanced

dockerlabs.collabnix.com

 

blog.naver.com/alice_k106/221090348538

 

106. [Docker] Prometheus + CAdvisor + Grafana 조합으로 도커 클러스터 모니터링하기 [1편]

사실 예전에 했던 작업인데, 기록 안하면 200% 까먹을 것 같이서 기록해둔다. Docker Cluster Monitorin...

blog.naver.com

 

'Cloud > Docker' 카테고리의 다른 글

# Docker Swarm 클러스터 구성  (0) 2020.10.13
# docker 설치  (0) 2019.09.06