Grafana, prometheus, node-exporter install guide

모니터링 은 Devops 방법론을 도입할 때 자주 간과되는 분야 중 하나다. 과거의 모니터링 솔루션은 프로그램 환경의 기본적인 통계에 대한 시야만 제공했다. 그러나 요즘은 애자일한 개발 문화, 빈번한 코드 변경이 일반화되면서 프로그램 환경에 대한 더 종합적인 실시간 시야가 필요해졌다. 그래서 최근 부상하고 있는 모니터링 도구인 Prometheus라는 소프트웨어를 소개하려고 한다.

Prometheus는 이벤트 모니터링 및 alert에 사용되는 오픈소스 소프트웨어이다. Grafana같은 Metric dashboard, graph 편집 툴로 다양하게 시각화할 수도 있다. 그리고 node-exporter를 통해 시스템 Metric(disk I/O 통계, CPU 부하, 메모리 사용량, 네트워크 통계 등)을 분석할 수도 있다.

호스트 네임 설정, 포트 열고 닫기 등등 네트워크 및 리눅스 command에 관한 기본적인 지식이 있다는 가정하에 진행한다.

Contents

  1. Prometheus 설치
  2. Grafana 설치
  3. node-exporter 설치
  4. Prometheus-node_exporter Connetion
  5. Prometheus-Grafana Connention
  6. Grafana AlertManeger setting
  7. Conclusion

Version Info

  • Ubuntu 18.04 LTS
  • prometheus-2.9.2.linux-amd64
  • grafana-6.1.4.linux-amd64

1. Prometheus

모니터링 도구
서버에 클라이언트가 떠 있으면 서버가 주기적으로 클라이언트에 접속해서 데이터를 가져오는 방식
Expoter가 열어놓은 HTTP 엔드포인트에 접속해서 Metric을 수집한다.
go 언어로 만들어져서 쓰레드처리가 뛰어나다는 장점이 있다.

Prometheus Architecture

Untitled-e021e4fc-6285-4063-8559-ab4eeadd9e3a-2

Exporter

  • 프로메테우스 클라이언트 기반이 아닌 애플리케이션들에서 Metric 데이터를 수집할 수 있게 해준다.
  • 본 문에서는 node-exporter로 시스템 리소스를 모니터링할 것이지만 nginx-exporter, mysql-exporter 등등 여러가지 exporter가 존재해서 여러 애플리케이션을 모니터링할 수 있다.

Prometheus Server

  • 시각화 툴인 Grafana 와 연동해서 여러가지 시각화를 할 수 있다.
  • Prometheus 의 AlertManager를 통해 Alert를 설정할 수 있는데 본 문에서는 Grafana 의 AlertManager에서 Alert를 설정할 것이다. (간편하다.)

Prometheus agent installation

wget https://github.com/prometheus/prometheus/releases/download/v2.9.2/prometheus-2.9.2.linux-amd64.tar.gz

wget 명령어로 github에서 설치할 파일을 다운받는다.
아래 주소에서 cpu 종류, 릴리즈 버전, 운영체제를 고려해서 다운 받도록한다.

Download 주소: https://github.com/prometheus/prometheus/releases/download

Untitled-4c2ace65-b93f-43dd-8f9b-c2d4094d20f8

gzip -d prometheus-2.9.2.linux-amd64.tar.gz
tar -xvf prometheus-2.9.2.linux-amd64.tar
cd prometheus-2.9.2.linux-amd64/

압축을 풀고 디렉터리 안으로 이동한다.

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

prometheus를 실행한다.

Prometheus의 실행화면이다. (default port 번호 9090)

Untitled-bf46c6cc-7a21-4de7-85f8-8a9d3ab3efa4

2. Grafana

데이터 시각화, 모니터링 및 분석을 위한 오픈 소스이다.
그래프, 단일 차트, 테이블, 히트 맵 및 프리 텍스트 패널을 지원할 뿐만 아니라 공식,커뮤니티 기반 플러그인 및 시각화 할 수있는 앱과의 통합을 지원한다.
오픈 소스이기 때문에 여러 다른 데이터 소스와의 통합을 위해 플러그인을 처음부터 작성할 수 있다.

파일을 다운받고 압축을 풀어준다. 그리고 실행한다.
아래 주소에서 운영체제를 고려해서 다운 받아주도록한다.

wget https://dl.grafana.com/oss/release/grafana-6.1.4.linux-amd64.tar.gz
tar -zxvf grafana-6.1.4.linux-amd64.tar.gz
cd grafana-6.1.4


./bin/grafana-server web

Download 주소: https://grafana.com/docs/installation/

Untitled-9bd874d0-9bbd-459a-a1e8-dc3f28aec619

초기 아이디 비밀번호는 admin이다. (default port 번호 3000)

로그인 후 제일 먼저 보이는 dashboard 화면이다.

Untitled-292197b0-6f95-4135-b5f7-6546da06f346

datasource를 Prometheus로 설정한다.

Untitled-9d6b0545-73b0-49b1-bc45-04733b8dc968

URL에는 Prometheus url을 넣어주면 된다.

Untitled-35315ebc-e803-432c-941e-d79995e94e40

3. node-exporter

호스트 서버의 CPU, Memory, Disk 사용량등을 수집하는 node-exporter는 모니터링 대상의 Metric 데이터를 수집하고 Prometheus가 접속했을 때 API로 노출한다.

cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
tar -xvf node_exporter-0.16.0.linux-amd64.tar.gz
sudo mv node_exporter-0.16.0.linux-amd64/node_exporter /usr/local/bin/

github에서 파일을 다운받고, 압축을 풀어준다.
아래 주소에서 cpu 종류, 릴리즈 버전, 운영체제를 고려해서 다운 받도록한다.

Download 주소: https://github.com/prometheus/node_exporter/releases

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

node_exporter.service 파일을 만들어준다.

node_exporter.service

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

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
  • 이 파일은 Node-Exporter의 콜렉터가 기본적으로 수집하는 Metric 세트로 node-exporter를 시스템에게 실행하게 지시한다.
  • 아래 주소로 들어가면 Node-Exporter의 콜렉터가 수집하는 Metric의 리스트를 볼 수 있다.

prometheus/node_exporter

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl status node_exporter
sudo systemctl enable node_exporter

node-exporter가 시작하고, 재부팅시에도 자동으로 시작되게 해준다.

Untitled-5da01250-1aec-4357-adc4-950f37907acc

default 포트인 9100번으로 접속해보면 여러 리소스들이 수집되고 있는 것을 알 수 있다.

4. Prometheus-node_exporter Connetion

제일 중요한 부분이다. prometheus에 6개의 서버의 node-exporter를 연결해주고 Grafana로 시각화 할 수 있게 할 것이다.

prometheus.yml 파일을 수정한다.

prometheus.yml

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'name'
    scrape_interval: 10s
    static_configs:
      - targets: ['YOUR_IP:9100']

job_name은 내가 식별할 수 있는 이름으로 하자.
띄어쓰기가 문법이기 때문에 주의하도록 하자

targets에는 클라이언트 컴퓨터 ip와 node-exporter port번호를 적는다.(클라이언트 컴퓨터에서 node-exporter가 active한 상태여야한다.)

Untitled-c796fc16-fa64-4745-a0a7-a6fa8c3732a6

prometheus에 접속해서 /targets로 접속해보면 리소스가 제대로 받아와지는 것을 알 수 있다.

state가 up이 아니라면 다시 prometheus.yml 파일을 수정해보자 or 클라이언트 컴퓨터에서 node-exporter가 잘 실행되고 있는지 확인하자

5. Prometheus-Grafana Connention

간단하게 연결할 수 있다.
datasource → Prometheus 를 누르고 url에 Prometheus url을 넣어주면 된다.

Untitled-0d6719be-ab2b-40ff-a1ff-c02493675f1b

Untitled-c1ddf434-9566-432a-8cc5-2b9162ff576b

쿼리 부분에 원하는 쿼리를 작성하고 그래프를 보면 된다.

6. Grafana AlertManeger setting

특정 리소스 모니터한 값이 임계치를 넘었을때 이메일로 경고를 보내게 할 것이다.

Grafana 설정 폴더(/conf)에서 default.ini파일을 수정한다. 자신의 gmail id, password를 입력하도록 하자

default.ini

Untitled-6b8a97cd-cdb1-450c-bc8b-cef796665ddc

Alerting→Notification channels를 생성해준다.

Untitled-4f5dad74-31b6-4734-b8ef-2a646e911b40

다시 dashboard로 가서 alert탭으로 간다
Notifications에서 내가 설정한 channel 이름을 입력해주면 된다.

Untitled-4aacf65d-badf-4edc-80c4-bf7ab13505be

Alert 하는 내용은 자신이 설정할 수 있다(단순 text, graph 등등)
Alerting하는 메일이 오고, State가 안정화가 돼면 다시 메일이 온다 매우 편리한 기능인 것 같다.

Untitled-98d60359-f05f-4aae-948d-e854fa1a3544

Untitled-9165d2de-2b60-4954-a13f-88a0b957b8a5

7. Conclusion

본 문에서는 Prometheus를 설치하고 Grafana, Node-Exporter와의 연동, Grafana AlertManager 설정 및 test를 했다.

기존에 존재하는 모니터링 툴도 많지만 Prometheus만이 가지는 Open-Source라는 강력한 장점 때문에 써보는 것도 좋을 것 같다.

Prometheus를 더 알아보고 싶다면 아래 주소로 들어가서 공식 문서를 찾아보는 것도 많은 도움이 될 것이다.
Grafana는 다른 사람이 만들어 놓은 대시보드를 사용할 수 있게 되어있다. 홈페이지에 올라와 있으니 찾아서 많이 사용해보길 바란다.

아직 관련 리소스가 부족해서 글의 내용이 부실할 수도 있지만 Prometheus, Grafana를 사용해 보고 싶은 사용자에겐 조금이나마 도움이 되고자 하는 마음에서 글을 쓴다.

Prometheus 공식 문서

Overview | Prometheus

Grafana 공식 홈페이지

Grafana - The open platform for analytics and monitoring

Prometheus에서 사용 가능한 exporter 목록

Exporters and integrations | Prometheus

Show Comments