监控工具 - Prometheus 的 Exporter
Exporter
在 Prometheus 核心组件中,监控样本数据的收集都是由 Exporter 完成。
Prometheus 服务器只需定时从这些 Exporter 提供的 HTTP 服务获取监控数据。
最终直观地通过Prometheus Web UI 浏览采集到的各类监控数据。
简而言之,Exporter是将收集的数据转化为对应的文本格式并提供HTTP接口,供Prometheus 定期采集数据。
Exporter列表
- https://prometheus.io/docs/instrumenting/exporters/
- 官方维护的Exporter具有official标识,可从 https://github.com/prometheus 下载
- 常用的Exporter:node_exporter、wmi_exporter、mysqld_exporter、redis_exporter、blackbox_exporter等
文本数据格式
在Prometheus 监控环境中,所有返回监控样本数据基于文本格式,可以更好地跨平台和可读性。
Prometheus基于文本的格式是面向行的。
行由换行符分隔,最后一行必须以换行符结尾,空行被忽略,以#
开始的行通常都是注释内容。
- 以
# HELP
开始的行,表示metric的帮助与说明注释,包含当前监控指标名称和对应的说明信息。 - 以
# TYPE
开始的行,表示定义metric类型,包含当前监控指标名称和类型,类型有Counter、 Gauge、Histogram、 Summary和Untyped。 - 以非
#
开始的行,表示监控样本数据。 - 其他一般性注释,方便阅读使用,会被Prometheus忽略。
node_exporter
Prometheus 官方提供了 Go语言编写的node_exporter来实现对Linux操作系统主机的监控数据采集。
涵盖了系统内几乎所有的标准指标,如CPU、内存、磁盘空间、磁盘I/O、系统负载和网络带宽。
- https://github.com/prometheus/node_exporter/releases
- 查看命令帮助信息
./node_exporter -h
安装配置node_exporter
[root@node100 ~]# tar -xzvf node_exporter-1.8.2.linux-amd64.tar.gz -C /opt
node_exporter-1.8.2.linux-amd64/
node_exporter-1.8.2.linux-amd64/NOTICE
node_exporter-1.8.2.linux-amd64/node_exporter
node_exporter-1.8.2.linux-amd64/LICENSE
[root@node100 ~]#
[root@node100 ~]# cd /opt/
[root@node100 opt]# ln -sv node_exporter-1.8.2.linux-amd64 node_exporter
'node_exporter' -> 'node_exporter-1.8.2.linux-amd64'
[root@node100 opt]#
[root@node100 opt]# useradd prometheus && echo "prometheus:prometheus"|chpasswd && chage -M 99999 prometheus
[root@node100 opt]# chown -R prometheus:prometheus /opt/node_exporter-1.8.2.linux-amd64/
[root@node100 opt]# ll /opt |grep node_exporter
lrwxrwxrwx 1 root root 31 Sep 13 21:00 node_exporter -> node_exporter-1.8.2.linux-amd64
drwxr-xr-x 2 prometheus prometheus 56 Jul 14 19:58 node_exporter-1.8.2.linux-amd64
[root@node100 opt]#
[root@node100 opt]# cd
[root@node100 ~]# vim /usr/lib/systemd/system/node_exporter.service
[root@node100 ~]# cat /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/opt/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
[root@node100 ~]#
[root@node100 ~]# systemctl daemon-reload
[root@node100 ~]# systemctl enable node_exporter.service
Created symlink /etc/systemd/system/multi-user.target.wants/node_exporter.service → /usr/lib/systemd/system/node_exporter.service.
[root@node100 ~]# systemctl start node_exporter.service
[root@node100 ~]# systemctl status node_exporter.service
● node_exporter.service - node_exporter
Loaded: loaded (/usr/lib/systemd/system/node_exporter.service; enabled; preset: disabled)
Active: active (running) since Fri 2024-09-13 21:35:22 CST; 8s ago
Docs: https://prometheus.io/
Main PID: 2644 (node_exporter)
Tasks: 5 (limit: 48820)
Memory: 5.0M
CPU: 10ms
CGroup: /system.slice/node_exporter.service
└─2644 /opt/node_exporter/node_exporter
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.129Z caller=node_exporter.go:118 level=info collector=time
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.129Z caller=node_exporter.go:118 level=info collector=timex
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.129Z caller=node_exporter.go:118 level=info collector=udp_queues
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.129Z caller=node_exporter.go:118 level=info collector=uname
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.129Z caller=node_exporter.go:118 level=info collector=vmstat
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.129Z caller=node_exporter.go:118 level=info collector=watchdog
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.129Z caller=node_exporter.go:118 level=info collector=xfs
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.129Z caller=node_exporter.go:118 level=info collector=zfs
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.130Z caller=tls_config.go:313 level=info msg="Listening on" address=[::>
Sep 13 21:35:22 node100 node_exporter[2644]: ts=2024-09-13T13:35:22.130Z caller=tls_config.go:316 level=info msg="TLS is disabled." http2=f>
lines 1-21/21 (END)
[root@node100 ~]#
与Prometheus集成
- 在Prometheus服务器配置文件中添加相关配置并验证
- 热加载新配置
curl -X POST http://192.168.16.200:9090/-/reload
- 页面查看 http://192.168.16.200:9090/targets 节点状态正常为UP
[root@node200 ~]# cd /opt/prometheus
[root@node200 prometheus]# ll
total 261324
drwxr-xr-x 2 prometheus prometheus 38 Aug 9 23:13 console_libraries
drwxr-xr-x 2 prometheus prometheus 173 Aug 9 23:13 consoles
drwxr-xr-x 7 prometheus prometheus 172 Sep 13 21:19 data
-rw-r--r-- 1 prometheus prometheus 11357 Aug 9 23:13 LICENSE
-rw-r--r-- 1 prometheus prometheus 3773 Aug 9 23:13 NOTICE
-rwxr-xr-x 1 prometheus prometheus 137838575 Aug 9 22:56 prometheus
-rw-r--r-- 1 prometheus prometheus 934 Aug 9 23:13 prometheus.yml
-rwxr-xr-x 1 prometheus prometheus 129735160 Aug 9 22:56 promtool
[root@node200 prometheus]# cp prometheus.yml prometheus.yml_bak
[root@node200 prometheus]# vim prometheus.yml
[root@node200 prometheus]#
[root@node200 prometheus]# diff prometheus.yml prometheus.yml_bak
30,32d29
< - job_name: "node_exporter"
< static_configs:
< - targets: ["192.168.16.100:9100"]
[root@node200 prometheus]#
[root@node200 prometheus]# curl -X POST http://192.168.16.200:9090/-/reload
[root@node200 prometheus]#
official exporter
Consul exporter (official)
Memcached exporter (official)
MySQL server exporter (official)
Node/system metrics exporter (official)
HAProxy exporter (official)
AWS CloudWatch exporter (official)
Collectd exporter (official)
Graphite exporter (official)
InfluxDB exporter (official)
JMX exporter (official)
SNMP exporter (official)
StatsD exporter (official)
Blackbox exporter (official)
行动是绝望的解药!
欢迎转载和引用,但请在明显处保留原文链接和原作者信息!
本博客内容多为个人工作与学习的记录,少数内容来自于网络并略有修改,已尽力标明原文链接和转载说明。如有冒犯,即刻删除!
以所舍,求所得,有所获,方所成。