2025最强Nightingale自定义指标采集实战:Python脚本开发指南

2025最强Nightingale自定义指标采集实战:Python脚本开发指南

【免费下载链接】nightingale Nightingale是一款开源的企业级监控系统,用于收集、展示及告警各种IT基础设施指标,如服务器性能、网络流量等,助力运维人员及时了解和处理问题。 【免费下载链接】nightingale 项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale

你是否还在为Nightingale监控系统无法采集业务自定义指标而烦恼?本文将带你从零开始掌握Python脚本开发,轻松实现任意业务指标的采集与监控告警,让运维监控不再受限于系统默认功能。读完本文你将学会:自定义Python采集脚本编写规范、三种数据格式转换技巧、完整的调试部署流程,以及常见问题排查方案。

应用场景与工作原理

Nightingale的Exec集成插件允许通过外部脚本扩展监控能力,特别适合采集系统默认插件未覆盖的业务指标。其工作流程如下:

mermaid

脚本输出格式支持Influx、Falcon、Prometheus三种规范,通过integrations/Exec/collect/exec.toml配置文件指定格式类型。监控数据流向如集成文档所述,由Categraf截获脚本stdout内容并解析上报。

开发环境准备

前置条件

  1. 确保Nightingale服务已正常运行
  2. 安装Python 3.6+环境
  3. 了解基本指标概念: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)。

创建监控面板

  1. 进入"仪表盘"页面,点击"新建面板"
  2. 选择数据源为"local"(默认)
  3. 指标选择cert_expire_days,分组标签选择domain
  4. 设置图表类型为"折线图",保存面板

常见问题排查

脚本执行权限不足

chmod +x /opt/categraf/scripts/python_demos/*.py

数据格式错误

查看Categraf日志定位解析错误:

journalctl -u categraf | grep "exec parser error"

脚本超时

调整配置文件中的timeout参数,根据脚本实际运行时间适当增大。

最佳实践与案例

监控场景扩展

  • 业务指标:订单量、支付成功率、活跃用户数
  • 系统资源:自定义进程CPU使用率、内存泄漏检测
  • 外部API:第三方服务健康状态、接口响应时间

脚本模板库

Nightingale社区提供多种现成脚本示例:

总结与进阶

通过本文学习,你已掌握Nightingale自定义指标采集的核心技能。进阶方向:

  1. 实现脚本参数化配置
  2. 添加异常捕获与日志记录
  3. 开发指标采集框架
  4. 集成告警规则配置

立即动手将业务指标接入Nightingale,让监控能力延伸到IT系统的每个角落!关注后续文章,我们将深入探讨PromQL高级查询与告警规则编写。

【免费下载链接】nightingale Nightingale是一款开源的企业级监控系统,用于收集、展示及告警各种IT基础设施指标,如服务器性能、网络流量等,助力运维人员及时了解和处理问题。 【免费下载链接】nightingale 项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值