2025最强Nightingale自定义指标采集实战:Python脚本开发指南
你是否还在为Nightingale监控系统无法采集业务自定义指标而烦恼?本文将带你从零开始掌握Python脚本开发,轻松实现任意业务指标的采集与监控告警,让运维监控不再受限于系统默认功能。读完本文你将学会:自定义Python采集脚本编写规范、三种数据格式转换技巧、完整的调试部署流程,以及常见问题排查方案。
应用场景与工作原理
Nightingale的Exec集成插件允许通过外部脚本扩展监控能力,特别适合采集系统默认插件未覆盖的业务指标。其工作流程如下:
脚本输出格式支持Influx、Falcon、Prometheus三种规范,通过integrations/Exec/collect/exec.toml配置文件指定格式类型。监控数据流向如集成文档所述,由Categraf截获脚本stdout内容并解析上报。
开发环境准备
前置条件
- 确保Nightingale服务已正常运行
- 安装Python 3.6+环境
- 了解基本指标概念:Metric(指标名)、Label(标签)、Field(数值)
目录结构规范
推荐在Nightingale部署目录下创建如下结构:
/opt/categraf/
├── scripts/
│ ├── python_demos/
│ │ ├── collect_demo.py # 自定义采集脚本
│ │ └── config.ini # 脚本配置文件
│ └── logs/ # 脚本运行日志
└── conf/
└── input.exec/
└── exec.toml # Exec插件配置
Python脚本开发实战
Influx格式示例:证书过期监控
以下脚本采集SSL证书剩余有效期,输出Influx格式数据:
#!/usr/bin/env python3
import ssl
import socket
from datetime import datetime
def get_cert_expire_days(hostname, port=443):
context = ssl.create_default_context()
with socket.create_connection((hostname, port)) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
cert = ssock.getpeercert()
expire_date = datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
days_left = (expire_date - datetime.now()).days
return days_left
if __name__ == "__main__":
domains = [
"www.baidu.com",
"www.weibo.com",
"www.youkuaiyun.com"
]
for domain in domains:
try:
days = get_cert_expire_days(domain)
# 输出Influx格式: 指标名,标签键=值 字段=数值
print(f"cert,domain={domain} expire_days={days}")
except Exception as e:
print(f"E! failed to check {domain}: {str(e)}", file=sys.stderr)
数据格式详解
Influx格式(推荐)
measurement,label1=value1,label2=value2 field1=1.2,field2=3.4
- measurement:指标类别(如
cert) - 标签:逗号分隔的键值对(如
domain=www.baidu.com) - 字段:等号连接的数值(仅支持数字类型)
Prometheus格式示例
print("# HELP demo_api_requests_total API请求总量")
print("# TYPE demo_api_requests_total counter")
print("demo_api_requests_total{api=\"login\",status=\"success\"} 1258")
print("demo_api_requests_total{api=\"pay\",status=\"failed\"} 42")
配置与部署
修改Exec插件配置
编辑exec.toml文件,添加Python脚本路径:
[[instances]]
commands = [
"/opt/categraf/scripts/python_demos/collect_*.py"
]
timeout = 10
data_format = "influx" # 可选: influx|falcon|prometheus
测试脚本输出
python3 /opt/categraf/scripts/python_demos/collect_demo.py
预期输出:
cert,domain=www.baidu.com expire_days=163
cert,domain=www.weibo.com expire_days=85
重启Categraf服务
systemctl daemon-reload && systemctl restart categraf
查看服务状态及日志:
systemctl status categraf
journalctl -u categraf -f | grep "exec"
数据验证与可视化
检查数据上报
登录Nightingale Web界面,在"指标浏览"中搜索自定义指标名(如cert_expire_days)。
创建监控面板
- 进入"仪表盘"页面,点击"新建面板"
- 选择数据源为"local"(默认)
- 指标选择
cert_expire_days,分组标签选择domain - 设置图表类型为"折线图",保存面板
常见问题排查
脚本执行权限不足
chmod +x /opt/categraf/scripts/python_demos/*.py
数据格式错误
查看Categraf日志定位解析错误:
journalctl -u categraf | grep "exec parser error"
脚本超时
调整配置文件中的timeout参数,根据脚本实际运行时间适当增大。
最佳实践与案例
监控场景扩展
- 业务指标:订单量、支付成功率、活跃用户数
- 系统资源:自定义进程CPU使用率、内存泄漏检测
- 外部API:第三方服务健康状态、接口响应时间
脚本模板库
Nightingale社区提供多种现成脚本示例:
- Linux系统监控
- MySQL性能指标
- Kubernetes容器监控
总结与进阶
通过本文学习,你已掌握Nightingale自定义指标采集的核心技能。进阶方向:
- 实现脚本参数化配置
- 添加异常捕获与日志记录
- 开发指标采集框架
- 集成告警规则配置
立即动手将业务指标接入Nightingale,让监控能力延伸到IT系统的每个角落!关注后续文章,我们将深入探讨PromQL高级查询与告警规则编写。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



