Prometheus系列--使用node_exporter的collector.textfile 功能自定义监控

网友投稿 2728 2022-05-30

一、简介

Node_exporter的--collector.textfile是一个收集器,这个收集器可以允许我们暴露自定义指标,比如某些pushgateway功能中自定义的指标,就可以使用--collector.textfile功能来实现,而且,node_exporter实现起来更加优雅。用node_expoerter ,直接在现在基础上做textfile collector即可。如果有pushgateway的话,可是使用pushgateway的,也可以使用textfilecollector。自己用那个舒服,就用吧。

collector.text收集器通过扫描指定目录中的文件,提取所有格式为prometheus指标的字符串,然后暴露它们以便抓取。

二、Textfile Collector使用

因为node_exporter之前已经安装过,如果node_exporter启动时没有指定--collector.textfile.directory参数,需要在启动文件里面,添加上参数,并确认文件指的目录存在。

/usr/local/prometheus/node_exporter # 编辑systemd启动文件,和下方的supervisor二选一即可。 cat >> /usr/lib/systemd/system/node_exporter.service << "EOF" [Unit] Description=Prometheus node_exporter Requires=network.target remote-fs.target After=network.target remote-fs.target [Service] Type=simple User=root Group=root ExecStart=/usr/local/prometheus/node_exporter --web.listen-address=0.0.0.0:9100 --collector.textfile.directory=$PWD/textfile ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target EOF # 使用supervisor管理node_exporter程序,和上方的systemd二选一即可。 cat >> /etc/supervisord.d/node_exporter.ini << "EOF" [program:node_exporter] # command=/usr/local/prometheus/node_exporter/node_exporter --web.listen-address=0.0.0.0:9100 --collector.textfile.directory=$PWD/textfile; the program (relative uses PATH, can take args) numprocs=1 ; number of processes copies to start (def 1) directory=/usr/local/prometheus/node_exporter ; directory to cwd to before exec (def no cwd) autostart=true ; start at supervisord start (default: true) autorestart=true ; retstart at unexpected quit (default: true) startsecs=30 ; number of secs prog must stay running (def. 1) startretries=3 ; max # of serial start failures (default 3) exitcodes=0,2 ; 'expected' exit codes for process (default 0,2) stopsignal=QUIT ; signal used to kill process (default TERM) stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) user=root ; setuid to this UNIX account to run the program redirect_stderr=true ; redirect proc stderr to stdout (default false) stdout_logfile=/usr/local/node_exporter/node_exporter.stdout.log ; stderr log path, NONE for none; default AUTO stdout_logfile_maxbytes=64MB ; max # logfile bytes b4 rotation (default 50MB) stdout_logfile_backups=4 ; # of stdout logfile backups (default 10) stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) stdout_events_enabled=false ; emit events on stdout writes (default false) stopasgroup=true killasgroup=true EOF #启动 # systemd 方式启动 systemctl daemon-reload systemctl enable node_exporter systemctl start node_exporter systemctl status node_exporter # supervisor方式启动 supervisorctl update supervisorctl status supervisorctl start node_exporter supervisorctl restart node_exporter #检查是否启动成功 ss -untlp |grep 9100 ps -ef |grep node_exporter 如果启动不成功,使用systemd的,使用journal -xe 检查启动报错;使用supervisor,去日志文件检查启动报错。

3、写入自定义指标

写入自定义指标,这个需要自己开发脚本,将数据写入对应的文件即可。也可以在github(点我点我...)中看实例文件,熟悉python或者shell都可以写。

GitHub 中有提供模板的,比如directory-size.sh

]# cat directory-size.sh #!/bin/sh # # Expose directory usage metrics, passed as an argument. # # Usage: add this to crontab: # # */5 * * * * prometheus directory-size.sh /var/lib/prometheus | sponge /var/lib/node_exporter/directory_size.prom # # sed pattern taken from https://www.robustperception.io/monitoring-directory-sizes-with-the-textfile-collector/ # # Author: Antoine Beaupré echo "# HELP node_directory_size_bytes Disk space used by some directories" echo "# TYPE node_directory_size_bytes gauge" du --block-size=1 --summarize "$@" \ | sed -ne 's/\/\\/;s/"/\"/g;s/^\([0-9]\+\)\t\(.*\)$/node_directory_size_bytes{directory=""} /p'

示例的模板文件中,有HELP和TYPE两行注释,这两行注释需要将指标名称与下面的内容完全对应,比如:“node_directory_size_bytes”,三行的指标名称一定要对应起来。防止自定义多了,自己分辨不出来。主要是给自己看。

自定义采集,需要自己写crontab定时任务,定时执行。所以仿照刚刚实例中的定时任务格式写就好了,sponge是写入管道传来的数据到文件中。tee也可以,tee会输出内容。

之前碰到过一种现象,就是加入数据正在写入,但是prometheus正好拉取,可能会出现拉取出现问题,这里呢,需要先将自定义指标写入一个临时文件,然后将文件mv一下到正式的文件。

以下是英文原版的说明。有能力可以看下。

Textfile Collector

The textfile collector is similar to the Pushgateway, in that it allows exporting of statistics from batch jobs. It can also be used to export static metrics, such as what role a machine has. The Pushgateway should be used for service-level metrics. The textfile module is for metrics that are tied to a machine.

To use it, set the --collector.textfile.directory flag on the node_exporter commandline. The collector will parse all files in that directory matching the glob *.prom using the text format. Note: Timestamps are not supported.

To atomically push completion time for a cron job:

echo my_batch_job_completion_time $(date +%s) > /path/to/directory/my_batch_job.prom.$$ mv /path/to/directory/my_batch_job.prom.$$ /path/to/directory/my_batch_job.prom

To statically set roles for a machine using labels:

echo 'role{role="application_server"} 1' > /path/to/directory/role.prom.$$ mv /path/to/directory/role.prom.$$ /path/to/directory/role.prom

以上摘抄的github中的文档

GitHub - prometheus/node_exporter: Exporter for machine metrics

Prometheus系列--使用node_exporter的collector.textfile 功能自定义监控

4、配置Grafana

这里的数据源,是使用已有的数据源即可。配置pannel,需要写一写公式。请查看pushgateway那篇文章的Grafana的json。

GitHub

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:通过 Maven 编译打包 Java + Scala 混合项目
下一篇:0x7OpenResty系列:Openresty最佳案例| 第7篇:模块开发,OpenResty连接Redis
相关文章