Zabbix 基础教程
Zabbix 是一个 开源企业级监控平台,支持对服务器、网络设备、应用、容器、数据库等进行监控,支持主动与被动收集、自动发现、告警、可视化、联动动作。
适用范围:
- 企业监控系统
- 主机、应用、网络设备监控
- 业务可用性监控
- 复杂场景自动发现(自动创建主机/监控项)
+----------+ +---------------+
| Agent | <---> | Zabbix Server |
+----------+ +-------+-------+
|
+------+------+
| Database |
+-------------+
|
+------+------+
| Frontend |
+-------------+
组件说明:
- Zabbix Server:核心,收集、分析、存储数据。
- Zabbix Agent / Agent2:安装在被监控主机上。
- Zabbix Proxy:中间节点,用于分布式、多机房环境。
- Zabbix Frontend:前端 Web UI。
- Database:MySQL / PostgreSQL(推荐),存储所有指标数据。
- CPU、内存、磁盘、网络
- 磁盘IO
- 进程数
- 系统负载
- 系统日志
- Nginx / Apache / MySQL / Redis / PostgreSQL / Kafka 等
- 支持 ODBC、HTTP、SNMP、JMX
- SNMP(交换机、路由器)
- ICMP Ping
- TCP 端口可用性
- HTTP、TCP、UDP 通信检查
- LLD(Low Level Discovery)
- 自动发现磁盘、网卡、数据库表、容器等
- 自动添加主机、监控项
| 名称 | 作用 |
|---|---|
| Host | 被监控主机(Linux/Windows/设备) |
| Item | 监控项(CPU load、free memory、net.if.in) |
| Trigger | 告警阈值(内存 <20%、磁盘 >80%) |
| Action | 告警动作(发邮件、微信、钉钉) |
| Event | 存在异常就生成事件 |
| Media | 告警方式,如邮件、WebHook、企业微信 |
模板包括:
- 监控项(Item)
- 触发器(Trigger)
- 图形(Graph)
- 自动发现规则(LLD)
- 预处理规则(Preprocessing)
官方模板(推荐):
- Template OS Linux
- Template App MySQL
- Template App Zabbix Agent
- Template Net Cisco SNMP
模板绑定到主机后自动创建监控项。
示例(Ubuntu):
apt install postgresql nginx php php-fpm php-pgsql
apt install zabbix-server-pgsql zabbix-frontend-php \
zabbix-agent2 zabbix-sql-scripts
zcat /usr/share/zabbix-sql-scripts/postgresql/create.sql.gz \
| sudo -u postgres psql zabbix
systemctl start zabbix-server zabbix-agent2 nginx php-fpm
systemctl enable zabbix-server zabbix-agent2
| 比较项 | Agent | Agent2(推荐) |
|---|---|---|
| 性能 | 普通 | 更高(Go 实现) |
| 插件 | 不支持 | 支持多插件(MySQL、Redis) |
| 指标 | 普通 | 更强 |
| 扩展性 | 弱 | 强 |
- 企业微信 WebHook
- 钉钉机器人
- 飞书机器人
- Telegram
- 邮件 SMTP
- 模拟登录
- HTTP 状态码检查
- 页面内容检查
- 被动监控:Server 轮询 Agent
- 主动监控:Agent 主动发送数据
可通过:
- SSH
- Telnet
执行远程命令并解析结果。
适用于:
- 多机房 / 多区域
- 网络隔离
- 集中管理
Proxy 会:
- 收集数据
- 缓存
- 批量上传到 Server
- 降低 Server 压力
非常适合 VM 数量大的环境。
- 挂载 SSD
- 调大 PostgreSQL shared_buffers(推荐 25% 内存)
- 调整 autovacuum 参数
- 分区表(如果历史数据量大)
建议关闭自动清理:
HousekeepingFrequency=0
改为手动分区表维护。
避免所有 Agent 都打到 Server。
- PostgreSQL:使用 TimescaleDB
- MySQL:使用 InnoDB COMPRESS
排查:
zabbix_agent2 -t system.cpu.load
telnet host 10050
检查:
psql -U zabbix
查看 Zabbix server 日志 /var/log/zabbix/zabbix_server.log
原因:
- 阈值设置过低
- 数据变化太快
- 没有使用 hysteresis(迟滞)
解决:
- 设置 hysteresis
- 使用移动平均
避免自己写复杂 Item。
- 保留 30 天历史
- 使用分区表或 TimescaleDB
- 大规模环境必须用 Proxy
不建议用外部脚本太多。
比邮件可靠得多。
例如:
- 自动发现网卡
- 自动发现挂载盘
- 自动发现容器
+------------------------+
| Frontend |
+-----------+------------+
|
+-----------v------------+
| Zabbix Server 集群 |
| (Active-Passive HA) |
+-----------+------------+
|
+-------+--------+
| |
+---v---+ +---v---+
|Proxy1 | |Proxy2 |
+---+---+ +---+---+
| |
+---v---+ +---v---+
| Agents| | Agents|
+-------+ +-------+