Prometheus 监控 Nagios 全栈实战:Nagios Exporter 打通传统监控与云原生可观测性

Prometheus 监控 Nagios 全栈实战:Nagios Exporter 打通传统监控与云原生可观测性


在这里插入图片描述

Nagios 是 IT 监控领域的元老,无数企业依赖它监控主机存活、服务端口、磁盘空间。但随着云原生浪潮来袭,运维团队迫切希望将 Nagios 中的主机状态、服务状态、告警信息融入 Prometheus 生态,实现统一可视化、统一告警路由、统一历史趋势分析Nagios Exporterprometheus-community/nagios_exporter)正是这架桥梁——它通过解析 Nagios 的状态文件或 Mk-Livestatus 接口,将 Nagios 的主机和服务的状态、性能数据转化为 Prometheus 标准指标,让传统监控资产焕发新生。


1. 为什么需要 Nagios Exporter?

  • 保护投资:无需重写成千上万的 Nagios 插件和配置,即可享受 Prometheus 的强大查询与可视化。
  • 统一告警:将 Nagios 的告警与 Prometheus/Alertmanager 合并,避免多套通知渠道,减少告警风暴。
  • 长期趋势:利用 Prometheus 长期存储,观察 Nagios 监控对象的历史变化,发现周期性故障。
  • 逐步迁移:在向 Prometheus 原生监控迁移的过程中,Nagios Exporter 提供平滑过渡,让新旧系统共存。

社区维护的 nagios_exporter 支持两种数据源:

  • Status.dat 解析:直接读取 Nagios 的 status.dat 文件(最简单,但需本地文件访问)。
  • Mk-Livestatus:通过 Nagios 的 Livestatus 接口(如 unix:/var/run/nagios/live 或 TCP socket)获取数据,更实时高效。

2. 配置 Nagios 数据源

2.1 使用 Status.dat 文件(最小依赖)

确保 Nagios 的 status.dat 文件(通常位于 /var/nagios/status.dat/usr/local/nagios/var/status.dat)可被 exporter 读取。这种方法无需修改 Nagios 配置,适合单体 Nagios 实例。

2.2 使用 Mk-Livestatus(推荐,更稳定高效)

在 Nagios 的 nagios.cfg 中启用 Livestatus 接口。如果你使用 NaemonNagios Core 搭配 MK Livestatus 模块,只需指定 socket 路径:

broker_module=/usr/lib/nagios/mk-livestatus/livestatus.o /var/run/nagios/live

或使用 TCP 模式(如 inet:0.0.0.0:6557)。本文将采用 Unix socket 模式,因为它安全免认证,适合同一主机上的 exporter。


3. 部署 nagios_exporter

3.1 Docker 部署(推荐,挂载 socket 或 status.dat)
docker run -d \
  --name nagios_exporter \
  -p 9127:9127 \
  -v /var/run/nagios/live:/var/run/nagios/live:ro \
  prometheuscommunity/nagios-exporter:v0.9.0 \
  --nagios.livestatus=unix:/var/run/nagios/live

如果使用 status.dat,挂载该文件并用 --nagios.status-dat=/var/nagios/status.dat 参数。

3.2 二进制部署

GitHub Releases 下载对应架构的压缩包,解压后运行:

./nagios_exporter --nagios.livestatus=unix:/var/run/nagios/live --web.listen-address=:9127

访问 http://localhost:9127/metrics,你将看到 nagios_hosts_totalnagios_services_totalnagios_host_statenagios_service_state 等指标。


4. 配置 Prometheus 抓取

scrape_configs:
  - job_name: 'nagios'
    scrape_interval: 30s
    static_configs:
      - targets: ['nagios-host:9127']
        labels:
          env: 'production'
          monitoring_system: 'nagios'

如果有多个 Nagios 实例,添加多个 target,并加上 instance 标签区分。


5. 核心监控指标与 PromQL

Nagios Exporter 暴露的指标以 nagios_ 为前缀,主要包含:

5.1 主机指标
指标含义
nagios_hosts_total主机总数
nagios_host_state主机状态(0=UP, 1=DOWN, 2=UNREACHABLE)
nagios_host_status_code主机状态码,与上相同
nagios_host_acknowledged是否被确认(0=未确认, 1=已确认)
nagios_host_scheduled_downtime是否处于计划停机时间(0/1)
nagios_host_last_check_seconds距离上次检查的秒数

PromQL 示例:

  • 宕机的主机nagios_host_state == 1
  • 不可达的主机nagios_host_state == 2
  • 未确认的宕机主机nagios_host_state == 1 and nagios_host_acknowledged == 0
5.2 服务指标
指标含义
nagios_services_total服务总数
nagios_service_state服务状态(0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN)
nagios_service_acknowledged是否被确认
nagios_service_scheduled_downtime是否处于计划停机
nagios_service_last_check_seconds上次检查时间

PromQL 示例:

  • 严重服务数量count(nagios_service_state == 2)
  • 警告服务数量count(nagios_service_state == 1)
  • 未确认的严重告警nagios_service_state == 2 and nagios_service_acknowledged == 0
5.3 性能数据 (Perfdata)

Nagios Exporter 会尝试解析服务检查返回的性能数据(如 rta=12.3ms)并暴露为指标,命名规则为 nagios_perfdata_<metric_name>,标签包含主机和服务名。例如,某个服务的响应时间会被暴露为 nagios_perfdata_rta{host="web-server", service="Ping"}

PromQL 示例:

  • Ping 延迟超过 100msnagios_perfdata_rta > 100

6. Grafana 仪表盘推荐

  • Nagios Dashboard (Prometheus):Dashboard ID 11287,展示主机和服务状态统计、告警时间线、未确认问题列表等,适配 nagios_exporter 指标。
  • Nagios Overview:ID 11099,备选轻量级面板。
  • 自建“当前问题”看板:使用 Status Panel 展示主机状态红绿灯,Table 列出当前严重服务和主机,Stat 显示未确认告警数。

导入后选择数据源,将变量 instancehost 绑定到你的 Nagios 环境。


7. 告警规则实战

groups:
  - name: nagios_alerts
    rules:
      - alert: NagiosExporterDown
        expr: up{job="nagios"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Nagios Exporter 不可达,无法获取 Nagios 状态"

      - alert: NagiosHostDown
        expr: nagios_host_state == 1
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Nagios 主机 {{ $labels.host_name }} 宕机"

      - alert: NagiosServiceCritical
        expr: nagios_service_state == 2
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Nagios 服务 {{ $labels.service_description }} 在主机 {{ $labels.host_name }} 上处于严重状态"

      - alert: NagiosServiceWarning
        expr: nagios_service_state == 1
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "Nagios 服务 {{ $labels.service_description }} 处于警告状态(主机 {{ $labels.host_name }})"

      - alert: NagiosUnacknowledgedCritical
        expr: (nagios_service_state == 2 and nagios_service_acknowledged == 0) or (nagios_host_state == 1 and nagios_host_acknowledged == 0)
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "存在未确认的严重告警,请立即处理"

这些规则可以与 Alertmanager 集成,实现与 Prometheus 告警相同的路由逻辑。


8. 进阶:多 Nagios 实例、高可用与安全

8.1 监控多个 Nagios 服务器

为每个 Nagios 实例运行独立的 exporter,挂载各自的 Livestatus socket 或 status.dat。在 Prometheus 中配置多个 target,并用 instance 标签区分。

8.2 Exporter 高可用

Nagios Exporter 本身是无状态的,可运行多个副本(比如通过 Kubernetes Deployment),同时监控同一 Nagios 实例。只需确保它们都能访问 Livestatus socket。

8.3 使用 API Token 或防火墙

Livestatus socket 通常基于 Unix socket,非常安全。若使用 TCP 模式,务必配置防火墙限制来源 IP 仅为 exporter 所在主机。Prometheus 抓取 exporter 的端口 (9127) 也应仅对内网开放。

8.4 集成确认功能

可在 Grafana 中创建链接,点击告警直接跳转至 Nagios Web 界面进行确认;也可通过 Nagios 命令 API 反向集成确认操作,但需自定义开发。


9. 总结

Nagios Exporter 让传统 Nagios 监控系统不再孤立于云原生世界。主机宕机、服务临界、性能数据异常——所有这些信号都实时流入 Prometheus,在 Grafana 中展现,通过 Alertmanager 告警。对于拥有庞大 Nagios 基础架构的企业,这无疑是最快捷的现代化之路。部署它,让你的 Nagios 继续发挥余热,同时拥抱 Prometheus 的强大生态,实现监控系统的平滑演进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值