node_exporter不仅可以自己采集系统指标,还可以通过textfile模块采集我们自定义的监控指标,为系统监控提供了更灵活的使用空间。比如我们可以使用脚本将收集到的监控数据通过这个模块暴露出来,供Prometheus监控报警使用。默认情况下,node_exporter将启用文本文件形成,但您需要使用--collector.textfile.directory参数设置收集路径。所有生成的监控指标都会放在该目录下,文件名后缀为.prom。所有自定义生成的监控指标都需要存储如下,比如我们使用shell或者python脚本写的文件:#HELPexample_metricMetricreadfrom/some/path/textfile/example.prom#TYPEexample_metricuntypedexample_metric1这其实是一个标准的metrics接口内容格式,如果这里不添加HELP信息,系统会帮助生成一个简单的描述信息,但是如果同一个指标名称出现在多个文件中,需要保证这些指标的HELP和TYPE一致,否则采集会出错。一般情况下,将指标输出到.prom文件的脚本任务会放入crontab中执行,收集指标的时间根据需要设置。但是如果在node_exporter采集的时候正在写入文件,可能会导致文件出现问题。我们可以先将任务转移到临时文件中,然后通过重命名临时文件的方式进行操作,降低风险,如下:*/5****$TEXTFILE/printMetrics.sh>/path/to/directory/metrics。prom.$$&&mv/path/to/directory/metrics.prom.$$/path/to/directory/metrics.prom对于.prom文件的采集,系统会自动添加采集文件的修改时间。我们可以设置一个警报来判断文件是否已经改变。例如指标采集时间为10分钟一次,那么修改时间应该<15分钟。否则,应针对上次收集失败发出警报。指标名称为node_textfile_mtime_seconds,指标采集时间为unixtime格式的时间。同时,这种方法除了加载一些检测信息外,还可以用来收集静态信息,比如定义的系统角色信息,或者服务器特定的配置信息等,这些信息也可以通过metrics传递。echo'role{role="application_server"}1'>/path/to/directory/role.prom.$$mv/path/to/directory/role.prom.$$/path/to/directory/role.prom这里我们以官方脚本提供的一个收集文件夹目录大小的shell脚本为例。脚本地址为:https://github.com/prometheus-community/node-exporter-textfile-collector-scripts/blob/master/directory-size.sh,内容如下:#!/bin/sh##Exposedirectoryusagemetrics,passedasanargument。##Usage:addthistocrontab:##*/5****prometheusdirectory-size.sh/var/lib/prometheus|sponge/var/lib/node_exporter/directory_size.prom##sedpattern取自https://www.robustperception.io/monitoring-directory-sizes-with-the-textfile-collector/##Author:AntoineBeaupré
