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

Zabbix 作为老牌企业级监控平台,承载着海量的历史主机、触发器、事件和性能数据。但在云原生时代,运维团队往往需要将 Zabbix 收集的指标与 Prometheus 生态融合——统一可视化、统一告警。Zabbix Exporter(prometheus-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),分配最小权限:
- 登录 Zabbix Web → 管理 → 用户 → 创建用户。
- 设置用户名、密码,用户类型选择 用户。
- 在 权限 标签中,授予需要监控的主机组 读取 权限。
- 可选:为该用户创建 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_total、zabbix_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_total | API 请求总数 |
zabbix_api_request_duration_seconds | API 请求延迟直方图 |
用于监控 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过滤)。
导入后选择数据源,将变量 hostgroup 或 instance 绑定到 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 不再是孤岛,而是混合监控拼图中坚实的一块。
更多推荐
所有评论(0)