超简单!Node Exporter文本文件收集器:textfile外部指标集成方案
你是否还在为系统监控中自定义指标的收集而烦恼?作为运维人员,我们经常需要监控业务系统特有的指标,比如订单量、活跃用户数等,但这些数据通常不在Node Exporter默认采集范围内。本文将带你通过textfile收集器,三步实现任意外部指标的无缝集成,无需编写一行Go代码,让Prometheus监控如虎添翼。
一、为什么需要textfile收集器?
Node Exporter作为Prometheus最核心的监控代理,已经能采集CPU、内存、磁盘等系统级指标(源码实现见collector/meminfo_linux.go)。但在实际运维中,我们还需要:
- 业务系统状态(如队列长度、缓存命中率)
- 自定义脚本输出(如备份完成状态、SSL证书过期时间)
- 第三方应用指标(如Nginx访问量、MySQL连接数)
textfile收集器通过读取指定目录下的.prom格式文件,将这些外部指标标准化为Prometheus可识别的格式。其工作原理如下:
二、零基础配置三步法
2.1 准备指标文件
创建符合Prometheus规范的文本文件,扩展名为.prom。例如监控SSL证书过期时间:
# HELP ssl_cert_expiry_days 证书剩余有效天数
# TYPE ssl_cert_expiry_days gauge
ssl_cert_expiry_days{domain="example.com"} 365
ssl_cert_expiry_days{domain="test.com"} 90
项目内置多种指标类型示例,可参考collector/fixtures/textfile/different_metric_types/metrics.prom,包含计数器(Counter)、仪表盘(Gauge)、摘要(Summary)等类型。
2.2 配置Node Exporter
启动时通过--collector.textfile.directory参数指定目录(支持通配符):
./node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfile_collector
配置参数定义见collector/textfile.go#L36,支持同时指定多个目录。
2.3 验证指标暴露
访问http://localhost:9100/metrics,应能看到自定义指标:
# HELP ssl_cert_expiry_days 证书剩余有效天数
# TYPE ssl_cert_expiry_days gauge
ssl_cert_expiry_days{domain="example.com"} 365
# HELP node_textfile_mtime_seconds Unixtime mtime of textfiles successfully read.
node_textfile_mtime_seconds{file="ssl_certs.prom"} 1620000000
其中node_textfile_mtime_seconds指标可用于监控文件更新时间(实现见collector/textfile.go#L185)。
三、高级使用技巧
3.1 多文件合并规则
当多个文件包含同名指标时:
- 帮助文本必须一致,否则会报错(源码验证逻辑)
- 标签集需唯一,避免指标冲突
项目提供合并测试用例,如:
- 相同帮助文本:collector/fixtures/textfile/metrics_merge_same_help
- 不同帮助文本:collector/fixtures/textfile/metrics_merge_different_help
3.2 动态更新策略
推荐使用inotifywait监控文件变化,配合原子写入避免部分读取:
# 原子写入示例
echo "metric 1" > /tmp/metrics.prom.tmp && mv /tmp/metrics.prom.tmp /var/lib/node_exporter/metrics.prom
文件修改时间会反映在node_textfile_mtime_seconds指标中,可用于告警文件未更新问题。
3.3 常见错误排查
| 错误类型 | 日志特征 | 解决方案 |
|---|---|---|
| 文件格式错误 | failed to parse textfile data | 检查是否符合Prometheus格式规范 |
| 权限问题 | failed to open textfile data file | 确保node_exporter进程有读取权限 |
| 时间戳错误 | contains unsupported client-side timestamps | 移除# TYPE行后的时间戳 |
错误处理逻辑见collector/textfile.go#L213,可通过node_textfile_scrape_error指标监控异常状态。
四、企业级最佳实践
4.1 目录结构规划
推荐按业务域划分目录,便于权限管理:
/var/lib/node_exporter/
├── system/ # 系统脚本指标
├── business/ # 业务应用指标
└── third-party/ # 第三方服务指标
4.2 指标命名规范
- 使用
_分隔单词,全小写 - 指标名格式:
{业务}_{模块}_{指标}_{单位} - 标签键使用
snake_case,如{service="payment",env="prod"}
参考Prometheus官方规范:https://prometheus.io/docs/practices/naming/
4.3 集成系统服务
通过systemd服务自动启动,配置示例见examples/systemd/node_exporter.service,添加参数到ExecStart行:
ExecStart=/usr/local/bin/node_exporter \
--collector.textfile.directory=/var/lib/node_exporter/textfile_collector
五、总结与进阶
textfile收集器作为Node Exporter的"万能扩展接口",让非侵入式监控成为可能。通过本文学习,你已掌握: ✅ 基础配置与指标文件编写 ✅ 多场景错误排查 ✅ 企业级部署方案
进阶学习建议:
- 指标生命周期管理:使用
node_textfile_mtime_seconds监控文件时效性 - 大规模部署:结合配置管理工具(Ansible/SaltStack)分发指标脚本
- 高级验证:参考collector/textfile_test.go编写单元测试
收藏本文,关注项目CHANGELOG.md获取textfile收集器功能更新,下期将带来《PromQL实战:textfile指标告警规则编写》。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



