node_exporter自定义监控,prometheus pushgateway

【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》生成的文件内容必须包含(包含指标类型)

Prometheus 四种指标类型

1、counter  累加计数器

2、gauge 瞬态值

3、histogram(直方图)

4、summary(摘要)

下面的 untyped 为上面4个质保类型之一, example_metric 名称要与下面的 example_metric  1  名称一样

#TYPE example_metric untyped  
example_metric 1

#TYPE example_metric untyped  
example_metric{mode='a'} 1
example_metric{mode='b'} 2

 

《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

【参考文档】

tom:https://www.cnblogs.com/xysr-tom/p/13389650.html

http://t.zoukankan.com/lemon-le-p-14593297.html

posted @ 2022-08-09 20:09  郭大侠1  阅读(1583)  评论(0编辑  收藏  举报