跳到主要内容

Zabbix

架构

核心概念

概念说明
Host被监控的设备(服务器、交换机等)
Host Group主机分组(按业务、机房等)
Item监控项(CPU 使用率、磁盘空间等)
Trigger触发器(当 Item 满足条件时触发告警)
Action动作(触发后执行的操作:发通知、执行脚本)
Template模板(预定义的 Item + Trigger 集合)
Discovery自动发现(主机、文件系统、网卡等)

Zabbix vs Prometheus

维度ZabbixPrometheus
模式Push(Agent 推送)Pull(Server 抓取)
配置Web UI 配置YAML 配置文件
存储关系数据库(MySQL/PG)自研 TSDB
查询SQLPromQL
生态网络设备、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 如何实现大规模监控?

答案

  1. Zabbix Proxy:代理模式,减轻 Server 压力
  2. 主动模式 Agent:Agent 主动上报,减少 Server 连接开销
  3. 数据库优化:分区表、慢查询优化
  4. 存储压缩:TimescaleDB 代替 MySQL(Zabbix 6.0+)
  5. 模板继承:统一管理,减少重复配置

相关链接