2022. 6. 27. 17:02ㆍDocker
우리가 운영하는 서버 혹은 컨테이너의 상태를 확인하기 위해서 우리는 해당 서버의 리소스 즉.
CPU Usage , Memory Usage .. Storage, Network가 어떻게 이용되고 얼마만큼 사용되고 있는지 알 필요가 있다.
이를 도와주는것이 바로 이 프로메테우스 와 그라파나를 이용한 모니터링 시스템이 되겠다.
0. 구성
위에서 보이는 그림과 같이 여러 서버에 부착된 Node Exporter로 부터 데이터를 Prometheus가 수집하여 Grafana를 이용해서 수집하는 형태이다.
1. Node Exporter 설치
# 현재 위치 확인
$ pwd
/home/sidelineowl
# 압축 파일 다운로드
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.2.0/node_exporter-1.2.0.linux-amd64.tar.gz
# 압축 파일 해제
$ tar -xvf node_exporter-1.2.0.linux-amd64.tar.gz
# 압축 파일 삭제
$ rm node_exporter-1.2.0.linux-amd64.tar.gz
# 압축 해제된 디렉토리 ~/apps/node_exporter 경로 변경
$ mv node_exporter-1.2.0.linux-amd64 ~/apps/node_exporter
# node_exporter 설치된 디렉토리로 이동
$ cd apps/node_exporter/
# node_exporter 실행
$ ./node_exporter
해당 순서로 실행을 하고 아래 명령어를 이용해서 실제로 동작하고 있는지 확인 할 수 있다.
curl localhost:9100/metrics
위 로그의 마지막 부분을 보면 request_total 이라고 적히며 코드별 횟수가 나오는데 현재 이 Node Exporter는 Prometheus에 연결되어 있기때문에 전송성공이 발생하고 있는것이 보인다.
이제 설치가 완료 되었으나 저 디렉토리 위치에서 실행하고 실행결과를 보기 힘듦으로 systemctl에 등록하여 사용해보자.
$ pwd
/home/sidelineowl/apps/node_exporter
# user 추가
$ sudo useradd -M -r -s /bin/false node_exporter
# 실행 파일 /usr/local/bin/으로 경로 이동
$ sudo cp ./node_exporter /usr/local/bin
# /usr/local/bin/node_exporter node_exporter 유저, 그룹 권한 주기
$ sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
# 서비스 파일 등록
$ sudo tee /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
# 데몬 리로드
# sudo systemctl daemon-reload
2. Prometheus + Grafana
얘 둘은 쌍으로 묶어서 Docker-compse를 활용하여 작성하도록 하겠다.
version: "3"
services:
prometheus:
container_name: prometheus
image: prom/prometheus:latest
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
volumes:
- ./prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
links:
- prometheus:prometheus
ports:
- 3000:3000
volumes:
- ./data/grafana:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=myadmin
- GF_USERS_ALLOW_SIGN_UP=false
위 내용을 docker-compose.yml로 지정하고 내부에 있는 Prometheus의 볼륨을 주목한다.
해당 Docker-compose 파일이 있는 위치에 디렉토리를 만들고 그 내부에 요상한 파일이 하나 들어가는데
prometheus.yml이다. 이놈을 작성해야 정상적으로 데이터를 수집 해 오기 시작한다.
내용은 아래와 같다.
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # By default, scrape targets every 15 seconds.
external_labels:
monitor: 'my-project'
rule_files:
# - 'alert.rules'
# - "first.rules"
# - "second.rules"
# alert
# alerting:
# alertmanagers:
# - scheme: http
# static_configs:
# - targets:
# - "alertmanager:9093"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
scrape_interval: 5s
static_configs:
- targets: ['<당신의 NodeExporter 주소>:9100']
위와 같이 적혀진 파일을 docekr-compose의 Volume에 적힌 위치에 싸악 넣어주면 적용이 완료된다.
확인을 해보자!
docker-compose up -d
도커 이미지를 실행하게 되면 localhost:9090에 접속할 수 있다. 그리고 나서 검색창에 up을 넣게되면 위의 prometheus.yml에서 지정한 두개의 exporter 정보를 확인 할 수 있다. 이러면 80은 왔다.
Grafana도 확인해 보아야 한다. 우선 알아야할 사이트가 있는데
https://grafana.com/grafana/dashboards/1860 바로 요놈이다. 여기있는 대시보드를 활용하면 메트릭을 아주 잘 볼수 있게 도와준다.
저 버튼을 누른뒤 우리가 열어 놓은 Grafana container에 접속한다. Grafana의 접속 포트는 3000
localhost:3000 그리고 우리는 띄워 놓은 Prometheus를 DataSource에 등록을 해준다.
1.
2.
3.
4.
여기서 굉장히 문제가 발생을 하게 되는데. 우리는 Docker-compose를 활용하여 Grafana와 Prometheus를 묶어놨다. 본인의 경우에는 분명히 같은 Docker compose로 묶여서 내 로컬위에 올라가 있는데. 두개의 접속정보가 Localhost를 공유하지 못한다. 그래서 접속 URL을 입력할때 꼭 Prometheus의 Docker Container IP를 찾아서 9090포트로 접속하기를 바란다.
Docker Container IP주소 찾는법
링크 : https://todaycodeplus.tistory.com/57
Data Source 설정이 완료가 되면 아래의 Dashboard 설정을 진행한다.
1.
2.
3.
4.
여기까지 오면 여러분이 설치한 Node Exporter의 Resource들의 모니터를 볼 수 있다.
수고하셨습니다.!!
자료를 작성하는데 참고한 내용 :
https://gurumee92.tistory.com/225
https://danawalab.github.io/common/2020/03/16/Common-Prometheus.html
'Docker' 카테고리의 다른 글
Docker - Docker Container의 IP주소를 확인하자. (0) | 2022.06.27 |
---|---|
Docker -Python ODBC 구성 (0) | 2022.03.24 |
내 Container Docker hub에 Commit/Push 하기 (1) | 2021.05.27 |