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

举报
郁唯xiaolin 发表于 2021/05/22 09:12:35 2021/05/22
【摘要】 node_exporter的collector.textfile 功能自定义监控

一、简介

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é <anarcat@debian.org>
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="\2"} \1/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


4、配置Grafana

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。