반응형

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 확인.

1. 프로메테우스
2. grafana

+ 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]$ 

반응형

+ Recent posts