Zabbix
架构
核心概念
| 概念 | 说明 |
|---|---|
| Host | 被监控的设备(服务器、交换机等) |
| Host Group | 主机分组(按业务、机房等) |
| Item | 监控项(CPU 使用率、磁盘空间等) |
| Trigger | 触发器(当 Item 满足条件时触发告警) |
| Action | 动作(触发后执行的操作:发通知、执行脚本) |
| Template | 模板(预定义的 Item + Trigger 集合) |
| Discovery | 自动发现(主机、文件系统、网卡等) |
Zabbix vs Prometheus
| 维度 | Zabbix | Prometheus |
|---|---|---|
| 模式 | Push(Agent 推送) | Pull(Server 抓取) |
| 配置 | Web UI 配置 | YAML 配置文件 |
| 存储 | 关系数据库(MySQL/PG) | 自研 TSDB |
| 查询 | SQL | PromQL |
| 生态 | 网络设备、SNMP、IPMI | 云原生、K8s、微服务 |
| 学习曲线 | 低(GUI 操作) | 中(需要学 PromQL) |
| 适用场景 | 传统 IDC、混合环境 | 云原生、K8s 环境 |
选型建议
- 云原生/K8s 环境 → Prometheus + Grafana
- 传统 IDC/混合环境 → Zabbix(尤其是有网络设备、物理机)
- 两者共存:Zabbix 监控基础设施,Prometheus 监控容器和应用
Agent 安装与配置
# 安装 Zabbix Agent 2(推荐)
apt install zabbix-agent2
# 配置
cat > /etc/zabbix/zabbix_agent2.conf << 'EOF'
Server=zabbix-server.example.com
ServerActive=zabbix-server.example.com
Hostname=web-server-01
# 自定义监控项
UserParameter=custom.nginx.active,curl -s http://localhost/nginx_status | awk '/Active/{print $3}'
EOF
systemctl enable --now zabbix-agent2
模板与自定义监控
内置模板
Zabbix 提供丰富的内置模板:
- Linux by Zabbix agent:CPU、内存、磁盘、网络
- MySQL by Zabbix agent:连接数、QPS、慢查询
- Nginx by HTTP:活动连接、请求速率
- Network Generic Device SNMP:网络设备
自定义监控项
# UserParameter 自定义监控
# 格式:UserParameter=key,command
# 监控 Redis 连接数
UserParameter=redis.connected_clients,redis-cli info clients | grep connected_clients | cut -d: -f2 | tr -d '\r'
# 监控应用进程数
UserParameter=app.process.count[*],pgrep -c $1
# 监控日志错误数(每分钟)
UserParameter=app.error.count,tail -n 1000 /var/log/app/error.log | grep -c "$(date +'%Y-%m-%d %H:%M')"
告警与自动化
Trigger 表达式
# CPU 使用率 > 85% 持续 5 分钟
avg(/web-server-01/system.cpu.util,5m)>85
# 磁盘使用率 > 90%
last(/web-server-01/vfs.fs.size[/,pused])>90
# 服务不可达
nodata(/web-server-01/agent.ping,3m)=1
# 5xx 错误率增高
avg(/web-server-01/custom.nginx.5xx_rate,5m) > 0.05
自动修复(Action)
# Trigger 触发后执行远程命令(自动修复)
# 磁盘满 → 自动清理日志
find /var/log -name "*.gz" -mtime +7 -delete
# 应用崩溃 → 自动重启
systemctl restart myapp
常见面试问题
Q1: Zabbix 适合什么场景?
答案:
Zabbix 适合:
- 传统 IDC 环境:物理服务器、网络设备
- SNMP 监控:交换机、路由器、防火墙
- 混合环境:既有物理机又有虚拟机
- 运维团队偏传统:GUI 操作友好
不太适合纯云原生/K8s 环境,那个场景 Prometheus 更合适。
Q2: Zabbix 如何实现大规模监控?
答案:
- Zabbix Proxy:代理模式,减轻 Server 压力
- 主动模式 Agent:Agent 主动上报,减少 Server 连接开销
- 数据库优化:分区表、慢查询优化
- 存储压缩:TimescaleDB 代替 MySQL(Zabbix 6.0+)
- 模板继承:统一管理,减少重复配置