目录
一、Zabbix 监控基础与核心价值
在运维工作中,监控环节占比约 38%,其质量直接影响工作效率与稳定性。理想的监控应具备全自动化能力,包括主机自动添加、模板自动关联、故障自动告警等 ——Zabbix 正是满足这一需求的专业监控工具,可通过预设规则实现上述自动化操作。
本次实战环境的资源清单如下:
操作系统 | 配置 | 主机名 | IP 地址 | 角色 |
---|---|---|---|---|
openEuler 24.03 | 2C4G | zabbix | 192.168.207.137 | Zabbix 服务端 |
openEuler 24.03 | 2C4G | server01 | 192.168.207.138 | 被监控节点 |
openEuler 24.03 | 2C4G | server02 | 192.168.207.139 | 被监控节点 |
二、网络自动发现:批量主机自动化管理
网络自动发现是 Zabbix 实现主机自动化监控的核心功能之一,其核心价值在于降低运维成本、提升部署效率,尤其适用于规模较大或频繁变化的 IT 环境。
(一)网络自动发现的核心能力与局限
核心优势
- 加快部署速度:无需手动添加主机,通过规则批量发现目标设备
- 简化管理:自动关联模板、分组,减少人工操作
- 适应动态环境:在设备频繁增减的场景中避免 “过度管理”
发现依据
网络自动发现基于以下信息判断目标设备:- IP 地址范围(需提前定义扫描网段)
- 外部服务状态(如 FTP、SSH、WEB 等端口是否开放)
- Zabbix agent 信息(仅支持未加密模式)
- SNMP agent 信息
局限说明
需注意的是,网络自动发现仅能实现主机和服务的发现,无法自动发现网络拓扑(如设备间连接关系)。
(二)网络自动发现完整流程
整个发现过程分为 4 个阶段,形成 “发现 - 动作 - 管理” 的闭环:
网络发现阶段
发现模块定期扫描指定 IP 范围,检测到服务或主机时生成 “发现事件”(如 “检测到 192.168.207.138 开放 SSH 服务”)。执行动作阶段
基于发现事件触发预设动作,动作可根据设备类型、IP 地址、运行状态等条件精准执行(如 “仅对 192.168.207.138-139 网段的 Linux 主机执行操作”)。创建主机阶段
动作执行时可自动完成主机添加、主机组归类、模板关联(如关联 “Linux by Zabbix agent” 模板)等操作,无需人工干预。移除主机阶段
若已发现的主机脱离预设 IP 范围(如设备下线),Zabbix 会自动删除该主机记录(此功能从 Zabbix 2.4.0 版本开始支持)。
(三)网络自动发现配置步骤
1. 客户端(被监控节点)配置 Zabbix Agent
以 server01(192.168.207.138)为例:
- 修改 Agent 配置文件:
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf # 指向Zabbix服务端IP Server=192.168.207.137 ServerActive=192.168.207.137 # 定义主机名(需唯一) Hostname=server01
- 重启 Agent 使配置生效:
[root@server01 ~]# systemctl restart zabbix-agent
2. 创建网络发现规则
在 Zabbix Web 界面操作:
路径:数据采集 → 自动发现 → 创建发现规则
核心配置项(共 9 项):
- 名称:自定义规则名称(如 “企业内网主机发现”)
- 代理程序:选择 “无代理”(由 Server 直接执行)或指定 Zabbix proxy
- IP 范围:支持 4 种格式(如单个 IP“192.168.207.138”、范围 “192.168.207.1-255”、子网 “192.168.207.0/24”、列表 “192.168.207.138,192.168.4.0/24”)
- 更新间隔:定义扫描频率(如 60 秒,需平衡实时性与资源消耗)
- 检查类型:选择 “Zabbix 客户端”,端口设为 10050(Agent 默认端口),键值设为 “system.uname”(获取系统信息)
- 设备唯一性准则:选择 “IP 地址” 或 “主机名” 作为唯一标识,避免重复发现
- 已启用:勾选以激活规则
注意:若 IP 范围包含 1000 个地址,每次扫描会生成 1000 个事件,需合理规划范围以减少资源占用。
3. 创建自动发现动作
动作是连接 “发现事件” 与 “管理操作” 的桥梁:
- 路径:告警 → 动作 → 发现动作 → 创建动作
- 配置内容:
- 动作参数:设置动作名称(如 “自动添加 Linux 主机”),并关联前文创建的发现规则(确保仅触发目标规则的事件)。
- 操作设置:添加具体动作,推荐配置:
- 添加主机(自动将发现的设备录入 Zabbix)
- 添加到主机群组(如 “Linux servers”)
- 链接到模板(如 “Linux by Zabbix agent”,可按需添加其他模板)。
4. 配置验证
- 查看发现状态:路径 “监测 → 自动发现”,可看到已发现的主机列表(如 server01、server02)。
- 查看监控状态:路径 “数据采集 → 主机”,确认主机已被添加且模板关联成功。
(四)主机名称显示优化(可选配置)
默认情况下,主机名称可能显示为 IP 地址,可通过以下方式优化:
修改 Agent 配置(以 server01 为例):
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf # 注释原Hostname,启用自动获取主机名 # Hostname=server01 HostnameItem=system.hostname [root@server01 ~]# systemctl restart zabbix-agent
调整自动发现规则:
在 “主机名称”“可见名称” 中选择 “Zabbix 客户端:system.hostname”,使名称显示为实际主机名(如 server01)。
三、自动注册:Agent 主动上报的自动化方案
(一)自动注册与自动发现的核心差异
对比维度 | 自动发现 | 自动注册 |
---|---|---|
触发方式 | Server 扫描 IP 范围发现设备 | Agent 主动向 Server 发送注册请求 |
适用场景 | 已知设备 IP 范围(如固定网段的服务器) | 未知 IP 范围(如动态分配 IP 的终端、临时设备) |
依赖条件 | 需预设 IP 范围、服务类型等信息 | 仅需 Agent 知道 Zabbix Server 地址 |
自动注册的核心优势:当 Agent 的 IP 地址、操作系统版本等信息未知时,仍可通过 “Agent 主动上报” 实现自动化管理(前提是 Agent 已配置 Server 地址)。
(二)自动注册配置步骤
1. 清理历史配置
删除前文创建的自动发现规则、发现动作及自动发现的主机(避免冲突):
- 路径:分别删除 “告警 → 动作” 中的发现动作、“数据采集 → 自动发现” 中的规则、“数据采集 → 主机” 中的对应主机。
2. 客户端(Agent)配置
以 server01 为例,修改配置文件:
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf
# 指向Server地址(必须正确,否则无法上报)
Server=192.168.207.137
ServerActive=192.168.207.137
Hostname=server01 # 可选,若未设置则使用默认主机名
可选参数(按需配置):
HostnameItem=system.hostname
:自动获取主机名(当 Hostname 未设置时生效)HostMetadata=Linux
:添加元数据标识(如 “Linux”“WebServer”,用于动作条件过滤)HostMetadataItem=system.uname
:自动获取元数据(如内核版本,当 HostMetadata 未设置时生效)。
重启 Agent:
[root@server01 ~]# systemctl restart zabbix-agent
。
3. 创建自动注册动作
- 路径:告警 → 动作 → 自动注册动作 → 创建动作
- 配置内容:
- 动作名称:如 “接收 Linux Agent 注册”
- 触发条件:可基于元数据过滤(如 “HostMetadata 包含 Linux”,仅接收 Linux 设备)
- 操作设置:与自动发现动作一致,推荐配置 “添加主机 + 加入主机组 + 关联模板”。
4. 配置验证
路径 “数据采集 → 主机”,确认 server01 已被自动添加(Agent 启动后约 1-2 分钟生效,取决于上报频率)。
四、应用服务监控:以 Nginx 为例
Zabbix 可监控各类应用服务,以下以 Nginx 为例,详解从部署到监控的完整流程。
(一)Nginx 部署与状态配置
1. 部署 Nginx(server01 节点)
配置 yum 源:
[root@server01 ~]# cat > /etc/yum.repos.d/nginx.repo << "EOF" [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/8/x86_64 gpgcheck=0 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/centos/8/x86_64 gpgcheck=0 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF
安装并启动 Nginx:
[root@server01 ~]# dnf -y install nginx [root@server01 ~]# systemctl start nginx [root@server01 ~]# systemctl enable nginx
开启状态统计(关键步骤):
修改 Nginx 配置文件/etc/nginx/conf.d/default.conf
,在server
段添加:location /nginx_status { stub_status on; # 开启状态统计 access_log off; # 关闭此路径的访问日志 }
重启 Nginx:
systemctl restart nginx
。验证状态页:执行
curl 127.0.0.1/nginx_status
,应返回类似结果:Active connections: 1 server accepts handled requests 1 1 1 Reading: 0 Writing: 1 Waiting: 0 ```。
2. Nginx 监控指标与自定义 Key
(1)核心监控指标
需重点监控以下指标,覆盖 Nginx 运行全状态:
- 连接数:Active connections(活跃连接数)、Waiting(等待连接数)等
- 请求处理:accepts(总连接数)、handled(成功握手数)、requests(总请求数)等
- 服务可用性:端口 80 是否存活(判断服务是否运行)
- 资源使用:Nginx 进程数、磁盘剩余空间等。
(2)自定义 Key 的作用与配置
Zabbix 内置 Key 可监控基础指标(如 CPU、内存),但 Nginx 专项指标(如活跃连接数)需通过自定义 Key 获取。Key 是 Zabbix 识别监控项的唯一标识,可关联脚本获取特定数据。
配置步骤:
创建监控脚本(用于提取 Nginx 状态):
[root@server01 ~]# vim /etc/zabbix/nginx-status.sh #!/bin/bash NGINX_PORT=80 NGINX_COMMAND=$1 # 定义获取各指标的函数 nginx_active(){ curl -s "http://127.0.0.1:$NGINX_PORT/nginx_status/" | awk '/Active/{print $3}' } nginx_reading(){ curl -s "http://127.0.0.1:$NGINX_PORT/nginx_status/" | awk '/Reading/{print $2}' } # 其他指标(writing、waiting等)函数省略,格式同上 # 根据参数执行对应函数 case $NGINX_COMMAND in active) nginx_active;; reading) nginx_reading;; # 其他参数(writing、waiting等)省略 *) echo "USAGE: $0 {active|reading|writing|waiting|accepts|handled|requests}" esac
赋予脚本执行权限:
[root@server01 ~]# chmod +x /etc/zabbix/nginx-status.sh
。配置 Agent 关联脚本:
修改/etc/zabbix/zabbix_agentd.conf
:# 开启自定义Key(默认关闭) UnsafeUserParameters=1 # 定义Key:nginx_status为Key名称,脚本路径及参数关联 UserParameter=nginx_status[*],/etc/zabbix/nginx-status.sh $1
重启 Agent:
systemctl restart zabbix-agent
。测试自定义 Key:在 Zabbix Server 执行(验证能否获取数据):
[root@zabbix ~]# zabbix_get -s 192.168.207.138 -k nginx_status[active]
若返回数字(如 1),说明配置成功。
3. Web 端添加 Nginx 监控项
通过模板统一管理监控项,步骤如下:
- 路径:数据采集 → 模板 → 创建模板(如 “Nginx-status”)
- 添加监控项:在模板中创建以下监控项(Key 需与配置一致):
监控项名称 | Key | 说明 | |
---|---|---|---|
nginx active | nginx_status[active] | 活跃连接数 | |
nginx reading | nginx_status[reading] | 读取客户端请求数 | |
nginx writing | nginx_status[writing] | 向客户端写入响应数 | |
nginx waiting | nginx_status[waiting] | 等待客户端请求数 | |
nginx accepts | nginx_status[accepts] | 总连接数 | |
nginx handled | nginx_status[handled] | 成功握手数 | |
nginx requests | nginx_status[requests] | 总请求数 | |
nginx port | net.tcp.port[,80] | 80 端口存活状态(1 为存活) | |
nginx proc | proc.num[nginx] | Nginx 进程数 | |
nginx fs | vfs.fs.size[/,pfree] | 根目录剩余空间占比 | 至 |
- 应用模板:将模板关联到 server01 主机,完成监控配置。
五、Zabbix 邮件报警:故障及时通知机制
当监控指标触发阈值(如 Nginx 端口 down)时,Zabbix 需自动发送告警,邮件是最常用的告警方式。
(一)邮件报警核心组件
报警流程依赖三个核心组件,缺一不可:
- 告警媒介:信息传递渠道(如邮箱),需配置发送服务器、认证信息等。
- 触发器:阈值判断规则(如 “nginx port=0(端口 down)”),触发时生成事件。
- 动作:事件触发后执行的操作(如 “向 Admin 发送邮件”)。
(二)邮件报警配置步骤
1. 配置告警媒介(以 Email 为例)
- 路径:告警 → 媒介 → 选择 “Email” → 编辑
- 核心配置:
- SMTP 服务器:如 “smtp.qq.com”(QQ 邮箱)、“smtp.163.com”(网易邮箱)
- SMTP 端口:465(SSL 加密,推荐)
- 发件人邮箱:如 “xxx@qq.com”
- 认证信息:用户名填发件人邮箱,密码需填邮箱授权码(非登录密码,需在邮箱官网开启 SMTP 并获取)。
- 测试媒介:配置完成后发送测试邮件,确认接收正常。
2. 配置用户报警媒介
指定接收告警的用户及联系方式:
- 路径:用户 → 用户 → 选择 “Admin” → 报警媒介 → 添加
- 配置:选择 “Email” 媒介,填写接收邮箱(如 “admin@example.com”),设置接收时间(如 “00:00-24:00” 全时段)。
3. 配置触发器动作
定义 “触发条件” 与 “告警操作”:
- 路径:告警 → 动作 → 触发器动作 → 创建动作
- 配置内容:
- 动作名称:如 “Nginx 故障告警”
- 触发条件:选择前文创建的 Nginx 监控项(如 “nginx port=0”,即端口 80down)
- 操作设置:添加操作 “发送消息”,选择接收用户(如 Admin)、消息类型(Email)、消息内容(如 “Nginx 服务异常,IP:192.168.207.138”)。
4. 报警验证
手动停止 server01 的 Nginx 服务:systemctl stop nginx
。
- 触发检查:Zabbix 会检测到 “nginx port=0”,触发告警。
- 结果验证:接收邮箱应收到告警邮件,内容包含故障信息。
总结
Zabbix 通过 “网络自动发现”“自动注册” 实现主机自动化管理,通过 “自定义 Key” 拓展监控维度,通过 “邮件报警” 实现故障及时通知,形成从 “发现” 到 “监控” 再到 “告警” 的完整闭环。掌握这些高级应用,可大幅提升运维效率,满足企业级监控需求。实际使用中需根据场景选择自动发现或自动注册(已知 IP 用发现,未知 IP 用注册),并合理配置监控项与告警阈值,确保监控精准、告警及时。