Prometheus - Resource 모니터링을 시작하자!

2022. 6. 27. 17:02Docker

우리가 운영하는 서버 혹은 컨테이너의 상태를 확인하기 위해서 우리는 해당 서버의 리소스 즉.

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