[Prometheus] CPU, Memory 모니터링을 위한 node exporter 시작하기

go_go_·2024년 4월 28일
0

Monitoring

목록 보기
2/3
post-thumbnail

개요

전 글에서 모니터링을 위해 프로메테우스를 설치하고 실행해보았다.
프로메테우스에서는 다양한 exporter가 있는데, 상황에 맞게 설치하여 애플리케이션 또는 서버를 모니터링할 수 있다.
그 중 많이 쓰이는 것은 node exporter로, 하드웨어 커널과 관련된 메트릭 정보를 수집하는 exporter이다. 주로 CPU, Memory, Netwok 모니터링 시 사용한다.
이 글에서는 node exporter를 설치하여 prometheus가 수집할 수 있도록 할 것이다.


목차는 다음과 같다.
1. node exporter 설치
2. Configuration (prometheus.yml)
3. Prometheus 재실행
4. node exporter 확인


📌 node exporter 설치


공식 홈페이지로 들어가서 node exporter의 다운로드 링크를 복사한다.

서버에 들어가 설치 후 실행해준다.

# 복사한 링크 붙여넣어 tar 파일 가져오기
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

# 압축 해제
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz
cd node_exporter-1.7.0.linux-amd64/

# node exporter 실행
./node_exporter

이제 localhost:9100/metrics 엔드포인트를 통해 지표를 수집하고 있는 것을 볼 수 있다.
아래 명령어를 서버에 입력하면 다음과 같이 뜰 것이다.

curl http://localhost:9100/metrics

위 사진은 node exporter가 메트릭을 정상적으로 수집하고 있으며, 어떤 메트릭을 수집하고 있는지 볼 수 있다.

이 중 하나로 예시를 들어보겠다.

# HELP node_memory_MemTotal_bytes Memory information field MemTotal_bytes.
# TYPE node_memory_MemTotal_bytes gauge
node_memory_MemTotal_bytes 1.004036096e+09

"node_memory_MemTotal_bytes"라는 메트릭은 메모리 총 용량을 나타내며, 총 용량은 1.004036096 × 10^9 바이트 즉, 약 1GB라는 것이다.


추가 - node exporter service 만들기

node exporter를 좀 더 쉽게 관리해주기 위해서 service로 만들 것이다.


1. 심볼릭 링크 생성

ln -s ./node_exporter-1.7.0.linux-amd64/ node_exporter
  1. service 파일 생성
cd /etc/systemd/system
vim node_exporter.service
[Unit]
Description=Prometheus Node Exporter
Documentation=https://prometheus.io/docs/guides/node-exporter/
Wants=network-online.target
After=network-online.target

[Service]
User=root
Restart=on-failure
ExecStart=/usr/local/monitoring/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

위의 설정에서 ExecStart의 경로는 node_exporter가 있는 경로로 수정해주면 된다.

  1. 실행
chmod 755 node_exporter.service

systemctl daemon-reload
systemctl start node_exporter.service

📌 Configuration (prometheus.yml)


prometheus.yml 파일에 들어가 아래 내용을 추가한다.

scrape_configs:
  - job_name: node-exporter
    metrics_path: /metrics
    static_configs:
    - targets:
      - localhost:9100
      labels:
        group: test
  • job_name: 수집 그룹 지정
  • metrics_path: 수집할 endpoint의 path
  • targets: 수집할 대상 지정 (IP, hostname)
  • labels: 라벨 지정, 이후 promql에서 필터링 할 때 사용

프로메테우스에서 수집되는 endpoint는 targets+metric이다.
위의 설정에서는 target은 localhost:9100이고, metrics_path가 /metrics이므로 수집 endpoint는 localhost:9100/metric이라는 뜻이다.
위에서 node exporter 설치 후 메트릭 수집 확인을 위해 curl로 입력한 주소와 동일한 것을 알 수 있다.

curl http://localhost:9100/metrics

📌 prometheus 재실행 & 확인


prometeus를 재시작해준다.

ps -ef | grep prometheus

kill -9 <prometheus_PID>

./prometheus --config.file=./prometheus.yml

만약 프로세스 죽이지않고 재시작 하고 싶다면 아래와 같이 입력하면 된다.

kill -s SIGHUP <PID>

이후 localhost:9090/targets 으로 들어가 확인하면 아래와 같이 타겟이 추가된 것을 볼 수 있다.

  • node-exporter: prometheus.yml 에서 지정한 job-name이다.
  • endpoint: prometheus.yml 에서 target+metric_path이다. 위에서는 localhost:9100/metric이다.
  • State: prometheus에서 잘 수집하고 있는지 체크한다. UP은 정상 수집 중이다.
    • 만약 수집이 안 되어 있다면(down이라고 뜬다면) prometheus서버에 들어가 curl로 endpoint를 입력하여 잘 수집되고 있는지 확인해보자.
      curl http://localhost:9100/metrics
  • Labels: 기본으로 설정된 라벨과 prometheus.yml에서 추가한 라벨을 확인할 수 있다.

이제 node exporter가 수집하는 메트릭에 대해서 prometheus 페이지에서 promql 통해 확인할 수 있다. 메모리 총 용량을 보기 위해 아래와 같이 입력하면 된다.

명령어 옆에 중괄호로 key, value 형태로 묶어 필터링할 수 있다. 여기에서는 직접 추가한 라벨로 필터링을 하였다.


이렇게 모니터링을 위해 prometehus 서버에 node exporter를 설치해보았다.
다음에는 다른 서버 모니터링을 구성하고 설정해보겠다.




참고

profile
개발도 하고 싶은 클라우드 엔지니어

0개의 댓글