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


在这里插入图片描述

Zabbix 作为老牌企业级监控平台,承载着海量的历史主机、触发器、事件和性能数据。但在云原生时代,运维团队往往需要将 Zabbix 收集的指标与 Prometheus 生态融合——统一可视化、统一告警。Zabbix Exporterprometheus-community/zabbix_exporter)正是这座桥梁:它通过 Zabbix API 抓取主机、触发器、事件、告警等对象状态,转化为 Prometheus 标准指标,让 Zabbix 中的监控资产也能无缝接入 Grafana 大屏和 Alertmanager 告警,实现传统与云原生监控的统一可观测。


1. 为什么需要 Zabbix Exporter?

  • 统一指标汇聚:将 Zabbix 中的主机状态、触发器严重性、事件数量等纳入 Prometheus,避免多套监控孤岛。
  • 利用 Prometheus 生态:强大的 PromQL、Grafana 仪表盘、Alertmanager 告警路由。
  • 过渡与共存:在不抛弃已有 Zabbix 投资的前提下,逐步迁移或混合架构。
  • CMDB 关联:通过 Zabbix 的主机标签,将告警与业务系统关联。

Zabbix Exporter 本质是一个代理,周期性调用 Zabbix API,将 Zabbix 对象(主机、触发器、事件、问题)映射为 Prometheus 指标。


2. 配置 Zabbix 监控用户与权限

在 Zabbix 前端创建专用的 API 用户(例如 prometheus),分配最小权限:

  1. 登录 Zabbix Web → 管理用户创建用户
  2. 设置用户名、密码,用户类型选择 用户
  3. 权限 标签中,授予需要监控的主机组 读取 权限。
  4. 可选:为该用户创建 API Token(自 Zabbix 5.4 起支持),更安全。

记录用户名、密码(或 token)以及 Zabbix API 地址(如 http://zabbix.example.com/zabbix/api_jsonrpc.php)。


3. 部署 zabbix_exporter

3.1 Docker 部署(推荐)
docker run -d \
  --name zabbix_exporter \
  -p 9105:9105 \
  -e ZABBIX_URL="http://zabbix.example.com/zabbix/api_jsonrpc.php" \
  -e ZABBIX_USER="prometheus" \
  -e ZABBIX_PASSWORD="password" \
  prometheuscommunity/zabbix-exporter:latest

若使用 API token,设置 ZABBIX_API_TOKEN 环境变量即可,无需用户名密码。

3.2 二进制部署
wget https://github.com/prometheus-community/zabbix_exporter/releases/download/v0.2.0/zabbix_exporter-0.2.0.linux-amd64.tar.gz
tar xzf zabbix_exporter-0.2.0.linux-amd64.tar.gz
./zabbix_exporter --zabbix.url="http://zabbix.example.com/zabbix/api_jsonrpc.php" \
                  --zabbix.user="prometheus" \
                  --zabbix.password="password" \
                  --web.listen-address=":9105"

访问 http://localhost:9105/metrics 验证,应看到 zabbix_hosts_totalzabbix_triggers_total 等指标。

3.3 过滤主机组

如果 Zabbix 实例庞大,可用 --zabbix.hostgroups 参数限定拉取的主机组(逗号分隔),减少数据量和 API 负载。

--zabbix.hostgroups="Linux servers,Network devices"

4. 配置 Prometheus 抓取

scrape_configs:
  - job_name: 'zabbix'
    scrape_interval: 60s        # Zabbix API 调用较慢,间隔不宜太短
    static_configs:
      - targets: ['zabbix-exporter:9105']
        labels:
          env: 'production'
          monitoring_system: 'zabbix'

5. 核心监控指标与 PromQL

zabbix_exporter 暴露的指标以 zabbix_ 为前缀,主要包含以下几类:

5.1 主机状态
指标含义
zabbix_hosts_total主机总数
zabbix_host_available主机可用性(0=不可达, 1=可达)按主机标签
zabbix_host_info主机元数据(名称、IP、组等)

PromQL 示例:

  • 不可达主机zabbix_host_available == 0
  • 某主机组的在线主机数count(zabbix_host_available{hostgroup="Linux servers"} == 1)
5.2 触发器与事件
指标含义
zabbix_triggers_total触发器总数(按严重性、状态、主机分组)
zabbix_trigger_problem_total处于 Problem 状态的触发器数
zabbix_events_total事件总数(按类型)

PromQL 示例:

  • 严重问题触发器数量zabbix_trigger_problem_total{severity="disaster"}
  • 告警级触发器趋势zabbix_trigger_problem_total{severity=~"high|disaster"}
5.3 告警(Alerts)与确认
指标含义
zabbix_alerts_total告警总数(按状态:problem, ok, acknowledged)
zabbix_alerts_acknowledged_total已确认的告警数

告警分析zabbix_alerts_total{state="problem"} - zabbix_alerts_acknowledged_total{state="problem"} 得到未确认问题数。

5.4 API 性能
指标含义
zabbix_api_requests_totalAPI 请求总数
zabbix_api_request_duration_secondsAPI 请求延迟直方图

用于监控 Exporter 自身与 Zabbix API 的通信状况。


6. Grafana 仪表盘推荐

  • Zabbix Exporter Dashboard:Dashboard ID 14996(社区设计),展示主机状态、触发器、事件、告警趋势,完美适配 zabbix_exporter 指标。
  • Zabbix Overview:ID 5365(备选,需微调指标名)。
  • 自建“Zabbix 问题面板”:使用 Stat Panel 显示当前 Problem 触发器数量,Table 列出问题详情(通过 zabbix_triggers_total 过滤)。

导入后选择数据源,将变量 hostgroupinstance 绑定到 Zabbix 导出器。


7. 告警规则实战

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

      - alert: ZabbixHostUnavailable
        expr: zabbix_host_available == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Zabbix 主机 {{ $labels.host }} 不可达"

      - alert: ZabbixDisasterTriggers
        expr: zabbix_trigger_problem_total{severity="disaster"} > 0
        labels:
          severity: critical
        annotations:
          summary: "存在灾难级触发器,当前数量: {{ $value }}"

      - alert: ZabbixHighProblemTriggers
        expr: zabbix_trigger_problem_total{severity="high"} > 5
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "高严重性触发器超过 5 个,数量: {{ $value }}"

      - alert: ZabbixUnacknowledgedProblems
        expr: (zabbix_alerts_total{state="problem"} - zabbix_alerts_acknowledged_total{state="problem"}) > 10
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: "未确认的 Zabbix 告警超过 10 条"

8. 进阶:多 Zabbix 实例、安全与性能优化

8.1 监控多个 Zabbix 实例

可为每个 Zabbix 服务器部署独立的 exporter 容器,在 Prometheus 中配置多个 target,用 instance 标签区分。也可通过环境变量动态传入不同 Zabbix URL。

8.2 使用 API Token 提升安全性

Zabbix 5.4+ 支持 API Token,避免明文密码。在 Zabbix 用户设置中生成 Token,然后设置 ZABBIX_API_TOKEN,不设置用户名密码即可。

8.3 降低 API 负载
  • 使用 --zabbix.hostgroups 过滤关注的主机组,避免全量拉取。
  • 适当增加 scrape_interval(建议 ≥60s),减少 API 调用频率。
  • 注意 Zabbix 服务器 API 性能,若 Exporter 导致负载,可启用 Zabbix 缓存或增加 Exporter 间隔。
8.4 集成告警确认

Zabbix Exporter 暴露了确认状态,可在 Prometheus 中设置告警,当重要问题长时间未确认时通知运维。也可以反向操作:通过 Alertmanager webhook 将 Prometheus 告警确认写回 Zabbix(需自定义集成)。


9. 总结

通过 Zabbix Exporter,你无需立刻抛弃 Zabbix,即可将其主机、触发器、事件等核心监控数据融入 Prometheus 生态。统一的 Grafana 大屏、统一的 Alertmanager 告警,让传统监控与云原生监控和谐共存。这不仅是技术上的桥梁,更是团队从传统运维走向现代化可观测性的一大步。部署它,让 Zabbix 不再是孤岛,而是混合监控拼图中坚实的一块。

更多推荐