zabbix模板,触发器,自动化
六、模板
(一)模板介绍与作用
模板(template)是包含监控项、应用集、触发器、图形、聚合图形、自动发现、Web监测等的一组实体,核心价值在于批量管理与统一维护,具体作用如下:
- 批量应用:若多台主机需相同监控配置(如100台需监控Nginx的服务器),无需逐台配置,只需将对应的Nginx监控模板“链接”到这些主机,即可快速实现统一监控。
- 统一更新:当需要调整监控规则(如修改Nginx连接数阈值)时,仅需修改模板中的配置,所有链接该模板的主机将自动同步更新,避免重复操作。
- 简化管理:Zabbix自带大量预置模板(如“Template OS Linux by Zabbix agent”),满足基础监控需求,降低运维门槛。
(二)模板包含的核心组件
模板本质是“监控配置的集合”,典型包含以下组件,各组件功能与关联关系如下表:
组件类型 | 核心作用 | 示例 |
---|---|---|
应用集(Application) | 对监控项分类,便于管理(如“CPU监控”“内存监控”) | 将“CPU负载”“CPU使用率”等监控项归为“CPU应用集” |
监控项(Item) | 收集数据的最小单位,定义“监控什么” | 监控CPU 1分钟平均负载(键值:system.cpu.load[all,avg1] ) |
触发器(Trigger) | 定义数据阈值,触发告警(如“CPU负载超过3则警告”) | 表达式:{Template test:system.cpu.load[all,avg1].last()}>3 |
图形(Graph) | 将监控项数据可视化,便于直观查看趋势 | 用折线图展示CPU 1/5/15分钟平均负载变化 |
自动发现规则(Discovery Rule) | 自动识别主机中的动态资源(如新增磁盘分区、网络接口) | 自动发现主机的挂载文件系统,吧无需手动添加磁盘监控项 |
Web监测(Web Scenario) | 监控Web服务可用性(如响应状态码、页面字符串匹配) | 监测http://10.1.1.12 的状态码是否为200 |
(三)为主机添加/删除模板
1. 添加模板(以监控Linux主机为例)
- 进入Web管理界面:依次点击「配置」→「主机」,选择目标主机(如
agent1
)。 - 进入模板配置页:点击主机详情页中的「模板」标签。
- 链接模板:在「链接的模板」栏点击「选择」,搜索并选择预置模板(如“Template OS Linux by Zabbix agent”),点击「添加」。
- 保存生效:点击页面底部「更新」,模板中的监控项、触发器等配置将自动应用到该主机。
2. 删除模板(两种方式)
操作方式 | 适用场景 | 操作步骤 |
---|---|---|
取消链接并清理 | 主机不再需要该模板的监控,且需删除模板关联的所有配置(监控项、图形等) | 1. 进入主机「模板」标签; 2. 选中需删除的模板,点击「取消链接并清理」; 3. 确认后,模板及关联配置将从主机中移除。 |
取消链接不清理 | 主机不再使用模板,但需保留已生成的监控项、图形等历史配置 | 1. 进入主机「模板」标签; 2. 选中需删除的模板,点击「取消链接不清理」; 3. 模板移除后,原监控项仍可独立使用。 |
(四)创建自定义模板
当预置模板无法满足需求(如自定义监控登录用户数)时,可手动创建模板,步骤如下:
- 进入模板创建页:依次点击「数据采集」→「模板」→「创建模板」。
- 填写基础信息:
- 模板名称:自定义名称(如“Template test”,需唯一)。
- 可见的名称:Web界面显示的名称(可与模板名称一致)。
- 群组:选择模板所属群组(如“Templates”,便于分类管理)。
- 描述:可选,注明模板用途(如“自定义测试模板,包含CPU负载与登录用户数监控”)。
- 保存模板:点击「添加」,生成空白模板。
- 完善模板配置:在空白模板中依次添加「应用集」「监控项」「触发器」「图形」等组件(后续章节详细说明),最终形成完整的自定义监控模板。
(五)模板的筛选与管理
当模板数量较多时,可通过筛选功能快速定位目标模板:
- 进入模板列表页:点击「配置」→「模板」。
- 配置筛选条件:
- 按「名称」搜索:输入模板关键词(如“Linux”)。
- 按「群组」筛选:选择模板所属群组(如“Templates”)。
- 按「链接的模板」筛选:筛选依赖其他模板的子模板。
- 执行筛选:点击「应用」,列表将显示符合条件的模板,支持批量操作(如批量导出、批量删除)。
七、监控项与应用集
(一)核心概念
1. 监控项(Item)
监控项是Zabbix收集数据的最小单位,定义“从主机收集什么数据”,具备以下特性:
- 数据来源:可从Zabbix Agent(客户端)、SNMP、JMX、IPMI等渠道收集数据。
- 数据类型:支持浮点数(如CPU负载)、整数(如登录用户数)、字符串(如系统版本)、日志文本等。
- 更新间隔:定义数据收集频率(如1分钟/次、5分钟/次),可根据监控精度需求调整。
- 历史保留:设置数据在数据库中的保留时长(如90天),避免数据冗余。
2. 应用集(Application)
应用集是监控项的逻辑分组,用于对同类监控项归类管理(如将“CPU负载”“CPU使用率”“CPU空闲时间”归为“CPU监控”应用集),核心作用:
- 简化监控项查找:在Web界面中按应用集筛选,快速定位目标监控项。
- 清晰数据归类:避免监控项杂乱,提升配置可读性。
(二)创建监控项的两种方式
创建方式 | 适用场景 | 优缺点 |
---|---|---|
直接在主机上创建 | 仅需对单台主机配置特殊监控项(如某台服务器的自定义业务指标) | 优点:配置灵活,仅作用于目标主机; 缺点:无法批量复用,多主机需重复配置。 |
在模板中创建 | 多台主机需相同监控项(如所有Linux主机的CPU监控) | 优点:批量复用,修改模板即可同步所有关联主机; 缺点:需先创建模板,适用于标准化监控场景。 |
(三)使用自带键值创建监控项(案例:监控CPU平均负载)
Zabbix内置大量预定义键值(Key),无需自定义脚本即可直接使用,以“监控CPU 1/5/15分钟平均负载”为例:
1. 操作步骤(在模板中创建)
- 进入模板监控项配置页:依次点击「配置」→「模板」,选择目标模板(如“Template test”),点击「监控项」→「创建监控项」。
- 填写监控项核心配置:
- 名称:自定义名称(如“cpu_avg1”,表示1分钟负载)。
- 类型:选择“Zabbix客户端”(通过Agent收集数据)。
- 键值:选择内置键值
system.cpu.load[all,avg1]
(all
表示监控所有CPU核心,avg1
表示1分钟平均负载;avg5
为5分钟,avg15
为15分钟)。 - 信息类型:选择“浮点数”(CPU负载为小数)。
- 更新间隔:设置为“1m”(1分钟收集一次数据)。
- 历史数据保留时长:设置为“90d”(保留90天历史数据)。
- 应用集:选择或创建应用集(如“CPU监控”,不用填写)。
- 保存生效:点击「添加」,完成“cpu_avg1”监控项创建;重复步骤2,分别使用键值
system.cpu.load[all,avg5]
和system.cpu.load[all,avg15]
创建“cpu_avg5”“cpu_avg15”监控项。
2. 验证监控项
- 进入主机监控项列表:点击「配置」→「主机」,选择关联模板的主机(如
agent1
),查看「监控项」标签,确认3个CPU负载监控项状态为“已启用”。 - 查看实时数据:点击「监测」→「最新数据」,筛选主机和应用集,可查看监控项的实时采集值。
(四)创建自定义键值监控项(案例:监控登录用户数)
当内置键值无法满足需求时,可通过自定义键值(基于Linux命令或脚本)实现监控,以“监控主机登录用户数”为例:
1. 步骤1:在被监控端(Agent)配置自定义键值
- 登录被监控主机(如
agent1
),编辑Agent配置文件:vim /etc/zabbix/zabbix_agentd.conf
- 添加自定义键值配置:
UserParameter=loginusers,who | wc -l # loginusers为自定义键名,who | wc -l为统计登录用户数的命令
- 重启Agent服务,使配置生效:
systemctl restart zabbix-agent
2. 步骤2:在Zabbix Server端测试键值有效性
安装zabbix-get
工具(用于测试Agent数据采集),并验证自定义键值:
# 安装zabbix-get
yum install zabbix-get -y# 测试自定义键值(-s指定Agent IP,-k指定自定义键名)
zabbix_get -s 192.168.100.10 -k loginusers
# 输出结果示例:2(表示当前登录用户数为2)
3. 步骤3:在Web界面创建自定义监控项
- 进入模板监控项配置页:同“自带键值创建”步骤1,选择模板并点击「创建监控项」。
- 填写自定义监控项配置:
- 名称:自定义名称(如“登录用户数”)。
- 类型:选择“Zabbix客户端”。
- 键值:输入自定义键名
loginusers
。 - 信息类型:选择“数字(无正负)”(用户数为非负整数)。
- 单位:填写“个”(可选,增强可读性)。
- 更新间隔:设置为“1m”。
- 应用集:创建新应用集“用户监控”。
- 保存生效:点击「添加」,完成自定义监控项创建,后续可在「最新数据」中查看登录用户数实时数据。
八、图形与聚合图形
(一)图形(Graph):单组监控项可视化
图形用于将1个或多个监控项的历史数据以折线图、柱状图、饼图等形式可视化,便于直观查看数据趋势(如CPU负载变化、登录用户数波动)。
1. 创建图形(案例:CPU负载与登录用户数图形)
- 进入模板图形配置页:依次点击「配置」→「模板」,选择目标模板(如“Template test”),点击「图形」→「创建图形」。
- 填写图形基础配置:
- 名称:自定义名称(如“CPU负载与登录用户数图”)。
- 宽/高:设置图形尺寸(如宽900、高200,默认即可)。
- 图形类型:选择“折线图”(适合展示趋势变化)。
- 添加监控项到图形:
- 点击「监控项」栏的「添加」,在弹出的窗口中选择需展示的监控项(如“cpu_avg1”“cpu_avg5”“cpu_avg15”“登录用户数”)。
- 为每个监控项设置“绘图风格”(如折线)、“颜色”(如cpu_avg1设为绿色、cpu_avg5设为红色)、“坐标轴”(如CPU负载用左侧Y轴,登录用户数用右侧Y轴,避免数值范围差异导致图形失真)。
- 保存生效:点击「添加」,完成图形创建。
2. 查看图形数据
- 进入主机图形列表:点击「配置」→「主机」,选择关联模板的主机(如
agent1
),点击「图形」标签,找到目标图形(如“CPU负载与登录用户数图”)。 - 预览图形:点击图形名称,进入「预览」页,可查看指定时间范围(如最近1小时、最近24小时)的监控数据趋势,支持放大、缩小时间范围。
(二)聚合图形(Screen):多图形集中展示
聚合图形是将多个独立图形“拼接”成一个面板,便于同时查看多组监控数据(如同时展示CPU、内存、磁盘、网络的图形),核心价值是集中监控、提升效率。
1. 创建聚合图形(案例:agent1常用监控面板)
- 进入聚合图形创建页:依次点击「监测」→「聚合图形」→「创建聚合图形」。
- 填写聚合图形基础配置:
- 名称:自定义名称(如“agent1常用监控图”)。
- 列数/行数:设置图形布局(如2列1行,表示横向排列2个图形)。
- 编辑聚合图形内容:
- 点击聚合图形中的「更改」(占位符),在弹出窗口中选择需添加的图形(如“CPU负载与登录用户数图”“内存使用率图”)。
- 为每个图形设置“宽/高”(如宽500、高200)、“对齐方式”(如居中)。
- 重复步骤,添加所有需展示的图形,完成布局调整。
- 保存生效:点击「添加」,完成聚合图形创建。
2. 配置仪表盘快速访问
为方便日常查看,可将聚合图形添加到Web界面的「仪表盘」:
- 进入仪表盘:点击「监测」→「仪表盘」(Global view)。
- 添加聚合图形组件:点击「添加构件」,选择“聚合图形”,在弹出窗口中选择目标聚合图形(如“agent1常用监控图”),点击「添加」。
- 调整布局:拖动构件调整位置和尺寸,点击「保存设置」,后续打开仪表盘即可直接查看聚合图形。
(三)图形中文乱码问题解决
若图形中的中文标签(如应用集名称、监控项名称)显示为乱码(方框),原因是Zabbix默认字体不支持中文,解决方案如下:
- 上传中文字体文件:
- 下载支持中文的字体文件(如“ukai.ttc”,楷体),上传到Zabbix Server的字体目录:
# 解压字体文件到Zabbix字体目录 tar xf ttf-arphic-ukai.tar.gz -C /usr/share/zabbix/assets/fonts/ # 重命名字体文件(Zabbix配置需指定.ttf格式) mv /usr/share/zabbix/assets/fonts/ukai.ttc /usr/share/zabbix/assets/fonts/ukai.ttf
- 下载支持中文的字体文件(如“ukai.ttc”,楷体),上传到Zabbix Server的字体目录:
- 修改Zabbix字体配置:
- 编辑Zabbix Web配置文件,将默认字体改为中文字体:
vim /usr/share/zabbix/include/defines.inc.php
- 找到以下配置行,将
graphfont
改为ukai
:define('ZBX_GRAPH_FONT_NAME', 'ukai'); # 原配置为'graphfont'
- 编辑Zabbix Web配置文件,将默认字体改为中文字体:
- 生效:无需重启服务,刷新Web界面的图形页面,中文即可正常显示。
九、触发器
(一)触发器概念与作用
触发器(Trigger)是定义“监控数据何时触发告警”的规则,本质是基于监控项数据的条件判断,核心作用:
- 自动识别异常:当监控项数据达到阈值(如CPU负载超过3、磁盘使用率超过80%)时,触发器状态从“正常”变为“问题”,触发后续告警流程。
- 减少人工值守:无需运维人员实时查看图形,触发器可自动监控异常,提升故障响应效率。
(二)触发器核心属性
- 严重性:定义告警级别,从低到高分为“未分类”“信息”“警告”“一般严重”“严重”“灾难”,便于区分故障紧急程度(如“磁盘使用率超过95%”设为“灾难”,“登录用户数超过20”设为“警告”)。
- 表达式:触发器的核心,定义“何时触发”,语法为
{模板/主机:监控项.函数(参数)} 运算符 阈值
,例如:{Template test:loginusers.last()}>20
:表示“Template test”模板中“loginusers”监控项的最新值(last()
函数)大于20时触发。{Template test:system.cpu.load[all,avg1].avg(5m)}>3
:表示“CPU 1分钟负载”的5分钟平均值(avg(5m)
函数)大于3时触发。
- 恢复表达式:可选,定义“何时恢复正常”,若未配置,默认当监控项数据不再满足触发条件时自动恢复。
(三)创建触发器(案例:登录用户数过多告警)
以“当agent1登录用户数超过20时触发警告”为例,步骤如下:
- 进入模板触发器配置页:依次点击「配置」→「模板」,选择目标模板(如“Template test”),点击「触发器」→「创建触发器」。
- 填写触发器基础配置:
- 名称:自定义名称(如“登录用户数大于20个”)。
- 严重性:选择“警告”(根据业务重要性调整)。
- 构建触发表达式:
- 点击「表达式」栏的「添加」,弹出“表达式构造器”窗口。
- 选择「监控项」:在下拉列表中找到目标监控项(如“Template test:登录用户数”)。
- 选择「函数」:选择“last()”(使用最新采集的数据,适合实时监控)。
- 设置「条件」:运算符选择“>”,阈值填写“20”。
- 插入表达式:点击「插入」,自动生成表达式
{Template test:loginusers.last()}>20
。
- 保存生效:点击「添加」,完成触发器创建。
(四)验证触发器效果
- 模拟异常场景:登录被监控主机(
agent1
),通过打开多个终端窗口(或远程登录),使登录用户数超过20(可通过who | wc -l
查看)。 - 查看触发器状态:
- 进入「监测」→「问题」,可看到触发器状态变为“问题”,显示告警信息(如“agent1:登录用户数大于20个”)。
- 进入主机「触发器」标签,可查看触发器的详细状态(如“最后变更时间”“持续时间”)。
- 模拟恢复场景:关闭多余终端窗口,使登录用户数小于20,触发器状态将自动从“问题”恢复为“正常”。
十、报警
(一)报警原理与流程
Zabbix报警的核心是“触发器触发→动作执行→告警通知”,完整流程如下:
- 触发器触发:当监控项数据满足触发器条件时,触发器状态变为“问题”。
- 动作(Action)触发:预配置的“动作”监测到触发器状态变化,执行预设操作(如发送告警通知)。
- 告警通知:通过“报警媒介”(如邮件、微信、短信)将告警信息发送给指定用户/用户组。
- 故障恢复:当触发器恢复“正常”时,动作再次执行,发送恢复通知。
关键组件关系:触发器 → 动作 → 用户/用户组 → 报警媒介 → 告警平台/接口
(二)常见报警媒介与痛点
Zabbix原生支持邮件、Jabber、SMS、脚本等报警媒介,但自建存在以下痛点:
- 邮件:易被标记为垃圾邮件,送达率低。
- 微信:需企业微信开发接口,技术门槛高。
- SMS:需对接运营商API,通常需付费。
- 脚本:需自行开发对接逻辑,维护成本高。
因此,推荐使用专业告警平台(如OneAlert/睿象云)实现一体化报警,简化配置流程。
(三)基于OneAlert实现报警(步骤详解)
1. 步骤1:注册OneAlert账号并添加Zabbix应用
- 访问OneAlert官网(http://www.onealert.com/),注册账号并登录。
- 进入「集成」→「监控工具」,找到“Zabbix”,点击「新建应用」。
- 配置应用信息:
- 应用名称:自定义(如“Zabbix报警”)。
- 自动关闭时间:设置告警自动关闭时长(如30分钟,超时未处理则自动关闭)。
- 获取AppKey:创建后生成唯一AppKey(如
2842d6d7-7a1-fb97-254d-9be972403dd0
),用于后续Zabbix与OneAlert对接。
2. 步骤2:在Zabbix Server安装OneAlert Agent
- 切换到Zabbix脚本目录(RPM安装默认路径):
cd /usr/lib/zabbix/alertscripts
- 下载并安装OneAlert Agent:
# 下载Agent包 wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-2.1.0.tar.gz # 解压 tar xf ca_zabbix_release-2.1.0.tar.gz # 进入安装目录,执行安装(替换AppKey为步骤1获取的值) cd cloudalert/bin bash install.sh 2842d6d7-7a1-fb97-254d-9be972403dd0
- 按提示输入Zabbix信息:
- Zabbix管理地址(如
http://10.1.1.11/zabbix
)。 - Zabbix管理员账号(如
admin
)。 - Zabbix管理员密码(默认
zabbix
)。
- Zabbix管理地址(如
- 验证安装:当提示“安装成功”时,OneAlert已自动在Zabbix中配置动作、用户、报警媒介。
3. 步骤3:验证Zabbix与OneAlert对接配置
OneAlert安装后会自动在Zabbix中创建以下配置,需确认是否生效:
- 报警动作:
- 进入「配置」→「动作」,筛选“事件源=触发器”,确认存在“CloudAlert Action”动作,规则为“触发器状态变化时,通过CloudAlert媒介发送通知”。
- 报警用户与用户组:
- 进入「管理」→「用户」,确认存在“cloudalert”用户,所属用户组为“cloudalert group”。
- 进入用户详情页的「报警媒介」标签,确认已配置“cloudalert media”媒介(类型为脚本)。
- 报警媒介类型:
- 进入「管理」→「报警媒介类型」,确认存在“cloudalert media”,脚本路径为
/usr/lib/zabbix/alertscripts/cloudalert/bin/alert.sh
。
- 进入「管理」→「报警媒介类型」,确认存在“cloudalert media”,脚本路径为
4. 步骤4:配置OneAlert通知策略
- 登录OneAlert,进入「配置」→「通知策略」,新建策略:
- 通知对象:选择需接收告警的用户(绑定邮箱、手机、微信)。
- 通知方式:勾选“邮件”“短信”“微信”等。
- 时间范围:设置告警发送时间(如工作时间8:30-18:30,非工作时间仅发送紧急告警)。
- 保存策略,完成通知配置。
5. 步骤5:测试报警效果
- 模拟告警场景:登录
agent1
,打开多个终端窗口,使登录用户数超过20(触发“登录用户数大于20个”触发器)。 - 查看告警通知:
- OneAlert平台:进入「告警」页面,可看到新生成的告警记录。
- 接收通知:绑定的邮箱、手机、微信将收到告警信息,包含告警主机、告警项、阈值、当前值等详情。
- 模拟恢复场景:关闭多余终端,登录用户数小于20,触发器恢复正常,OneAlert将发送“恢复通知”。
十一、自动化批量监控
当监控主机数量庞大(如数百台、数千台)时,手动添加主机和模板效率极低,需通过自动发现或自动注册实现批量监控。
(一)自动发现与自动注册的区别
特性 | 自动发现(Discovery) | 自动注册(Auto-registration) |
---|---|---|
触发方 | Zabbix Server主动扫描网络 | Zabbix Agent主动向Server注册 |
适用场景 | 已知IP网段的主机(如机房内网) | 动态IP或新增主机(如云服务器) |
核心逻辑 | Server按规则扫描→发现主机→自动添加监控 | Agent启动后→向Server发送注册请求→Server自动添加监控 |
依赖条件 | Server需能访问Agent的10050端口 | Agent需配置Server地址,且能访问Server的10051端口 |
(二)自动发现实现批量监控(案例:发现agent2并添加监控)
以“自动发现10.1.1.0/24网段内的Linux主机,自动添加到监控并关联自定义模板”为例,步骤如下:
1. 步骤1:准备被监控主机(agent2)
- 安装Zabbix Agent:
yum install zabbix-agent -y
- 配置Agent(指向Zabbix Server):
vim /etc/zabbix/zabbix_agentd.conf # 配置Server和ServerActive为Zabbix Server IP Server=10.1.1.11 ServerActive=10.1.1.11 # 配置主机名(需与后续发现规则匹配) Hostname=agent2
- 重启Agent并设置开机启动:
systemctl restart zabbix-agent systemctl enable zabbix-agent
2. 步骤2:配置自动发现规则
- 进入自动发现配置页:依次点击「配置」→「自动发现」→「创建发现规则」(或修改默认“Local network”规则)。
- 填写发现规则核心配置:
- 名称:自定义名称(如“Linux主机自动发现”)。
- IP范围:填写需扫描的网段(如
10.1.1.0/24
)。 - 更新间隔:设置扫描频率(如“60s”,即每分钟扫描一次)。
- 检查:添加“Zabbix客户端”检查,键值选择
system.uname
(用于判断主机是否为Linux系统,返回值含“Linux”)。 - 设备唯一性准则:选择“IP地址”(避免重复添加)。
- 已启用:勾选“已启用”。
- 保存规则:点击「添加」,Server将开始按规则扫描网段。
3. 步骤3:确认发现主机
- 进入自动发现结果页:依次点击「监测」→「自动发现」,选择目标发现规则(如“Linux主机自动发现”)。
- 查看已发现设备:在「已发现的设备」栏,可看到扫描到的主机(如
10.1.1.13
,即agent2),状态为“在线”。
4. 步骤4:配置动作实现自动添加监控
自动发现仅“找到”主机,需通过“动作”实现“自动添加主机、关联模板、加入主机群组”:
- 进入动作配置页:依次点击「配置」→「动作」,将“事件源”改为“自动发现”,点击「创建动作」。
- 配置动作基础信息:
- 名称:自定义名称(如“自动添加Linux主机监控”)。
- 设置触发条件(筛选需监控的主机):
- 点击「条件」栏的「添加」,添加以下条件(多条件“与”逻辑):
- 「自动发现状态」=「上线」:仅对在线主机生效。
- 「服务类型」=「Zabbix客户端」:确保是Agent主机。
- 「接收到的值」(来自
system.uname
)「包含」「Linux」:仅对Linux主机生效。 - (可选)「主机IP地址」=「10.1.1.13」:仅针对agent2(测试场景用,批量场景可删除)。
- 点击「条件」栏的「添加」,添加以下条件(多条件“与”逻辑):
- 配置动作操作(自动执行的任务):
- 点击「操作」栏的「添加」,添加以下操作:
- 「操作类型」=「添加到主机群组」:选择目标群组(如“Linux servers”)。
- 「操作类型」=「链接到模板」:选择自定义模板(如“Template test”)。
- (可选)「操作类型」=「启用主机」:自动启用主机监控。
- 点击「操作」栏的「添加」,添加以下操作:
- 保存动作:点击「添加」,并确保动作状态为“已启用”。
5. 步骤5:验证自动监控效果
- 等待扫描周期:Server将在下次扫描(如60s后)发现agent2,并执行动作中的操作。
- 查看主机列表:进入「配置」→「主机」,可看到agent2已被添加,状态为“已启用”,且已关联“Template test”模板。
- 查看监控数据:进入「监测」→「最新数据」,筛选agent2,可看到模板中的监控项已开始采集数据,触发器正常生效。
(三)批量操作与模板导入导出
1. 批量操作(启用/禁用/删除主机)
当需对多台主机执行相同操作时,可通过批量操作实现:
- 进入主机列表页:点击「配置」→「主机」。
- 选择目标主机:勾选需操作的多台主机(如agent1、agent2)。
- 执行批量操作:点击页面底部的「批量更新」「启用」「禁用」或「删除」,按提示确认即可。
2. 模板导入导出(备份与迁移)
模板导出可实现“配置备份”和“跨Server迁移”,步骤如下:
(1)模板导出
- 进入模板列表页:点击「配置」→「模板」,选择目标模板(如“Template test”)。
- 导出模板:点击「导出」,选择导出格式(默认XML),点击「下载」,保存XML文件到本地(备份或迁移用)。
(2)模板导入
- 进入模板导入页:在目标Zabbix Server的「配置」→「模板」页面,点击「导入」。
- 上传模板文件:点击「选择文件」,上传已导出的XML文件,选择导入规则(如“更新现有的”“创建新的”)。
- 完成导入:点击「导入」,模板及关联的监控项、触发器、图形等配置将被恢复到新Server中。
十二、Zabbix Proxy
(一)Proxy概念与应用场景
Zabbix Proxy是Zabbix的分布式监控组件,本质是“监控数据代理”,介于Zabbix Server和Agent之间,核心作用是分担Server压力、实现跨网络监控,典型应用场景如下:
- 跨区域/跨网络监控:当Agent与Server不在同一网络(如跨机房、跨内外网)时,直接监控需开放大量端口(存在安全风险),Proxy可作为“中间节点”,仅需Proxy与Server之间开放10051端口。
- 大规模监控:当监控主机数量超过1000台时,Server的数据采集和处理压力过大,Proxy可按区域/机房分担采集任务,降低Server负载。
- 不稳定网络区域:在网络波动较大的区域部署Proxy,Proxy可本地缓存数据,避免网络中断导致数据丢失,网络恢复后同步给Server。
(二)Proxy与Server的核心区别
特性 | Zabbix Server | Zabbix Proxy |
---|---|---|
核心功能 | 全局配置管理、告警处理、数据存储 | 本地数据采集、缓存数据、同步数据到Server |
数据库 | 需存储所有监控数据(历史数据、趋势数据) | 仅存储本地采集的临时数据(同步到Server后可清理) |
依赖关系 | 不依赖其他组件,是监控核心 | 依赖Server获取配置(如监控项、触发器),并同步数据 |
部署数量 | 通常1个(大规模场景可集群) | 可多个,按区域/机房部署 |
(三)部署Proxy实现分布式监控(案例)
以“部署Proxy监控agent1、agent2,Proxy将数据同步给Server”为例,步骤如下:
1. 步骤1:环境准备
主机名 | 角色 | IP地址 | 核心任务 |
---|---|---|---|
server | Zabbix Server | 10.1.1.11 | 全局配置、告警处理 |
proxy | Zabbix Proxy | 10.1.1.14 | 采集agent1/agent2/自身数据,同步给Server |
agent1 | 被监控主机 | 10.1.1.12 | 运行Agent,提供监控数据 |
agent2 | 被监控主机 | 10.1.1.13 | 运行Agent,提供监控数据 |
基础配置(所有主机):
- 配置主机名与hosts解析:
# proxy主机设置主机名 hostnamectl set-hostname --static proxy # 所有主机添加hosts解析 vim /etc/hosts 10.1.1.11 server 10.1.1.12 agent1 10.1.1.13 agent2 10.1.1.14 proxy
- 关闭防火墙与SELinux:
systemctl stop firewalld && systemctl disable firewalld setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
- 时间同步:
systemctl restart ntpd && systemctl enable ntpd
- 配置Zabbix YUM源(所有主机):
vim /etc/yum.repos.d/zabbix.repo [zabbix] name=zabbix baseurl=file:///root/zabbix_soft # 本地源,也可使用清华源(https://mirrors.tuna.tsinghua.edu.cn/zabbix/) enabled=1 gpgcheck=0
2. 步骤2:部署Proxy
- 安装Proxy相关软件(Proxy需本地数据库存储临时数据,此处用MariaDB):
yum install mariadb-server zabbix-proxy-mysql zabbix-agent -y
- 配置MariaDB并创建Proxy数据库:
# 启动MariaDB并设置开机启动 systemctl restart mariadb && systemctl enable mariadb # 登录数据库,创建Proxy专用库 mysql MariaDB [(none)]> create database zabbix_proxy default charset utf8; MariaDB [(none)]> grant all privileges on zabbix_proxy.* to 'zabbix'@'localhost' identified by '123'; # 密码自定义 MariaDB [(none)]> flush privileges; MariaDB [(none)]> quit
- 导入Proxy数据库 schema(初始化表结构):
zcat /usr/share/doc/zabbix-proxy-mysql-4.4.4/schema.sql.gz | mysql zabbix_proxy -u zabbix -p123 # 验证导入:查看是否生成表 mysql -e 'use zabbix_proxy; show tables;'
- 配置Proxy配置文件(
/etc/zabbix/zabbix_proxy.conf
):vim /etc/zabbix/zabbix_proxy.conf # 核心配置(取消注释并修改) Server=10.1.1.11 # Zabbix Server IP Hostname=proxy # Proxy主机名(需与后续Server配置一致) DBName=zabbix_proxy # Proxy数据库名 DBUser=zabbix # 数据库用户名 DBPassword=123 # 数据库密码 ConfigFrequency=60 # Proxy从Server获取配置的间隔(秒) DataSenderFrequency=5 # Proxy向Server同步数据的间隔(秒)
- 启动Proxy并设置开机启动:
systemctl restart zabbix-proxy && systemctl enable zabbix-proxy # 验证端口:Proxy默认监听10051端口(与Server相同,需确保不冲突) netstat -ntlup | grep 10051
3. 步骤3:配置Agent指向Proxy
需将agent1、agent2、proxy自身的Agent配置改为“指向Proxy”(由Proxy采集数据):
- 编辑Agent配置文件(以agent1为例,agent2和proxy操作相同):
vim /etc/zabbix/zabbix_agentd.conf # 修改Server和ServerActive为Proxy IP Server=10.1.1.14 ServerActive=10.1.1.14 # 配置主机名(需唯一) Hostname=agent1 # agent2设为agent2,proxy设为proxy # 添加自定义监控项(如登录用户数,与之前一致) UserParameter=loginusers,who | wc -l
- 重启Agent服务:
systemctl restart zabbix-agent
4. 步骤4:在Server中添加Proxy
- 进入Server Web界面:依次点击「管理」→「Agent代理程序」→「创建代理程序」。
- 填写Proxy配置:
- Agent代理程序名称:填写“proxy”(需与Proxy主机的
Hostname
一致)。 - 系统代理程序模式:选择“主动式”(Proxy主动向Server同步数据,默认推荐)。
- 代理地址:填写Proxy的IP(
10.1.1.14
)。
- Agent代理程序名称:填写“proxy”(需与Proxy主机的
- 保存Proxy:点击「添加」,Server将与Proxy建立连接,获取Proxy的配置。
5. 步骤5:在Server中添加被监控主机(关联Proxy)
- 添加proxy主机:
- 依次点击「配置」→「主机」→「创建主机」。
- 主机名称:填写“proxy”。
- 群组:创建并选择“Proxy Group”。
- Agent代理程序的接口:IP填写
10.1.1.14
,端口10050。 - 由agent代理程序监测:选择“proxy”(指定由该Proxy采集数据)。
- 模板:关联“Template test”模板。
- 点击「添加」保存。
- 批量添加agent1和agent2:
- 重复步骤1,分别添加agent1和agent2,「由agent代理程序监测」均选择“proxy”,关联“Template test”模板。
6. 步骤6:验证Proxy监控效果
- 查看Proxy状态:进入「管理」→「Agent代理程序」,确认proxy的“状态”为“在线”。
- 查看主机监控状态:进入「配置」→「主机」,确认agent1、agent2、proxy的“ZBX”图标为绿色(表示连接正常)。
- 查看监控数据:进入「监测」→「最新数据」,筛选agent1,可看到监控项数据正常采集(数据由Proxy同步给Server)。
- 测试触发器:模拟agent1登录用户数超过20,触发器触发后,告警信息将由Proxy同步给Server,再通过OneAlert发送通知。
十三、主动监控与被动监控
Zabbix的“主动/被动”是指数据采集的方向,分为Agent主动/被动、Proxy主动/被动两种模式,核心影响数据流向和负载分配。
(一)Agent主动监控与被动监控
1. 核心区别
特性 | Agent被动模式(默认) | Agent主动模式 |
---|---|---|
数据流向 | Server/Proxy主动向Agent请求数据(“拉”模式) | Agent主动向Server/Proxy发送数据(“推”模式) |
配置关键 | Agent的Server 参数(指定允许谁来拉数据) | Agent的ServerActive 参数(指定向谁推数据) + 监控项类型设为“Zabbix客户端(主动式)” |
负载分布 | Server/Proxy负载高(需并发请求大量Agent) | Agent负载略高(需主动发送数据),Server/Proxy负载低 |
适用场景 | 监控主机数量较少(<500台) | 监控主机数量多(>500台),需减轻Server/Proxy负载 |
2. 配置Agent主动模式
以“将Template test模板的监控项改为主动模式”为例:
- 进入模板监控项列表:依次点击「配置」→「模板」→「Template test」→「监控项」。
- 批量修改监控项类型:
- 勾选所有监控项(如cpu_avg1、loginusers),点击「批量更新」。
- 类型:改为“Zabbix客户端(主动式)”。
- 点击「更新」,所有关联该模板的主机监控项将同步改为主动模式。
- 验证:Agent将按
ServerActive
配置的地址(如Proxy IP)主动发送数据,Server/Proxy无需再主动请求。
(二)Proxy主动监控与被动监控
1. 核心区别
特性 | Proxy被动模式 | Proxy主动模式(默认推荐) |
---|---|---|
数据流向 | Server主动向Proxy请求数据(“拉”模式) | Proxy主动向Server同步数据(“推”模式) |
配置关键 | Proxy配置文件ProxyMode=1 (1为被动,0为主动) | Proxy配置文件ProxyMode=0 (默认) |
负载分布 | Server负载高(需拉取多个Proxy数据) | Proxy负载略高(需主动同步),Server负载低 |
适用场景 | Proxy数量少(<10个) | Proxy数量多(>10个),需减轻Server负载 |
2. 配置Proxy被动模式
若需修改Proxy为被动模式(仅大规模场景可能用到):
- 编辑Proxy配置文件:
vim /etc/zabbix/zabbix_proxy.conf # 修改ProxyMode为1(被动模式) ProxyMode=1
- 重启Proxy服务:
systemctl restart zabbix-proxy
- 在Server中修改Proxy模式:进入「管理」→「Agent代理程序」,编辑proxy,将“系统代理程序模式”改为“被动式”。
(三)默认模式推荐
- Agent默认被动模式:适合中小规模监控(<500台),配置简单,无需修改监控项类型。
- Proxy默认主动模式:适合所有场景,Proxy主动同步数据,减轻Server负载,避免Server因“拉取数据”导致的压力集中。
大规模场景调整建议:当监控主机>1000台时,可将Agent改为主动模式+Proxy主动模式,最大限度分散负载。
十四、Web监测(拓展补充)
Web监测(Web Scenario)是Zabbix针对Web服务的专项监控功能,可模拟用户访问Web页面的流程,监控可用性、响应时间、页面内容匹配等指标,核心用于保障Web业务正常运行。
(一)Web监测核心功能
- 多步骤监控:可模拟用户的多步操作(如“访问首页→点击登录→提交表单”),监控每个步骤的状态。
- 关键指标监测:
- 响应状态码(如200表示正常,404表示页面不存在,500表示服务器错误)。
- 响应时间(从发起请求到接收完数据的时间,评估Web服务性能)。
- 页面内容匹配(检查页面是否包含指定字符串,如“登录成功”“商品价格”)。
- 下载速度(评估页面资源加载效率)。
- 告警触发:可基于Web监测的指标创建触发器(如“响应时间超过5秒”“状态码非200”),触发告警。
(二)创建Web监测(案例:监控agent1的Web服务)
以“监控agent1的Web服务(http://10.1.1.12
),检查首页状态码和测试页字符串”为例,步骤如下:
1. 步骤1:在agent1上部署Web服务
- 安装Apache(httpd):
yum install httpd -y
- 创建测试页面:
# 创建首页(index.html) echo "agent1 Web Home" > /var/www/html/index.html # 创建测试页(test.txt),包含指定字符串“haha” echo "111haha222" > /var/www/html/test.txt
- 启动httpd服务:
systemctl restart httpd && systemctl enable httpd # 验证:访问http://10.1.1.12,应显示“agent1 Web Home”
2. 步骤2:在Server中创建Web监测(关联agent1)
-
进入Web监测配置页:依次点击「配置」→「主机」,选择agent1,点击「Web监测」→「创建Web场景」。
-
填写Web场景基础配置:
- 名称:自定义名称(如“agent1 Web服务监测”)。
- 应用集:创建并选择“Web监控”。
- 更新间隔:设置监测频率(如“1m”,每分钟监测一次)。
- 尝试次数:设置失败重试次数(如“1”,失败后不重试)。
-
添加监测步骤(Step):
步骤1:监测首页状态码
- 点击「步骤」栏的「添加」。
- 名称:填写“首页状态码监测”。
- URL:填写
http://10.1.1.12/index.html
。 - 要求的状态码:填写“200”(正常状态码)。
- 超时:设置“15s”(超过15秒未响应则判定失败)。
- 点击「添加」保存步骤1。
步骤2:监测测试页字符串
- 再次点击「添加」步骤。
- 名称:填写“测试页字符串监测”。
- URL:填写
http://10.1.1.12/test.txt
。 - 要求的字串:填写“haha”(检查页面是否包含该字符串)。
- 超时:设置“15s”。
- 点击「添加」保存步骤2。
-
保存Web场景:点击「添加」,Web监测将开始按配置执行监测。
3. 步骤3:查看Web监测结果
- 进入Web监测报告:依次点击「监测」→「Web监测」,选择agent1的“agent1 Web服务监测”。
- 查看监测详情:
- 最近检查记录:显示每次监测的结果(成功/失败)、每个步骤的响应时间、状态码。
- 图形:可查看“响应时间趋势图”“步骤成功率图”,直观评估Web服务性能。
- 验证异常场景:
- 停止httpd服务:
systemctl stop httpd
,监测将失败,状态码显示“连接拒绝”。 - 删除test.txt中的“haha”:
echo "111222" > /var/www/html/test.txt
,步骤2将失败,提示“未找到指定字符串”。
- 停止httpd服务:
4. 步骤4:基于Web监测创建触发器
可针对Web监测的结果创建触发器(如“Web服务响应时间超过5秒则告警”):
- 进入模板触发器配置页:选择“Template test”,点击「触发器」→「创建触发器」。
- 构建表达式:
- 点击「表达式」→「添加」,选择「监控项」为“agent1 Web服务监测:平均响应时间”(Web监测自动生成的监控项)。
- 函数选择“avg(1m)”(1分钟平均值),运算符“>”,阈值“5”(单位:秒)。
- 表达式示例:
{Template test:web.test.time[agent1 Web服务监测].avg(1m)}>5
。
- 保存触发器:设置严重性为“一般严重”,点击「添加」,当Web响应时间超过5秒时将触发告警。
十五、综合练习(监控场景实战)
(一)系统监控拓展(CPU/内存/磁盘/网络)
1. 练习1:监控进程数量并设置多级触发器
需求:监控主机进程总数,触发规则:
- 超过200个:警告
- 超过300个:一般严重
- 超过400个:灾难
实现步骤:
- 创建监控项:在模板中添加监控项,键值使用内置
proc.num[]
(监控所有进程数量)。- 名称:“总进程数”
- 键值:
proc.num[]
- 信息类型:数字(无正负)
- 创建3个触发器:
- 警告:
{Template test:proc.num[].last()}>200
,严重性“警告” - 一般严重:
{Template test:proc.num[].last()}>300
,严重性“一般严重” - 灾难:
{Template test:proc.num[].last()}>400
,严重性“灾难”
- 警告:
- 验证:通过
ps aux | wc -l
查看进程数,模拟进程数超过阈值,确认触发器按级别触发。
2. 练习2:监控TCP连接数量
需求:监控主机的TCP连接总数(ESTABLISHED状态)。
实现步骤:
- 自定义键值:在Agent中添加自定义键值(统计ESTABLISHED连接数):
vim /etc/zabbix/zabbix_agentd.conf UserParameter=tcp.established,netstat -ant | grep ESTABLISHED | wc -l
- 创建监控项:在模板中添加监控项,键值
tcp.established
,信息类型“数字”。 - 创建触发器:设置阈值(如超过1000触发警告),表达式:
{Template test:tcp.established.last()}>1000
。
3. 练习3:监控磁盘使用率
需求:监控/
分区使用率,超过80%警告,超过90%严重。
实现步骤:
- 创建监控项:使用内置键值
vfs.fs.size[/,pused]
(/
分区使用率,百分比)。 - 创建触发器:
- 警告:
{Template test:vfs.fs.size[/,pused].last()}>80
- 严重:
{Template test:vfs.fs.size[/,pused].last()}>90
- 警告:
4. 练习4:监控可用内存
需求:监控可用内存(含缓存),低于1GB警告。
实现步骤:
- 创建监控项:使用内置键值
vm.memory.size[available]
(可用内存,单位B),信息类型“浮点数”,单位“GB”(需设置值映射:1GB=102410241024 B)。 - 创建触发器:表达式:
{Template test:vm.memory.size[available].last()}<1
(单位GB)。
(二)业务监控实战(Nginx/MariaDB)
1. 监控Nginx服务
(1)基于Nginx状态页监控
-
配置Nginx状态页:在agent1的Nginx配置中添加状态页:
vim /etc/nginx/nginx.conf server {listen 80;server_name agent1;location /status {stub_status on; # 开启状态页allow 10.1.1.14; # 允许Proxy访问allow 127.0.0.1;deny all;} } systemctl restart nginx
- 访问
http://10.1.1.12/status
,可查看Nginx状态(如Active connections、accepts、handled、requests)。
- 访问
-
创建自定义脚本:在agent1中创建脚本,解析状态页数据:
vim /opt/nginx_status.sh #!/bin/bash HOST="127.0.0.1" PORT="80" # 定义函数,返回不同指标 function ping { /sbin/pidof nginx | wc -l; } # 检查Nginx进程是否存在 function active { curl "http://$HOST:$PORT/status" 2>/dev/null | grep 'Active' | awk '{print $NF}'; } function accepts { curl "http://$HOST:$PORT/status" 2>/dev/null | awk NR==3 | awk '{print $1}'; } function handled { curl "http://$HOST:$PORT/status" 2>/dev/null | awk NR==3 | awk '{print $2}'; } function requests { curl "http://$HOST:$PORT/status" 2>/dev/null | awk NR==3 | awk '{print $3}'; } $1 # 接收参数,执行对应函数 chmod 755 /opt/nginx_status.sh
-
配置自定义键值:在Agent中添加键值:
vim /etc/zabbix/zabbix_agentd.conf UserParameter=nginx_status[*],/opt/nginx_status.sh $1 systemctl restart zabbix-agent
-
创建监控项与触发器:
- 监控项:如“Nginx活跃连接数”(键值
nginx_status[active]
)、“Nginx请求数”(键值nginx_status[requests]
)。 - 触发器:如“活跃连接数超过100警告”(
{Template test:nginx_status[active].last()}>100
)。
- 监控项:如“Nginx活跃连接数”(键值
(2)使用Zabbix预置模板
Zabbix自带“Template App Nginx by HTTP”模板,可直接关联主机,无需自定义脚本(需确保Nginx状态页配置正确)。
2. 监控MariaDB服务
(1)监控数据库登录用户数
-
配置自定义键值:在agent1的Agent中添加键值,通过
mysqladmin
或SQL查询获取登录用户数:vim /etc/zabbix/zabbix_agentd.conf # 方式1:使用mysqladmin UserParameter=mysql.threads_connected,mysqladmin -u root extended-status | grep Threads_connected | awk '{print $4}' # 方式2:使用SQL查询(需确保zabbix用户有访问权限) UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | mysql -u zabbix -p123 -N | awk '{print $$2}' systemctl restart zabbix-agent
-
创建监控项与触发器:
- 监控项:“MySQL登录用户数”(键值
mysql.threads_connected
或mysql.status[Threads_connected]
)。 - 触发器:“登录用户数超过50警告”(
{Template test:mysql.threads_connected.last()}>50
)。
- 监控项:“MySQL登录用户数”(键值
(三)大规模监控架构设计
1. 多Server分担监控
当监控主机超过5000台时,单台Server压力过大,可部署多台Zabbix Server,按区域/业务划分监控范围(如Server1监控华北机房,Server2监控华东机房)。
2. Proxy分层部署
在超大规模场景(如数万台主机),可部署“Proxy集群”或“二级Proxy”:
- 一级Proxy:按机房部署,采集机房内所有主机数据。
- 二级Proxy:在大型机房内按机柜部署,分担一级Proxy的压力。
3. 自动化运维整合
- 批量部署Agent:使用Ansible或Cobbler的PostScript脚本,批量安装和配置Agent。
- 自动发现与注册:结合CMDB(配置管理数据库),新主机上线后自动注册到Zabbix,关联对应模板。
- 模板版本管理:通过Git管理模板XML文件,实现模板的版本控制与批量导入。