最推荐的方式是使用 node exporter 的 textfile collector 机制:无需改代码、不新增端口、不配新 job,只需编写 shell 脚本生成符合规范的 .prom 文件并定时写入指定目录即可。

Prometheus 节点监控中,自定义指标采集最常用、最轻量、最推荐的方式,是利用 Node Exporter 的 textfile Collector 机制——不需要改代码、不新增端口、不配新 job,只需写个脚本把数据写成标准格式,丢进指定目录即可。
下面直接讲清楚怎么做,聚焦实战关键点。
明确指标类型和命名规范
写脚本前先想清楚:你要监控的是什么?它会怎么变?
-
计数类(如错误总次数、任务完成总数)→ 用 Counter,格式:
myapp_errors_total{service="api",env="prod"} 127 -
瞬时值(如当前队列长度、内存使用率、服务存活状态)→ 用 Gauge,格式:
myapp_queue_length{service="worker"} 4或myapp_service_up{service="backend"} 1 - 避免用错类型:Gauge 可以上下浮动,Counter 只能单调递增;误用会导致 PromQL 查询异常或告警失效。
-
命名要带 namespace 和 subsystem,比如
custom_nginx_active_connections,而不是简单叫connections,便于后续分类和避免冲突。
编写 Shell 脚本生成 .prom 文件
以采集 Nginx 活跃连接数为例,脚本逻辑清晰、可读性强、易维护:
- 脚本输出必须是纯文本,每行一个指标,以
# HELP和# TYPE开头,后跟指标行; - 文件名必须以
.prom结尾(如nginx_metrics.prom),Node Exporter 才会识别; - 指标值只能是数字(支持浮点),不能有单位、空格或额外字符;
- 示例脚本(保存为
/usr/local/bin/nginx_metrics.sh):
# !/bin/bash
TEXTFILE_DIR="/var/lib/node_exporter/textfile_collector"
mkdir -p "$TEXTFILE_DIR"
<h1>获取 nginx active connections(需 nginx 启用 stub_status)</h1><p>ACTIVE_CONN=$(curl -s <a href="https://www.php.cn/link/9f0f4ce8b671b61e661861ee16f16d93">https://www.php.cn/link/9f0f4ce8b671b61e661861ee16f16d93</a> | grep 'Active' | awk '{print }' 2>/dev/null || echo 0)</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/ai/3484" title="悠船"><img
src="https://img.php.cn/upload/ai_manual/001/246/273/178599428323880.png" alt="悠船" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/ai/3484" title="悠船" class="overflowclass">悠船</a>
<p class="overflowclass">悠船是一款AI图像与设计工具,Midjourney 官方推出的中文版 AI 图像生成工具。</p>
</div>
<a rel="nofollow" href="/ai/3484" title="悠船" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><p>cat > "$TEXTFILE_DIR/nginx_metrics.prom" </p><h1>HELP custom_nginx_active_connections Number of active nginx connections</h1><h1>TYPE custom_nginx_active_connections gauge</h1><p>custom_nginx_active_connections $ACTIVE_CONN
EOF</p>注意:curl 需确保能访问 nginx status 接口,且脚本要有执行权限(chmod +x)。
配置 Node Exporter 启用 textfile 收集器
启动 Node Exporter 时,必须显式启用并指定目录:
- 启动命令加参数:
--collector.textfile.directory=/var/lib/node_exporter/textfile_collector; - 若用 systemd 管理,编辑
/etc/systemd/system/node-exporter.service,在ExecStart行末尾追加该参数; - 重启服务:
systemctl daemon-reload && systemctl restart node-exporter; - 验证是否生效:访问
http://NODE_IP:9100/metrics,搜索custom_nginx_active_connections,应能看到刚写入的值。
定时执行脚本并确保原子性
用 crontab 定期更新指标,但要注意避免写一半被读取:
- 推荐做法:先写临时文件,再
mv覆盖(Linux 下mv是原子操作); - crontab 示例(每 10 秒一次,实际建议 15–60 秒):
*/1 * * * * /usr/local/bin/nginx_metrics.sh; - 不要用
echo ... > file直接覆盖,可能造成 Prometheus 抓到半截内容; - 可加简单日志或
set -e保证出错中断,避免静默失败。










