目录
一、Zabbix-Agent 部署步骤(以 Linux 为例)
基本概念
核心基本原理
Zabbix 的工作流程可以概括为数据采集 -> 数据处理 -> 告警与通知 -> 数据存储 -> 数据可视化。
数据采集 (Collection):
- 监控对象 (Hosts): 被监控的实体,如物理服务器、虚拟机、交换机、路由器、应用程序实例等。
- 监控项 (Items): 定义在每个 Host 上需要监控的具体指标。例如:服务器的 CPU 使用率、内存使用量、磁盘空间、网络接口流量;数据库的连接数、查询速率;Web 应用的响应时间;应用程序的特定日志条目等。
- 采集方式 (Agents/Agentless):
- Zabbix Agent (被动/主动模式): 一个轻量级代理程序,部署在被监控主机上。它接收 Server 的指令(被动模式)或主动向 Server 报告数据(主动模式)。
- Agentless 监控: 无需在目标主机安装 Agent。
- SNMP (简单网络管理协议): 广泛用于监控网络设备(路由器、交换机、防火墙)、打印机、UPS 等。
- JMX (Java 管理扩展): 监控 Java 应用程序和 JVM 的性能。
- IPMI (智能平台管理接口): 监控服务器硬件的健康状态(温度、风扇转速、电压等)。
- 自定义脚本/命令: 通过 SSH/Telnet 远程执行命令或脚本获取数据。也可在 Zabbix Server/Proxy 上本地执行。
- HTTP/HTTPS 检查: 监控 Web 服务的可用性、响应时间、状态码、页面内容。
- 数据库监控: 通过数据库原生协议(如 MySQL, PostgreSQL, Oracle, SQL Server 等)执行 SQL 查询获取数据。
- 日志文件监控: 监控本地或远程日志文件中的特定模式或事件。
数据处理 (Processing):
- 采集到的原始数据(通常是数值或文本)被发送给 Zabbix Server(核心处理引擎)。
- 预处理 (Pre-processing): 在存储或进一步处理之前,Server 可以对原始数据进行各种操作:
- 单位转换(如 Bytes to MB)。
- 正则表达式匹配/提取。
- 数值运算(增量、差值、平均值等)。
- JSON/XML/XPath 提取。
- 数据校验/阈值检查。
- 数据压缩/聚合(历史数据)。
- 脚本执行(自定义数据处理)。
- 触发器 (Triggers): 这是 Zabbix 的核心逻辑判断单元。Trigger 定义了基于监控项数据(或监控项之间的逻辑组合)需要满足的条件以及持续多长时间时,系统状态会发生改变(从
OK
变为PROBLEM
,反之亦然)。- 例如:
{HostA:system.cpu.load[avg1].last()}>5
表示如果 HostA 的 1 分钟平均负载持续大于 5,则触发 PROBLEM 状态;{HostB:net.if.in[eth0].avg(5m)}>{$IF_IN_ETH0_MAX}
表示如果 HostB 的 eth0 接口 5 分钟内平均入站流量超过预定义的阈值{$IF_IN_ETH0_MAX}
,则触发 PROBLEM。 - 支持复杂的逻辑表达式(AND, OR, NOT)。
- 例如:
告警与通知 (Alerting & Notification):
- 当 Trigger 的状态从
OK
变为PROBLEM
(或根据配置,也可能在PROBLEM
持续状态变化或恢复时),Zabbix 会生成一个 事件 (Event)。 - 动作 (Actions): 定义了在特定事件发生时要执行的操作。
- 发送通知: 通过多种媒介发送告警信息。Zabbix 原生支持:
- 邮件 (SMTP)
- SMS (需要通过短信网关或脚本)
- 即时消息 (Jabber/XMPP)
- 自定义脚本 (可集成 Slack、钉钉、企业微信、PagerDuty、Opsgenie 等几乎所有第三方告警平台或 Webhook)
- 执行远程命令: 在目标主机上自动尝试修复问题(需谨慎配置)。例如:自动重启服务、清理临时文件。
- 发送通知: 通过多种媒介发送告警信息。Zabbix 原生支持:
- 当 Trigger 的状态从
数据存储 (Storage):
- 数据库: Zabbix Server 需要后端数据库来存储其配置信息和所有采集到的监控数据。支持:
- 关系型数据库: MySQL, PostgreSQL, Oracle, SQLite (仅适用于小型测试环境)。
- 时序数据库 (强烈推荐用于大规模部署): TimescaleDB (基于 PostgreSQL 的扩展), ClickHouse。时序数据库特别擅长高效存储和查询时间序列数据(监控指标),性能远超传统关系型数据库。
- 数据分类:
- 配置数据: Hosts, Items, Triggers, Actions, Users, Templates 等的定义。
- 历史数据 (History): 监控项采集到的原始数值或文本记录。通常保留较短时间(如几天)。
- 趋势数据 (Trends): 历史数据的最小值、最大值、平均值、计数等聚合数据(按小时)。保留时间较长(如数月甚至数年),用于长期趋势分析和报告。
- 事件数据 (Events): Trigger 状态变化记录。
- 告警数据 (Alerts): 发送通知的记录。
- 数据库: Zabbix Server 需要后端数据库来存储其配置信息和所有采集到的监控数据。支持:
数据可视化与报告 (Visualization & Reporting):
- Web 前端: 提供用户友好的图形界面,用于配置、查看监控数据和告警。
- 图形 (Graphs): 单个或多个监控项数据的可视化图表(折线图、饼图、柱状图等)。
- 聚合图形 (Screens): 将多个图形、地图、其他信息元素组合到一个屏幕上。
- 幻灯片 (Slide Shows): 自动轮播多个聚合图形。
- Dashboard (仪表盘): 新版前端提供的更灵活、直观的数据展示面板,可以自由拖放各种小部件(Widgets),如图形、问题列表、主机状态、地图等。
- 地图 (Maps): 创建网络拓扑图或自定义布局图,图标状态实时反映监控对象状态。
- 报告 (Reports): 生成关于系统可用性、SLA、容量趋势等的定期报告(PDF, HTML 等格式)。
关键特性
- 开源免费: 核心功能完全免费开源,拥有活跃的社区和支持。
- 高度可扩展:
- 分布式监控: 通过 Zabbix Proxy 实现。Proxy 部署在远程位置或网络区域,负责收集该区域内的数据,进行初步处理和缓冲,然后将数据转发给中央 Zabbix Server。这大大减轻了 Server 的负载,提高了横向扩展能力,并优化了跨 WAN 的流量。
- 节点: 更高级的分布式模式,支持多个独立的 Zabbix 实例(节点)协同工作,共享配置和数据视图。
- 多 Server: 主要用于高可用性(HA)部署。
- 灵活的数据采集: 支持 Agent(主动/被动)、SNMP、IPMI、JMX、HTTP/HTTPS、脚本、日志文件、数据库查询等多种方式。
- 强大的告警机制:
- 基于灵活的 Trigger 表达式。
- 支持告警升级机制(如果问题未解决,逐步通知更高级别人员)。
- 丰富的通知渠道和灵活的 Action 配置(过滤条件、维护周期等)。
- 告警确认(Acknowledgment)功能。
- 自动发现 (Auto-Discovery):
- 网络发现: 自动扫描 IP 网络段,发现新设备并根据规则自动添加监控。
- 设备自动发现: 自动识别设备类型(如 SNMP OID 识别)并应用相应的监控模板。
- 文件系统、网卡、SNMP OID 等发现: 自动发现主机上的特定实体(如分区、网卡、SNMP 指标)并创建对应的监控项。
- 模板 (Templates): 核心的复用机制。将一组预定义的监控项、触发器、图形、发现规则、Web 场景等封装为一个模板。可以方便地批量应用到多个相似的主机上,大大简化配置和管理工作。官方和社区提供大量现成的模板。
- 预测性监控: Trigger 支持
forecast()
,timeleft()
等函数,可以预测磁盘空间何时耗尽、流量何时达到峰值等。 - 丰富的 API: 提供全面的 JSON-RPC API,允许自动化配置管理、集成外部系统、开发自定义界面等。
- 权限控制: 提供基于用户角色(User Roles)和用户组(User Groups)的细致权限管理,控制用户对不同主机、监控项的访问和操作权限。
- 审计日志: 记录用户在 Web 界面上的操作(配置变更),便于追溯和审计。
- 高可用性: 支持通过配置数据库集群、Server 的主动-被动(Active-Passive)集群来实现 HA,减少单点故障。
Zabbix 的意义和价值
- 保障业务连续性: 及时发现服务器宕机、服务中断、资源耗尽等问题,快速通知相关人员处理,最大限度减少业务中断时间,提高系统可用性。
- 提升运维效率:
- 集中监控: 统一平台监控所有 IT 组件,告别分散的工具和登录。
- 自动化: 自动发现、模板应用、告警通知显著减少人工配置和巡检工作量。
- 快速定位问题: 清晰的告警信息、丰富的可视化视图和拓扑图帮助快速识别问题根源。
- 主动运维: 预测性监控和趋势分析帮助在问题影响用户之前主动处理(如提前扩容磁盘)。
- 优化资源利用: 通过长期监控数据(趋势数据),分析 CPU、内存、磁盘、网络等资源的实际使用情况和增长趋势,为容量规划、资源优化和采购决策提供坚实的数据依据,避免资源浪费或不足。
- 满足合规性要求: 详细的监控日志、审计日志和历史数据,可用于证明系统的运行状态、SLA 达成情况,满足某些行业或内部的合规审计要求。
- 性能瓶颈分析: 深入监控应用层、数据库层、系统层、网络层的性能指标,帮助识别和解决性能瓶颈,提升用户体验。
- 降低运维成本:
- 开源免费,节省商业监控软件的巨额许可费用。
- 提高效率,相当于减少了所需的人力成本。
- 预防性维护减少了故障造成的经济损失。
- 强大的社区和生态系统: 活跃的社区提供大量的模板、插件、文档和支持,降低了使用门槛和解决问题的成本。
基本部署
一、Zabbix-Agent 部署步骤(以 Linux 为例)
1. 安装 Zabbix-Agent
# 添加 Zabbix 官方仓库(以 Ubuntu/Debian 为例)
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
apt update
wget
:下载 Zabbix 官方仓库的安装包。dpkg -i
:安装仓库配置包。apt update
:更新软件包列表。
# 安装 Zabbix-Agent apt install zabbix-agent -y
apt install
:安装 Zabbix-Agent 服务。
2. 配置 Zabbix-Agent
编辑配置文件 /etc/zabbix/zabbix_agentd.conf
:
Server=192.168.1.100 # Zabbix-Server 的 IP 地址
ServerActive=192.168.1.100 # 主动模式下的 Server IP
Hostname=web-server-01 # 被监控主机的唯一标识(需与 Server 中配置一致)
Server
:允许哪些 Zabbix-Server 拉取数据(被动模式)。ServerActive
:Agent 主动上报数据的 Server 地址。Hostname
:必须与 Zabbix-Server 中注册的主机名一致。
3. 启动服务
systemctl restart zabbix-agent systemctl enable zabbix-agent
restart
:重启服务使配置生效。enable
:设置开机自启。
二、Zabbix-Proxy 部署步骤
1. 安装 Zabbix-Proxy 和数据库
# 安装 Proxy 和 MySQL(可选 PostgreSQL)
apt install zabbix-proxy-mysql -y
apt install mysql-server -y
zabbix-proxy-mysql
:Proxy 的 MySQL 版本(也可选zabbix-proxy-pgsql
)。
2. 创建数据库
mysql -uroot -p
CREATE DATABASE zabbix_proxy CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix_proxy'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON zabbix_proxy.* TO 'zabbix_proxy'@'localhost';
FLUSH PRIVILEGES; exit
- 创建专用于 Proxy 的数据库和用户。
3. 导入初始数据
zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix_proxy -p zabbix_proxy
- 导入 Proxy 所需的数据库表结构。
4. 配置 Proxy
编辑 /etc/zabbix/zabbix_proxy.conf
:
Server=192.168.1.100 # Zabbix-Server 的 IP
Hostname=proxy-01 # Proxy 的唯一标识(需与 Server 中配置一致)
DBName=zabbix_proxy # 数据库名
DBUser=zabbix_proxy # 数据库用户
DBPassword=password # 数据库密码
Server
:Proxy 连接的 Zabbix-Server 地址。Hostname
:必须与 Server 中注册的 Proxy 名称一致。
5. 启动服务
systemctl restart zabbix-proxy systemctl enable zabbix-proxy
三、Zabbix-Server 端配置
添加 Agent 主机:
- 在 Web 界面中,进入 Configuration > Hosts > Create Host。
- 填写
Hostname
(与 Agent 配置一致)、IP
,并链接模板(如Linux by Zabbix agent
)。
添加 Proxy:
- 进入 Administration > Proxies > Create Proxy。
- 填写
Proxy name
(与 Proxy 配置一致)、Proxy mode
(主动/被动)。
关键概念解释
- Zabbix-Agent:
- 被动模式:Server 主动向 Agent 请求数据。
- 主动模式:Agent 主动将数据发送给 Server。
- Zabbix-Proxy:
- 用于分布式监控,减轻 Server 负载。
- 本地缓存数据,避免因网络问题丢失。
验证部署
- Agent 验证:
zabbix_agentd -p | grep ListenPort # 检查端口(默认 10050)
- Proxy 验证:
tail -f /var/log/zabbix/zabbix_proxy.log # 查看日志是否连接 Server