目录
[Zabbix 的意义和价值](#Zabbix 的意义和价值)
[一、Zabbix-Agent 部署步骤(以 Linux 为例)](#一、Zabbix-Agent 部署步骤(以 Linux 为例))
[1. 安装 Zabbix-Agent](#1. 安装 Zabbix-Agent)
[2. 配置 Zabbix-Agent](#2. 配置 Zabbix-Agent)
[3. 启动服务](#3. 启动服务)
[二、Zabbix-Proxy 部署步骤](#二、Zabbix-Proxy 部署步骤)
[1. 安装 Zabbix-Proxy 和数据库](#1. 安装 Zabbix-Proxy 和数据库)
[2. 创建数据库](#2. 创建数据库)
[3. 导入初始数据](#3. 导入初始数据)
[4. 配置 Proxy](#4. 配置 Proxy)
[5. 启动服务](#5. 启动服务)
[三、Zabbix-Server 端配置](#三、Zabbix-Server 端配置)
基本概念
核心基本原理
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