node-exporter 的 textfile 收集器 是 Node-exporter 最核心、最实用的高级功能,没有之一,也是运维必会的功能。它的核心价值是:让你可以自定义任何业务 / 系统指标,以 Prometheus 标准格式写入文本文件,由 Node-exporter 自动采集并暴露,实现「无侵入自定义监控」,比如监控进程存活、端口监听、磁盘使用率阈值、业务服务状态、自定义脚本指标等,解决原生 Node-exporter 指标覆盖不到的所有场景。
版本说明:适配 node-exporter 0.16+ 所有新版本(目前主流 v1.0+、v1.8 + 都完美支持)
一、核心基础:textfile 是什么 & 核心作用
1,核心定义
textfile 是 Node-exporter 的一个内置收集器插件(Collector),默认是关闭状态,需要手动启用;
它的工作逻辑:
你通过 脚本 / 定时任务 / 手动 生成符合 Prometheus 文本指标格式 的文件 → 放到指定目录 → Node-exporter 定时读取该目录下的所有文件 → 将这些自定义指标和原生指标(cpu / 内存 / 磁盘)一起,在 9100/metrics 端口暴露 → Prometheus 统一拉取。
2,解决的核心痛点
Node-exporter 原生只能采集系统级指标(CPU、内存、磁盘、网络、进程数、句柄数等),但运维中一定会遇到这些需求:
- 监控
系统自定义阈值(比如某个挂载盘使用率、某个用户密码过期天数) - 监控
某个业务进程是否存活(比如你的process-exporter、python3 wsnedd.py进程) - 监控
自定义业务指标(接口调用量、日志错误数) - 所有原生指标覆盖不到的自定义监控需求,都能用
textfile完美实现。
3,核心优势
✅ 无侵入:不需要修改业务代码、不需要修改 Node-exporter 源码,纯文件读写;
✅ 通用性强:任何能写文件的脚本(shell/python/bash)都能生成指标,不限语言;
✅ 轻量高效:Node-exporter 读取本地文件,性能损耗可以忽略不计;
✅ 无缝集成:自定义指标和原生指标在同一个端口暴露,Prometheus 无需新增采集配置;
✅ 稳定可靠:生产环境最常用的自定义指标方案,没有之一,比第三方 exporter 更轻量。
二、前置必做:开启 textfile 收集器(关键步骤,缺一不可)
步骤 1:创建 textfile 的指标存放目录
固定规范,建议统一创建这个目录,所有自定义指标文件都放这里:
# 创建目录,授权node-exporter运行用户(一般是root,也可能是nobody),权限必须755+
mkdir -p /var/lib/node_exporter/textfile_collector
chmod 755 -R /var/lib/node_exporter/
chown root:root /var/lib/node_exporter/textfile_collector步骤 2:启动 Node-exporter 时,开启 textfile 收集器
textfile 是默认关闭的,必须在启动命令中通过 --collector.textfile.directory 指定目录来启用,这是核心启动参数,两种启动方式的完整配置(你一定会用到,全部复制即用)
【生产推荐】systemctl 系统服务启动 Node-exporter(带 textfile,永久生效)
编辑你的 node-exporter 服务文件:
vim /usr/lib/systemd/system/node-exporter.service修改 ExecStart 行,追加 textfile 参数即可,完整内容如下:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=root
Type=simple
# 核心:追加 --collector.textfile.directory 启用收集器
ExecStart=/usr/local/bin/node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfile_collector
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl restart node-exporter步骤 3:验证 textfile 是否开启成功
# 访问node-exporter的metrics,能查到 textfile 相关的指标,说明开启成功
curl http://localhost:9100/metrics | grep -E "node_textfile|textfile"三、核心规范:必须遵守的「Prometheus 文本指标格式」
这是 textfile 的灵魂核心,也是唯一的硬性要求:你写入文件的指标内容,必须符合 Prometheus 的文本格式规范,否则 Node-exporter 会直接忽略该文件,采集不到指标。
1,格式核心四要素(通用所有自定义指标)
# HELP 指标名 指标的描述信息(可选,但建议写)
# TYPE 指标名 指标类型(必填!只有4种:gauge/counter/histogram/summary)
指标名{标签名="标签值",标签名2="标签值2"} 指标数值2,最常用的 2 种指标类型
✅ gauge(瞬时值):最常用!数值可以增加 / 减少 / 不变,比如进程存活状态 (1/0)、端口状态 (1/0)、内存使用率、在线人数、剩余天数 → 你的所有自定义监控,优先用 gauge
✅ counter(累计值):数值只能递增,比如接口调用次数、日志错误数、请求总数,适合统计累计量。
3,命名 / 格式硬性规范(避坑必看,绝对不能错)
- 指标名:必须以字母开头,只能包含
字母、数字、下划线(_)、冒号(:),建议小写,比如process_wsnedd_running、port_9256_listen、user_password_expire_days; - 标签名:格式和指标名一致,标签值必须用双引号包裹,多个标签用逗号分隔;
- 指标数值:必须是纯数字(整数 / 小数都可以),比如
1、0、53.28、1256; - 文件后缀:建议所有自定义指标文件都以
.prom结尾(比如wsn_status.prom),Node-exporter 会自动识别,非必须但规范; - 空行 / 注释:文件中可以有空行,
#开头的行是注释,会被忽略; - 特殊字符:标签值中不能有双引号、换行符,避免解析失败。
4,正确的格式示例案例,可以根据自己实际需求写脚本自动获取
创建文件 /var/lib/node_exporter/textfile_collector/demo.prom
cat > /var/lib/node_exporter/textfile_collector/demo.prom << EOF
# HELP process_wsnedd_running WSN服务进程是否存活 1=存活 0=挂掉
# TYPE process_wsnedd_running gauge
process_wsnedd_running{app="wsnedd",port="5500"} 1
# HELP port_9256_listen process-exporter端口9256是否监听
# TYPE port_9256_listen gauge
port_9256_listen{instance="hk-node1"} 1
# HELP user_deployer_password_expire deployer用户密码剩余过期天数
# TYPE user_deployer_password_expire gauge
user_deployer_password_expire{username="abc"} 5
EOF写入后,直接访问验证:curl http://localhost:9100/metrics | grep -E "process_wsnedd|port_9256|user_deployer",能查到这三个指标,说明格式正确、采集成功!
总结:textfile 核心价值 & 适用场景
textfile 是 Node-exporter 的「瑞士军刀」,让 Node-exporter 从「只能监控系统指标」升级为「能监控任何指标」,是运维实现自定义监控的最优解,没有之一。它轻量、稳定、无侵入,生产环境中几乎所有的自定义监控需求都能通过它实现。

No Comments