【1】需求
由于项目需求,我们往往需要采集exporter不能采集到的数据,那么用go在短时间内定制exporter和后期交接的维护都会存在时间成本,所有我们可以用通过 node_exporter --collector.textfile.directory 参数,用shell或者python来收集数据。
【2】Prometheus实现步骤
(2.0)步骤概述
1)自定义脚本并把内容以key:value的形式写入以 .prom结尾的文件
2)定时任务执行自定义脚本
3)添加启动参数,node_exporter采集数据(采集频率为定时任务的频率)
(2.1)配置启动
通过textfile采集用户自己生成的指标,参数--collector.textfile.directory
,如下:
./node_exporter --collector.textfile.directory='/path/'
(2.2)输出格式
必须要输出如下格式,help 要是不写会默认给你加上,但 type,和最下面的 key value 必须要写
#HELP example_metric read from /path/example.prom
(2.3)最终文档成型
《1》生成的文件必须放在 --collector.textfile.directory='/path/' 指定目录下
《2》生成的文件内容必须包含
#TYPE example_metric untyped example_metric 1
《3》生成的文件,文件后缀名必须以 .prom 结尾
(2.4)定时任务运行脚本生成采集指标值
一般脚本任务(输出指标到.prom文件)会被放入crontab中,按照需求设置指标采集时间;
同时node_exporter采集的时候文件执行写入操作,可能导致文件出现问题。
我们可以将任务先转移到一个临时文件,然后通过临时文件的重命名进行操作。
*/2 * * * * sh test.sh && mv /path/example.promm /path/example.prom
(2.5)指标采集
指标采集的时间是根据你的crontab的定时任务的时间来的,可以根据通过这个指标来判断数据是否上报node_textfile_mtime_seconds;也可以对这个指标监控, node_textfile_mtime_seconds这个key值表示的是textfile最后一次采集文件的时间,如
node_textfile_mtime_seconds{file="process_counts.prom"}
【3】案例实现
(3.1)基本案例》监控当前登录用户数量
1)自定义脚本并把内容以key:value的形式写入以 .prom结尾的文件
2)定时任务执行自定义脚本
3)添加启动参数,node_exporter采集数据(采集频率为定时任务的频率)
(1)先启动启动采集器也没关系,注意参数 --collector.textfile.directory=/data/dba/tmp
(2)启动定时任务,每分钟执行一次;
然后我们访问一下本地的采集指标,看看是否有对应的采集指标,如下图我们的采集指标 login_users 就已经出来了,如果没出来则看看文件是否生成。
注意如下图,我们这里没有写 #TYPE,所以是隐式的 untyped(也就是默认根据内容自动隐式转换)
(3)PromQL 查验一下
如下图,正常,这样就可以引用到grafana 和 告警里去了。
搞定,完成;
(3.2)监控 keepalived 进程存活脚本
如果有类似多个采集脚本,那么需要额外写一个参考脚本;
【相关参考】
一、node_exporter安装非常简单,只要解压后直接后台运行即可,默认端口是9100
# tar xvf node_exporter-1.0.1.linux-amd64.tar.gz
# mv node_exporter-1.0.1.linux-amd64 /usr/local/node_exporter
# cat >/usr/lib/systemd/system/node_exporter.service <<EOF [Unit] Description=node_exporter [Service] ExecStart=/usr/local/node_exporter/node_exporter \ --web.listen-address=:9100 \ --collector.systemd \ --collector.systemd.unit-whitelist="(ssh|docker|rsyslog|redis-server).service" \ --collector.textfile.directory=/usr/local/node_exporter/textfile.collected Restart=on-failure [Install] WantedBy=multi-user.target EOF # systemctl enable node_exporter # systemctl start node_exporter.service
二、启动参数说明
1、启用systemd收集器
systemd收集器记录systemd中的服务和系统状态。首先需要通过参数--collector.systemd启用该收集器,同时如果不希望收集所有的服务,只收集部分关键服务,node_exporter在启动时可以使用--collector.systemd.unit-whitelist参数配置指定的服务。
2、指定textfile收集器目录
使用textfile收集器可以让用户添加自定义的度量指标,功能类似pushgateway,同zabbix中自定义的item一样,只要将度量指标和值按照prometheus规范的格式输出到指定位置且以.prom后缀文件保存,textfile收集器会自动读取collector.textfile.directory目录下所有以.prom结尾的文件,并提取所有格式为Prometheus的指标暴露给Prometheus来抓取。
textfile收集器默认是开启的,我们只需要指定--collector.textfile.directory的路径即可。
--collector.textfile.directory=/usr/local/node_exporter/textfile.collected
例如,需要监控系统登录用户数
# echo "node_login_users $(who |wc -l)" > /usr/local/node_exporter/textfile.collected/login_users.prom
# echo "node_processes $(ps -ef |wc -l)" > /usr/local/node_exporter/textfile.collected/node_processes.prom
以定时任务的方式采集
*/1 * * * * echo "login_users $(who |wc -l)" > /usr/local/node_exporter/textfile.collected/login_users.prom
*/1 * * * * echo "login_users $(who |wc -l)" > /usr/local/node_exporter/textfile.collected/node_processes.prom
3、启用或禁用收集器
通过 ./node_exporter -h 命令,可以看到默认启用了哪些收集器(default: enabled),若要禁用某个收集器,如
--collector.ntp,可以修改为 --no-collector.ntp,即禁用该收集器。 作者:itcooking https://www.bilibili.com/read/cv6494666/ 出处:bilibili