Docker-compose 배경 설명
일반적으로 prometheus나 Grafana를 설치한다고 하면, docker full로 이미지를 땡겨와서 설치하는 게 주된 방법이다.
하지만, container가 다수 개가 될 경우 관리가 어려워진다.
그래서, Docker-compose를 통해 하나의 docker-compose.yml로 여러 개의 컨테이너를 동시에 생성/관리/삭제할 수 있다.
나는 Docker-compose를 통해 Prometheus + Grafana를 실행할 예정으로, 아래와 같이 Docker.compose.yml를 작성했다.
크게 보면, prometheus와 grafana간 통신 가능하도록 하나의 networks를 구성해서 묶어주었고 (networks: monitor),
컨테이너의 /etc/prometheus/ 파일들을 volumes으로 로컬 /home/monitor/prometheus/ 로 마운트 시켜주었다.
1 version: '3.8' 2 networks: 3 monitor: 4 driver: bridge 5 6 services: 7 prometheus: 8 image: prom/prometheus:latest 9 container_name: prometheus 10 user: root 14 volumes: 15 - /home/monitor/prometheus/:/etc/prometheus/ 16 - /home/monitor/prometheus/data:/prometheus 17 ports: 18 - 9090:9090 19 networks: 20 - monitor 21 restart: always 22 grafana: 23 container_name: grafana 24 image: grafana/grafana:latest 25 environment: 26 - GF_SECURITY_ADMIN_USER=admin 27 - GF_SECURITY_ADMIN_PASSWORD=test1234 28 - GF_USERS_ALLOW_SIGN_UP=false 29 volumes: 30 - /home/monitor/grafana:/var/lib/grafana 31 - /home/monitor/grafana/provisioning:/etc/grafana/provisioning 32 ports: 33 - 3000:3000 34 depends_on: 35 - prometheus 36 networks: 37 - monitor 38 restart: always |
그리고, prometheus.yml를 작성한다.
최소 동작을 위해 필요한 설정들은 딱히 많지 않다. targets만 적어주면 된다 (=exporter가 설치된 노드 ip)
이제 준비해야할 파일은 끝났다. docker-compose를 실행해보자.
docker-compose up // 컨테이너 및 network 생성 및 실행
[ec2-user@ monitor]$ sudo docker-compose up -d // d: background에서 실행
Creating network "monitor_monitor" with driver "bridge"
Creating prometheus ... done
Creating grafana ... done
[ec2-user@ monitor]$
[ec2-user@ monitor]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34c0e6778103 grafana/grafana:latest "/run.sh" 3 minutes ago Up 3 minutes 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp grafana
85878fe66a18 prom/prometheus:latest "/bin/prometheus --c…" 3 minutes ago Up 3 minutes 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp prometheus
포트포워딩으로 웹 접속이 가능한지 확인
$ ssh -i [인증서].pem -p [local port] ec2-user@[ec2 public IP] -L 9090:[Prometheus가 떠 있는 ec2]:9090
$ ssh -i [인증서].pem -p [local port] ec2-user@[ec2 public IP] -L 3000:[Grafana가 떠 있는 ec2]:3000
1. Prometheus: localhost:9090/
2. Grafana: localhost:3000/
+ 포트 포워딩은 아니지만 curl을 통해 node exporter가 설치된 node 확인.
+ node exporter의 metrics 확인
[ec2-user@ip-100-64-50-187 monitor]$ curl http://[Node exporter가 설치된 target IP]/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"} 2.5627e-05 go_gc_duration_seconds{quantile="0.25"} 5.0424e-05 go_gc_duration_seconds{quantile="0.5"} 8.6099e-05 go_gc_duration_seconds{quantile="0.75"} 0.000109742 go_gc_duration_seconds{quantile="1"} 0.000267627 go_gc_duration_seconds_sum 14.640208971 go_gc_duration_seconds_count 161529 # HELP go_goroutines Number of goroutines that currently exist. |
완료.
여기서 prometheus를 data source로 가져와보자.
URL은 prometheus의 dns name인 prometheus를 가져오고, port를 지정해주면 된다.
(localhost는 안된다. 서로 다른 컨테이너니까.)
그리고 grafana Labs에 있는 dashboard를 하나 import 해보자. URl을 그대로 복붙해도 된다.
https://grafana.com/grafana/dashboards/15172
그렇게 하면 이런 대시보드가 생성되어 prometheus로부터 받는 데이터를 예쁘게 보여준다.
docker-compose로 한 번에 생성시킨 컨테이너들을 중단하는 방법은,
docker-compose down // 컨테이너 및 network 정지 및 삭제
* docker-compose down는 컨테이너만 정지시킨다.
[ec2-user@ip- monitor]$ sudo docker-compose down
Removing grafana ... done
Removing prometheus ... done
Removing network monitor_monitor
[ec2-user@ip- monitor]$
[ec2-user@ip- monitor]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[ec2-user@ip- monitor]$
'직장생활 > Kubernetes(K8s), Docker' 카테고리의 다른 글
Docker, DOCKERFILE 기본 명령어 모음 (0) | 2022.05.28 |
---|---|
K8s Statefulset tag값 수정 에러(원복) 해결 (ft. Prometheus 설치) (0) | 2022.04.20 |
Docker Image 불러오기 (docker pull/save/load/push) (0) | 2022.04.20 |
Certified Kubernetes Administrator (CKA) - 10 Troubleshooting (ft. Udemy) (0) | 2021.11.01 |
K8s - LVM 설정 적용 (0) | 2021.10.27 |