PMM Client - Node Exporter 설치
Node Exporter
Node Exporter는 리눅스 시스템의 시스템 메트릭(disk I/O 통계, CPU 부하, 메모리 사용량, 네트워크 통계 등)들을 Prometheus용 포멧으로 추출에서 웹 서비스로 제공하는 에이전트이다.
Node Exporter 설치
- 설치버전 - v0.13.0-rc.1 / 2016-10-16 Release
- 웹 서비스 포트 : 9100 (기본값)
010. Node Exporter 바이너리 압축 해제
Node Exporter 바이너리(node_exporter-0.13.0-rc.1.linux-amd64.tar.gz) 파일을 다운로드 받아 /home/mysql/DBA/programs/PMM105/client/ 디렉토리에 복사 한 후, 해당 파일을 압축 해제 한다.
| [mysql@pmmclient ~]$ cd /home/mysql/DBA/programs/PMM105/client/ [mysql@pmmclient client]$ tar xvzf node_exporter-0.13.0-rc.1.linux-amd64.tar.gz node_exporter-0.13.0-rc.1.linux-amd64/ node_exporter-0.13.0-rc.1.linux-amd64/LICENSE node_exporter-0.13.0-rc.1.linux-amd64/NOTICE node_exporter-0.13.0-rc.1.linux-amd64/node_exporter | cs |
020. Node Exporter 설치 디렉토리 생성
- 설치 디렉토리 : /data/pmm_client/node_exporter/
- 심볼릭 링크 생성 : /home/mysql/ node_exporter à /data/pmm_client/node_exporter/node_exporter-0.13.0-rc.1.linux-amd64
Node Exporter 설치 디렉토리를 생성하고 압축 해제한 Node Exporter 바이너리를 설치 디렉토리에 옮긴다(move). 그 후, 설치 디렉토리에 대한 심볼릭 링크를 생성하여 편의상 디렉토리 경로를 단순하게 한다.
| [mysql@pmmclient client]$ mkdir /data/pmm_client [mysql@pmmclient client]$ mkdir /data/pmm_client/node_exporter [mysql@pmmclient client]$ mv node_exporter-0.13.0-rc.1.linux-amd64 /data/pmm_client/node_exporter/ [mysql@pmmclient client]$ cd /home/mysql/ [mysql@pmmclient ~]$ ln -s /data/pmm_client/node_exporter/node_exporter-0.13.0-rc.1.linux-amd64 ./node_exporter [mysql@pmmclient ~]$ ls -al | grep node_exporter lrwxrwxrwx 1 mysql mysql 68 2016-10-19 11:49 node_exporter -> /data/pmm_client/node_exporter/node_exporter-0.13.0-rc.1.linux-amd64 | cs |
030. Node Exporter 기동
Node Exporter 바이너리를 압축만 해제하면 설치는 완료된다. 이제 Node Exporter를 기동하고 정상적으로 기동되었는지 로그와 프로세스 정상여부를 확인해본다.
Node Exporter 기동 시, 설정한 옵션은 다음과 같다.
-collectors.enabled : 수집을 원하는 지표에 대한 콜렉터를 지정한다.
또한 백그라운드 실행 시, Node Exporter의 정상작동 여부를 확인하기 위하여 /home/mysql/node_exporter/node_exporter.log 와 같이 로그를 남기도록 실행한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [mysql@pmmclient ~]$ cd /home/mysql/node_exporter/ [mysql@pmmclient node_exporter]$ nohup ./node_exporter -collectors.enabled="diskstats,filesystem,loadavg,meminfo,netdev,stat,time,uname,vmstat" -log.level=info > /home/mysql/node_exporter/node_exporter.log 2>&1 & [1] 53809 [mysql@pmmclient node_exporter]$ ps -ef | grep node_exporter mysql 53809 25822 0 11:51 pts/0 00:00:00 ./node_exporter -collectors.enabled=diskstats,filesystem,loadavg,meminfo,netdev,stat,time,uname,vmstat -log.level=info mysql 53830 25822 0 11:51 pts/0 00:00:00 grep node_exporter [mysql@pmmclient node_exporter]$ cat /home/mysql/node_exporter/node_exporter.log nohup: ignoring input time="2016-10-19T11:51:17+09:00" level=info msg="Starting node_exporter (version=0.13.0-rc.1, branch=master, revision=2ff8e5f0e4553371161b98293d52ed98ecb8117b)" source="node_exporter.go:135" time="2016-10-19T11:51:17+09:00" level=info msg="Build context (go=go1.7.1, user=root@197f6ac1b691, date=20161016-12:36:43)" source="node_exporter.go:136" time="2016-10-19T11:51:17+09:00" level=info msg="Enabled collectors:" source="node_exporter.go:155" time="2016-10-19T11:51:17+09:00" level=info msg=" - filesystem" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg=" - loadavg" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg=" - netdev" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg=" - stat" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg=" - time" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg=" - uname" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg=" - diskstats" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg=" - meminfo" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg=" - vmstat" source="node_exporter.go:157" time="2016-10-19T11:51:17+09:00" level=info msg="Listening on :9100" source="node_exporter.go:176" | cs |
Node Exporter기동 시, 명시적으로 지정한 콜렉터들이 수집하는 지표는 다음과 같다.
Name | Description | OS |
diskstats | Exposes disk I/O statistics from /proc/diskstats. | Linux |
filesystem | Exposes filesystem statistics, such as disk space used. | FreeBSD, Dragonfly, Linux, OpenBSD |
loadavg | Exposes load average. | Darwin, Dragonfly, FreeBSD, Linux, NetBSD, OpenBSD, Solaris |
meminfo | Exposes memory statistics. | Dragonfly, FreeBSD, Linux |
netdev | Exposes network interface statistics such as bytes transferred. | Dragonfly, FreeBSD, Linux, OpenBSD |
stat | Exposes various statistics from /proc/stat. This includes CPU usage, boot time, forks and interrupts. | Linux |
time | Exposes the current system time. | any |
vmstat | Exposes statistics from /proc/vmstat. | Linux |
Node Exporter기동 시, 지정할 수 있는 모든 콜렉터에 대한 정보는 Node Exporter github 사이트(https://github.com/prometheus/mysqld_exporter)에서 확인할 수 있다.
040. Prometheus 설정 파일 변경(클라이언트 추가)
PMM Server의 prometheus.yml 파일에 PMM Client의 노드정보를 추가한다.
추가한 PMM Client의 Node Exporter가 추출하는 시스템 모니터링 지표를 5초마다 Prometheus가 수집(scrape)하도록 설정하는 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | [pmm@pmmserver ~]$ cd prometheus [pmm@pmmserver prometheus]$ vi prometheus.yml # my global config global: scrape_interval: 5s # By default, scrape targets every 15 seconds. evaluation_interval: 5s # By default, scrape targets every 15 seconds. # scrape_timeout is set to the global default (10s). # Attach these labels to any time series or alerts when communicating with # external systems (federation, remote storage, Alertmanager). external_labels: monitor: 'codelab-monitor' # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first.rules" # - "second.rules" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # Override the global default and scrape targets from this job every 5 seconds. scrape_interval: 5s # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'linux' scrape_interval: 5s static_configs: - targets: ['192.168.0.11:9100'] labels: alias: "pmmclient:3306" | cs |
050. Prometheus 재 기동
prometheus.yml 설정 파일의 변경사항(PMM Client 추가)을 적용하기 위해서는 Prometheus를 재 기동해야 한다. Prometheus의 프로세스를 중지하고 재 기동한다.
| [pmm@pmmserver prometheus]$ ps -ef | grep prometheus pmm 13952 1 0 11:36 pts/0 00:00:03 /home/pmm/prometheus/prometheus -config.file=/home/pmm/prometheus/prometheus.yml -storage.local.retention=8760h -log.level=info [pmm@pmmserver prometheus]$ kill 13952 [pmm@pmmserver prometheus]$ nohup /home/pmm/prometheus/prometheus -config.file=/home/pmm/prometheus/prometheus.yml -storage.local.retention=8760h -log.level=info > /home/pmm/prometheus/prometheus.log 2>&1 & [1] 63570 [pmm@pmmserver prometheus]$ ps -ef | grep prometheus pmm 63570 59220 0 11:55 pts/0 00:00:00 /home/pmm/prometheus/prometheus -config.file=/home/pmm/prometheus/prometheus.yml -storage.local.retention=8760h -log.level=info | cs |
060. Prometheus 웹 서비스 접속
Prometheus를 정상적으로 재 기동하였다면, Prometheus 웹 서비스에 접속하여 추가한 pmmclient 서버가 정상적으로 등록되었는지 확인해본다.
Job name이 “linux”인 pmmclient(192.168.0.11) 노드가 추가되었고, state가 UP(정상)이라면 Prometheus가 pmmclient 서버를 정상적으로 인식한것이다.
Linux |
Endpoint | State | Labels | Last Scrape | Error |
| UP | alias="pmmclient:3306" | 4.017s ago | |
Prometheus |
Endpoint | State | Labels | Last Scrape | Error |
| UP | None | 4.134s ago | |
추가한 pmmclient의 Linux 메트릭을 클릭하면, 현재 Prometheus가 pmmclient 서버의 node_exporter로부터 수집한 리눅스 모니터링 정보를 확인할 수 있다.
.............. # HELP node_cpu Seconds the cpus spent in each mode. # TYPE node_cpu counter node_cpu{cpu="cpu0",mode="guest"} 0 node_cpu{cpu="cpu0",mode="idle"} 6.70609821e+06 node_cpu{cpu="cpu0",mode="iowait"} 43862.4 node_cpu{cpu="cpu0",mode="irq"} 0.5 node_cpu{cpu="cpu0",mode="nice"} 1.43 node_cpu{cpu="cpu0",mode="softirq"} 917.97 .............. | cs |