Data Engineering/Observability

[Observability] - 4. Node Monitoring 해보기!!

cstory-bo 2024. 1. 1. 12:23

우선 여기서 말하는 노드란,
컴퓨터 네트워크를 구성하는 하나의 기기를 의미한다.
흔히 컴퓨터 1대가 노드가 될 수 있다.

Node 정보를 가져오기 위해서는 Node Exporter가 필요하다.

Node Exporter

설치하기

링크

wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.5.0.linux-amd64.tar.gz
mv node_exporter-1.5.0.linux-amd64 node_exporter
cd node_exporter/
export NODE_EXPORTER_HOME=$(pwd)
echo $NODE_EXPORTER_HOME

실행하기

node_exporter 실행파일을 찾아서 실행시킨다.

./node_expoerter

디폴트로 9100포트로 띄우기 때문에
웹 브라우저에서 {자신의 ec2 ip}:9100로 확인할 수 있다.

이런 화면이 뜨고 Metrics를 눌러 메트릭 확인이 가능하다.

systemctl 등록

이전에서 했던 것처럼 systemctl로 등록해놓는다.

sudo vi /etc/systemd/system/node_exporter.service

i를 눌러 아래 내용을 입력한다.

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=ubuntu
Group=ubuntu
Type=simple
ExecStart=/home/ubuntu/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

첫 시작을 ~/ 에서 했다면 위의 경로와 맞을 것이다.
만약 아니라면 실행파일이 있는 경로로 수정해야한다.

다시 터미널에서 등록하고 시작한다.

sudo systemctl daemon-reload
sudo systemctl enable node_exporter.service
sudo systemctl start node_exporter.service

ps -ef | grep node_exporter 로 확인이 가능하고
sudo systemctl status node_exporter.service 로도 확인이 가능하다.

Prometheus에서 Node Exporter Scrap

로그 수집을 위해 prometheus가 node exporter의 정보를 스크랩해야한다.
그러기 위해서 prometheus의 설정파일(prometheus.yml)에서 다음 내용을 추가한다.

# scrape_configs:
  - job_name: "node"
    static_configs:
      - targets: ["localhost:9100"]

prometheus와 node exporter가 다른 서버에 있다면
localhost 대신 node exporter가 실행하고 있는 서버의 ip 주소를 넣는다.

Grafana에서 Node Monitoring 대시보드 구성하기

grafana 사이트에서 많은 사람들이 자신이 만든 대시보드를 공유해놓는다.
대시보드 설정은 모두 json 형식으로 공유하기에 쉽게 import, export가 가능해서 재사용성이 높다.

https://grafana.com/grafana/dashboards/1860-node-exporter-full/

 

Node Exporter Full | Grafana Labs

Thank you! Your message has been received!

grafana.com

위의 대시보드는 "node" 라는 jobname으로 프로메테우스에서 node exporter로 스크랩하면
바로 사용 가능하다.

대시보드에 import를 눌러 아래 링크를 붙이거나 파일을 다운받아 넣을 수도 있다.

대시보드 advanced setting

대시보드 > Variables 에서 확인하여
변수, regex, key - value 형식 등의 동적인 변수로 설정하여
다양하게 사용할 수 있다.

대시보드의 select box 만들어
거기서도 변수들을 $variable_name 과 같은 형식으로 불러 올 수 있다.

$__interval

데이터를 얼마나 촘촘히 표현할 것 인지를 설정하는 값이다.

$__rate_interval

rate() 쿼리를 사용할 때 설정하는 range vector의 값을 자동화된 변수로 사용할 수 있도록 해주는 예약 변수이다.

The $__rate_interval variable is […] defined as max( 
$__interval + Scrape interval, 4 * Scrape interval).

Metric

  • 메모리 전체량을 구하고 싶으면, node_memory_MemTotal_bytes
  • 사용량을 구하고 싶으면, node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes - node_memory_SReclaimable_bytes
  • shared량을 구하고 싶으면, node_memory_Shmem_bytes
  • free 메모리는 node_memory_MemFree_bytes
  • 버퍼/캐시 메모리를 알고싶으면, node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_SReclaimable_bytes
  • 사용가능한 메모리량을 구하고 싶으면, node_memory_MemAvailable_bytes