티스토리 뷰
본 포스팅에서는 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를 구축하여 자원의 사용 추이를 모니터링하는 방법에 대해 알아보았습니다.
'⑦ Open Source Software' 카테고리의 다른 글
Redis5 Cluster 구성하기 (0) | 2021.05.05 |
---|---|
Embedded JupyterHub Content-Security-Policy Issue (0) | 2020.01.08 |
[Jupyter Package] Jupyter notebook 환경을 제공하는 Jupyterhub 활용 가이드 (5) | 2019.11.28 |
[ELK+Redis] Elasticsearch + Logstash + Kibana + Redis + SpringSleuth를 활용한 로그 추적 시스템 구축 (2) | 2019.08.28 |
[Redis 5.x] 설치 및 CLI 활용 가이드 (0) | 2019.05.31 |
- Total
- Today
- Yesterday
- 아키텍처
- webtob
- aa
- 마이크로서비스
- k8s
- JEUS7
- SWA
- Da
- API Gateway
- MSA
- OpenStack
- TA
- nodejs
- Architecture
- jeus
- openstack token issue
- 마이크로서비스 아키텍처
- git
- kubernetes
- aws
- wildfly
- node.js
- openstack tenant
- 오픈스택
- JBoss
- apache
- 쿠버네티스
- JEUS6
- Docker
- SA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |