
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 接口。如果你使用Naemon或Nagios 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_exporter3.1 Docker 部署推荐挂载 socket 或 status.datdockerrun-d\--namenagios_exporter\-p9127:9127\-v/var/run/nagios/live:/var/run/nagios/live:ro\prometheuscommunity/nagios-exporter:v0.9.0\--nagios.livestatusunix:/var/run/nagios/live如果使用status.dat挂载该文件并用--nagios.status-dat/var/nagios/status.dat参数。3.2 二进制部署从 GitHub Releases 下载对应架构的压缩包解压后运行./nagios_exporter--nagios.livestatusunix:/var/run/nagios/live --web.listen-address:9127访问http://localhost:9127/metrics你将看到nagios_hosts_total、nagios_services_total、nagios_host_state、nagios_service_state等指标。4. 配置 Prometheus 抓取scrape_configs:-job_name:nagiosscrape_interval:30sstatic_configs:-targets:[nagios-host:9127]labels:env:productionmonitoring_system:nagios如果有多个 Nagios 实例添加多个 target并加上instance标签区分。5. 核心监控指标与 PromQLNagios Exporter 暴露的指标以nagios_为前缀主要包含5.1 主机指标指标含义nagios_hosts_total主机总数nagios_host_state主机状态0UP, 1DOWN, 2UNREACHABLEnagios_host_status_code主机状态码与上相同nagios_host_acknowledged是否被确认0未确认, 1已确认nagios_host_scheduled_downtime是否处于计划停机时间0/1nagios_host_last_check_seconds距离上次检查的秒数PromQL 示例宕机的主机nagios_host_state 1不可达的主机nagios_host_state 2未确认的宕机主机nagios_host_state 1 and nagios_host_acknowledged 05.2 服务指标指标含义nagios_services_total服务总数nagios_service_state服务状态0OK, 1WARNING, 2CRITICAL, 3UNKNOWNnagios_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 05.3 性能数据 (Perfdata)Nagios Exporter 会尝试解析服务检查返回的性能数据如rta12.3ms并暴露为指标命名规则为nagios_perfdata_metric_name标签包含主机和服务名。例如某个服务的响应时间会被暴露为nagios_perfdata_rta{hostweb-server, servicePing}。PromQL 示例Ping 延迟超过 100msnagios_perfdata_rta 1006. Grafana 仪表盘推荐Nagios Dashboard (Prometheus)Dashboard ID11287展示主机和服务状态统计、告警时间线、未确认问题列表等适配nagios_exporter指标。Nagios OverviewID11099备选轻量级面板。自建“当前问题”看板使用 Status Panel 展示主机状态红绿灯Table 列出当前严重服务和主机Stat 显示未确认告警数。导入后选择数据源将变量instance或host绑定到你的 Nagios 环境。7. 告警规则实战groups:-name:nagios_alertsrules:-alert:NagiosExporterDownexpr:up{jobnagios} 0for:2mlabels:severity:criticalannotations:summary:Nagios Exporter 不可达无法获取 Nagios 状态-alert:NagiosHostDownexpr:nagios_host_state 1for:2mlabels:severity:criticalannotations:summary:Nagios 主机 {{ $labels.host_name }} 宕机-alert:NagiosServiceCriticalexpr:nagios_service_state 2for:2mlabels:severity:criticalannotations:summary:Nagios 服务 {{ $labels.service_description }} 在主机 {{ $labels.host_name }} 上处于严重状态-alert:NagiosServiceWarningexpr:nagios_service_state 1for:10mlabels:severity:warningannotations:summary:Nagios 服务 {{ $labels.service_description }} 处于警告状态主机 {{ $labels.host_name }}-alert:NagiosUnacknowledgedCriticalexpr:(nagios_service_state 2 and nagios_service_acknowledged 0) or (nagios_host_state 1 and nagios_host_acknowledged 0)for:5mlabels:severity:criticalannotations: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 的强大生态实现监控系统的平滑演进。