一、exporter介绍
Prometheus客户端分为pull和push两种方式。如果是pull形式的话则是服务端主动向客户端拉取数据,这样需要客户端上安装exporters作为守护进程。exporter也叫采集器、导出器,用于对客户端各项数据进行采集监控。可以把它理解为Prometheus的客户端,好比Zabbix的agent。exporter可以分为内置采集器和间接采集,内置采集器主要是因为Prometheus原生支持K8S、Etcd,不需要额外配置就能对其进行监控。而间接采集就是指对第三方组件或系统本身进行数据采集,官方已经提供了各类常用组件的exporter,要监控什么就安装对应的exporter即可。比如node_exporter、MySQL Exporter等。如果是push形式的话客户端需要安装pushgateway插件,然后运需要运维人员用脚本把监控数据组织成键值形式提交给pushgateway,再由它提交给服务端。它适合于现有exporters无法满足需求时,自己灵活定制。
二、安装exporter(以监控系统指标的node_exporter进行介绍,其他exporter方式都差不太多)
1、node_exporter是通过读取/proc下的文件获取系统的各种数据。在官网下载好node_exporter的二进制包之后就可以直接使用
bin/node_exporter
2、如果需要开启某些额外监控使用--collector.对应选项即可
node_exporter --collector-diskstats #打开磁盘状态相关监控
node_exporter --collector.systemd --collector.systemd.unit-whitelist=(docker|sshd|nginx).service #监控systemd管理的docker\ssh\nginx三个服务,如果服务正常返回1
3、使用textfile实现自定义监控项
textfile收集器可以添加自定义的度量指标,类似后面会讲到的pushgateway。只要将度量指标和值按照规范格式输出到指定位置并以.prom后缀保存,然后textfile会自动读取collector.textfile.directory目录下所有.prom文件,然后将采集到的数据暴露给Prometheus来抓取。textfile功能默认是开启的,只需要在启动node_exporter的时候指定下collector.textfile.directory路径
bin/node_exporter --collector-diskstats --collector.textfile.directory=/usr/local/node_exporter/textfile.collected
textfile配置示例
echo "node_login_users $(who | wc -l)" > /usr/local/node_exporter/textfile.collected/login_user.prom #自定义系统登录用户数监控
*/1 * * * * echo "node_login_users $(who | wc -l)" > /usr/local/node_exporter/textfile.collected/login_user.prom #以定时任务的方式监控
4、使用curl命令访问服务可以看到返回很多键值对数据。这里只要掌握常用的几个key就可以了,比如查看系统CPU使用率的node_cpu、查看磁盘IO的node_disk*、查看系统负载的node_load1、查看系统内存的node_memory*、查看网络带宽的node_network*、查看文件系统使用情况的node_filesystem*等
curl ip:9100/metrics
# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter #TYPE说明了数据类型
node_cpu{cpu="cpu0",mode="idle"} 362812.7890625
5、查询node_exporter监控数据
除了访问:9100/metrics来获取数据外,也可以在Prometheus界面通过PromQL来进行查询,支持使用标签进行匹配和条件过滤,如果在保证语法没有问题却查询不到数据的情况,请确认机器时间同步。下图就是使用PromQL进行了一次查询,这些查询语句涉及了多种函数,灵活使用这些函数可以完成很多维度的监控。后续会对一些常用函数进行讲解