티스토리 뷰

728x90
반응형

본 포스팅에서는 Prometheus와 Grafana를 활용한 자원 사용률 모니터링 방법에 대해 알아보겠습니다.

시스템을 구축하고 운영할 때 시스템을 구성하는 요소들의 조화로운 설계도 중요하지만, 모니터링, 로깅 또는 추적 등을 위한 요소를 배치하는 것은 유지보수 측면에서 굉장히 중요한 부분입니다.

이번 포스팅에서는 자원 사용률을 모니터링하는 방법에 대해 알아볼 예정이며, 다음과 같은 오픈소스를 배치하여 구축해 보도록 하겠습니다.

오픈소스 소프트웨어

1. Prometheus

Prometheus는 이벤트 모니터링 및 Alert에 사용되는 오픈소스 소프트웨어입니다. 유연한 쿼리 및 실시간 경고와 함께 HTTP 모델을 사용하여 구축 된 시계열 데이터베이스에 실시간 메트릭을 기록합니다.

Prometheus는 데이터 수집하고, 데이터를 가공하고, 데이터를 분석할 수 있는 쿼리를 제공하는 오픈소스 소프트웨어입니다.

 

2. Grafana

Grafana는 Prometheus에서 정렬한 데이터를 브라우저에 시각화주는 역할을 합니다.

 

위 소프트웨어를 기반으로 모니터링 Flow를 살펴보자면

[수집하고자 하는 대상 노드 → 익스포터 → Prometheus → Grafana]

순으로 정보를 표출하게 됩니다.

오픈소스 설치

지금부터 구성되는 노드는 다음과 같습니다.

192.168.56.101 : 컨테이너가 기동되는 노드로 Node Exporter & cAdvisor가 설치됩니다.

192.168.56.102 : 모니터링을 수행하는 Grafana & Prometheus가 설치됩니다.

1) 익스포터 설치

Node-Exporter는 node의 상태 정보를 수집하여 Prometheus에게 전송하는 역할을 담당합니다.

[root@nrson ~]# docker run -itd -p 9100:9100 --name exporter prom/node-exporter:latest
Unable to find image 'prom/node-exporter:latest' locally
Trying to pull repository docker.io/prom/node-exporter ... 
latest: Pulling from docker.io/prom/node-exporter
49a2d53aa1af: Pull complete 
3589a6efd9ce: Pull complete 
190160031744: Pull complete 
Digest: sha256:a2f29256e53cc3e0b64d7a472512600b2e9410347d53cdc85b49f659c17e02ee
Status: Downloaded newer image for docker.io/prom/node-exporter:latest
0f9dd400972cd46e2947a538665ba47e21c6c5acdf9db22122c027428eb7845d
[root@nrson ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
docker.io/prom/node-exporter   latest              e5a616e4b9cf        6 months ago        22.9 MB
[root@nrson ~]# docker ps -a
CONTAINER ID        IMAGE                       COMMAND                CREATED             STATUS              PORTS                    NAMES
0f9dd400972c        prom/node-exporter:latest   "/bin/node_exporter"   4 minutes ago       Up 4 minutes        0.0.0.0:9100->9100/tcp   exporter
[root@nrson ~]#

2) cadvisor 설치

cAdvisor (컨테이너 관리자)는 실행중인 컨테이너의 자원 사용 및 성능에 대한 정보를 제공합니다. 실행중인 컨테이너에 대한 정보를 수집, 집계, 처리하는 데몬입니다. 특히, 각 컨테이너에 대해 매개 변수, 자원 사용량 추이 및 전체 컨테이너에 대한 자원 사용량 추이를 수집합니다.

[root@nrson ~]# docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:v0.27.0
Unable to find image 'google/cadvisor:v0.27.0' locally
Trying to pull repository docker.io/google/cadvisor ... 
v0.27.0: Pulling from docker.io/google/cadvisor
90f4dba627d6: Pull complete 
1002f3899460: Pull complete 
ef94a70c87ed: Pull complete 
Digest: sha256:0ed2c59614338035601d1546a458dd2c6a07ec972801d163a95a19aa78545993
Status: Downloaded newer image for docker.io/google/cadvisor:v0.27.0
783420df76994463d4d485d68073b643a2692d731df626169c8625ad6b67b62c
[root@nrson ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
docker.io/prom/node-exporter   latest              e5a616e4b9cf        6 months ago        22.9 MB
docker.io/google/cadvisor      v0.27.0             bc11ca438489        2 years ago         57.8 MB
[root@nrson ~]# docker ps -a
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
783420df7699        google/cadvisor:v0.27.0     "/usr/bin/cadvisor..."   40 minutes ago      Up 40 minutes       0.0.0.0:8080->8080/tcp   cadvisor
0f9dd400972c        prom/node-exporter:latest   "/bin/node_exporter"     57 minutes ago      Up 57 minutes       0.0.0.0:9100->9100/tcp   exporter
[root@nrson ~]#

3) prometheus 설치

먼저 Prometheus와 cAdvisor & Exporter 간의 연결을 위한 yml 파일을 작성합니다.

- Prometheus & Exporter

[root@nrson2 test]# cat prometheus_exporter.yml 
global:
    scrape_interval: 5s
    external_labels:
        monitor: 'my-monitor'
scrape_configs:
    - job_name: 'node-exporter'
      static_configs:
          - targets: ['192.168.56.101:9100']
[root@nrson2 test]# docker run -itd --name prometheus -h prometheus -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:v1.7.0 -config.file=/etc/prometheus/prometheus.yml
Unable to find image 'prom/prometheus:v1.7.0' locally
Trying to pull repository docker.io/prom/prometheus ... 
v1.7.0: Pulling from docker.io/prom/prometheus
4b0bc1c4050b: Pull complete 
a3ed95caeb02: Pull complete 
d6ab6c75ce17: Pull complete 
d1ba1f184fb7: Pull complete 
56097eef1e9b: Pull complete 
65c2725a5669: Pull complete 
9727f656a1c9: Pull complete 
1e1df62e29e2: Pull complete 
efa90f7b6764: Pull complete 
Digest: sha256:9f122c1e5482f347d767763f768c32ccfab47f70cb4f839ba3ec8772cd2aaa06
Status: Downloaded newer image for docker.io/prom/prometheus:v1.7.0
d94b77721632bd65d493edfd57e2531394b234ad26a8fa11bd64de083f17696d
[root@nrson2 test]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/prom/prometheus   v1.7.0              bb25f19f9142        2 years ago         74.5 MB
[root@nrson2 test]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
d94b77721632        prom/prometheus:v1.7.0   "/bin/prometheus -..."   57 seconds ago      Up 56 seconds       9090/tcp            prometheus
[root@nrson2 test]# 

- Prometheus & cAdvisor

[root@nrson2 test]# cat prometheus_cadvisor.yml 
global:
    scrape_interval: 5s
    external_labels:
        monitor: 'my-monitor'
scrape_configs:
    - job_name: 'node-exporter'
      static_configs:
          - targets: ['192.168.56.101:8080']
[root@nrson2 test]# docker run -itd --name prometheus-cadvisor -h prometheus_cadvisor -v $(pwd)/prometheus_cadvisor.yml:/etc/prometheus/prometheus.yml prom/prometheus:v1.7.0 -config.file=/etc/prometheus/prometheus.yml
fbb5b3f40aaf3d116e497d19202efa30c617463813b6ba0d3ba70091af058b09
[root@nrson2 test]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/prom/prometheus   v1.7.0              bb25f19f9142        2 years ago         74.5 MB
[root@nrson2 test]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
fbb5b3f40aaf        prom/prometheus:v1.7.0   "/bin/prometheus -..."   6 seconds ago       Up 5 seconds        9090/tcp            prometheus_cadvisor
d94b77721632        prom/prometheus:v1.7.0   "/bin/prometheus -..."   6 minutes ago       Up 6 minutes        9090/tcp            prometheus
[root@nrson2 test]#

4) Grafana 설치

Grafana는 Prometheus에서 정렬한 데이터를 브라우저에 표출하는 시각화 도구입니다.

[root@nrson2 test]# docker run -d --name grafana -h grafana -e GF_SECURITY_ADMIN_PASSWORD=mypassword -p 3000:3000 --link prometheus:prometheus --link prometheus-cadvisor:prometheus-cadvisor grafana/grafana:4.4.3
Unable to find image 'grafana/grafana:4.4.3' locally
Trying to pull repository docker.io/grafana/grafana ... 
4.4.3: Pulling from docker.io/grafana/grafana
bc2a558c8dfc: Pull complete 
a3ed95caeb02: Pull complete 
06f67620de0e: Pull complete 
6d0219f4defe: Pull complete 
Digest: sha256:02182e84c643ccee23cd08265fe58d2711dd3d7ee08a356b35f7936d8d58a95c
Status: Downloaded newer image for docker.io/grafana/grafana:4.4.3
9e8218c15debba72b3e24adc09e0751c2a139e625f542e174b8d9db1820ba906
[root@nrson2 test]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/grafana/grafana   4.4.3               49e2eb4da222        2 years ago         287 MB
docker.io/prom/prometheus   v1.7.0              bb25f19f9142        2 years ago         74.5 MB
[root@nrson2 test]# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                    NAMES
9e8218c15deb        grafana/grafana:4.4.3    "/run.sh"                5 seconds ago        Up 4 seconds        0.0.0.0:3000->3000/tcp   grafana
6d40e9b31df6        prom/prometheus:v1.7.0   "/bin/prometheus -..."   About a minute ago   Up About a minute   9090/tcp                 prometheus-cadvisor
d94b77721632        prom/prometheus:v1.7.0   "/bin/prometheus -..."   21 minutes ago       Up 21 minutes       9090/tcp                 

Grafana 접속

Grafana 접속 정보는 다음과 같습니다. [http://192.168.56.102:3000]

초기 User / Password는 admin / mypassword(Grafana 설치 시 SECURITY_ADMIN_PASSWORD 입력 값)입니다.

다음으로 Add Data Source를 선택하면 아래화면으로 이동합니다.

- Prometheus cAdvisor & Exporter Add

정상적으로 추가가 완료되었다면, 아래와 같이 Data Sources 정보를 확인할 수 있습니다.

다음으로 왼쪽 상단의 메뉴 → Dashboards → Import를 선택합니다.

Upload .json File에 각각 cAdvisor & NodeExporter에 대한 Grafana Dashboards json을 업로드 합니다.

Node Exporter : https://grafana.com/grafana/dashboards/22

cAdvisor : https://grafana.com/grafana/dashboards/3125

추가한 정보를 기반으로 대시보드를 확인해 보면 다음과 같이 container 별 메트릭이 수집되고 표출되는 것을 확인할 수 있습니다.

cadvisor & exporter는 prometheus를 구축하기 위한 자원이었으며, trusting hawking container는 httpd를 사용하는 container입니다.

이번 포스팅에서는 Grafana를 구축하여 자원의 사용 추이를 모니터링하는 방법에 대해 알아보았습니다.

728x90
반응형