목표:
노드의 cpu 사용률을 grafana로 시각화한다.
아래 구조를 만든다.
1. prometheus exporter를 통해 노드의 cpu rate를 수집한다.
2. prometheus 서버가 exporter의 metric을 pull한다.
3. grafana가 prometheus 서버에 저장된 metric을 시각화한다.
node_exporter를 설치한다.
brew install node_exporter
https://formulae.brew.sh/formula/node_exporter
실행해보자.
brew services start node_exporter
http://localhost:9100/metrics에서 메트릭을 확인할 수 있다.
가이드를 참고한다.
https://prometheus.io/docs/prometheus/latest/getting_started/
실행 파일을 다운로드받은 후, 다음 명령어로 실행한다.
./prometheus --config.file=prometheus.yml
brew로도 다운받을 수 있다.
아래 명령어를 사용한다.
brew install prometheus
MacBook Air (13-inch, 2017)인 글쓴이 로컬에서는 brew install하는데 시간이 오래 걸려서, 다른 방법을 사용했다.
prometheus 서버가 띄워진 것을 확인한다. 9090 번이 default port다.
exporter/metrics로 노출하는 정보를 prometheus에서 pull할 수 있어야 한다.
local에서 작업한다면 추가적인 작업은 필요없다.
prometheus.yml의 기본 설정에 exporter의 url이 추가되어 있기 때문이다.
만약 local 환경이 아니라면, exporter의 ip 주소를 static_configs에 추가해 주자.
설정이 반영된 후, prometheus에서도 cpu 메트릭을 확인할 수 있다. exporter에서 노출하는 cpu 메트릭을 prometheus가 pull하고 있다.
brew로 설치한다.
brew install grafana
실행한다.
brew services start grafana
localhost:3000을 확인해보자.
로그인 페이지를 볼 수 있다.
grafana 설정에 들어간다.
prometheus data source를 추가한다.
stackoverflow에서 다음 promQL을 추천하고 있다.
https://stackoverflow.com/questions/34923788/prometheus-convert-cpu-user-seconds-to-cpu-usage
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
위 방법을 사용하면 될 것 같다.
node_cpu_seconds_total의 mode는 idle, nice, user, system으로 나뉜다.
idle 모드를 제외한 나머지 모드에서 cpu는 계산 중 상태이므로, 100%에서 idle한 비율을 빼는 방법을 사용한다.
15초 동안 idle한 시간이 0초라면 cpu는 100%이고, idle한 시간이 15초이면 cpu는 0%다.
대시보드에서 패널을 추가한다.