#Linux监控与安全Day02:Zabbix 自动发现,Zabbix 报警机制(邮箱),Zabbix 主动监控,监控 Nginx 服务
一、Zabbix 自动发现
1. 自动发现概述
当需监控的设备数量增多,手动添加主机效率低下,可使用自动发现(Discovery)功能。
自动发现可实现:发现主机、添加主机、将主机加入指定主机组、链接模板等。
自动发现整体流程
- 创建自动发现规则
- 创建Action 动作(定义发现主机后执行的操作)
- 通过动作自动完成添加主机、关联模板等行为
2. web2 被监控端部署(源码编译 Zabbix Agent)
2.1 环境准备与编译安装
将zabbix-6.4.7.tar.gz上传至虚拟机web2的/root目录,执行如下命令:
# 安装编译依赖[root@web2 ~]# dnf -y install gcc make pcre-devel autoconf# 解压源码包[root@web2 ~]# tar -xf zabbix-6.4.7.tar.gz# 进入解压目录[root@web2 ~]# cd zabbix-6.4.7/# 配置编译参数,仅开启 Agent 功能[root@web2 zabbix-6.4.7]# ./configure --enable-agent# 编译并安装[root@web2 zabbix-6.4.7]# make install# 查看安装生成目录[root@web2 ~]# ls /usr/local/etc[root@web2 ~]# ls /usr/local/bin[root@web2 ~]# ls /usr/local/sbin2.2 启动 Zabbix Agent 并配置开机自启
# 创建 Zabbix 运行用户,禁止登录系统[root@web2 zabbix-6.4.7]# useradd -s /sbin/nologin zabbix# 启动 Zabbix 客户端服务[root@web2 zabbix-6.4.7]# zabbix_agentd# 查看 10050 监听端口(Zabbix Agent 默认端口)[root@web2 zabbix-6.4.7]# ss -nutlp | grep :10050# 配置开机自启,将启动命令写入 rc.local[root@web2 ~]# echo zabbix_agentd >> /etc/rc.d/rc.local# 赋予 rc.local 执行权限[root@web2 ~]# chmod +x /etc/rc.d/rc.local3. Zabbix 服务端创建自动发现规则
- 路径:数据采集 --> 自动发现 --> 创建发现规则
- 规则参数配置:
- 名称:
web_discovery_rule - 代理程序:没有 agent 代理程序
- IP 范围:
192.168.8.105-120(可多个网段,逗号分隔) - 更新间隔:
1m(实验环境修改为1分钟,默认1小时) - 设备唯一性准则:IP 地址
- 可见名称:IP 地址
- 名称:
- 检查类型选择:SSH(只要发现的主机有SSH 22端口即可)
- 保存并启用该发现规则。
4. Zabbix 服务端创建发现动作(Action)
- 路径:告警 --> 动作 --> 发现动作 --> 创建动作
- 基础配置:
- 动作名称:
web_discovery - 状态:已启用
- 动作名称:
- 添加触发条件:
- 类型:主机 IP 地址
- 运算符:等于
- 匹配值:
192.168.8.105-120(建议与发现规则的配置一致)
- 添加执行操作:
- 将发现的主机添加至
Linux servers主机群组 - 为主机关联模板
Linux by Zabbix agent
- 将发现的主机添加至
添加至Linux servers主机群组
继续添加动作:
为主机关联模板Linux by Zabbix agent
- 保存动作配置。
5. 验证与被监控端配置修复
5.1 查看主机列表
路径:监测 --> 主机,可看到自动发现的web2主机,此时主机状态为不可用。
5.2 web2 修改 Agent 配置,放行 Zabbix 服务端
# 编辑 Zabbix Agent 主配置文件[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf# 113行:指定允许连接的 Zabbix 服务端 IPServer=127.0.0.1,192.168.8.100# 178行:设置本机主机名,与 Zabbix 页面保持一致Hostname=web2# 强制停止原有 Agent 进程[root@web2 ~]# killall -9 zabbix_agentd# 重新启动 Agent[root@web2 ~]# zabbix_agentd# 验证 10050 端口监听[root@web2 ~]# ss -nutlp | grep :100505.3 最终验证
刷新 Zabbix 主机列表,web2主机状态变为可用,自动发现功能生效。
二、Zabbix 报警机制
1. 报警机制基础说明
- 自定义监控项默认无自动报警,首页不会展示异常提示;系统自带模板默认配置告警。
- 实现自动告警必须配置触发器+告警动作。
- 触发器(trigger):设定阈值表达式(如用户数大于50、内存低于300M),条件触发则生成事件,执行某个动作。
- 动作(action):触发器触发后执行的行为,例如发送邮件、重启服务等。
简单讲,自定义报警分为三部:
创建触发器(条件)
创建触发动作
关联邮箱
2. 创建触发器
- 数据采集 --> 模板 --> 选择模板
Template_usercount--> 触发器 --> 创建触发器
触发器基础配置:
- 名称:
usercount_gt_50 - 事件名称:
usercount_gt_50 - 严重性:告警
- 名称:
选择告警
- 表达式配置(阈值:用户总数大于50):
- 监控项:选择模板内自定义的
usercount监控项 - 函数:last()(取最新数值)
- 判断条件:
last(/Template_usercount/usercount) > 50
- 监控项:选择模板内自定义的
- 条件:自定义监控项的结果 大于50
点击插入
- 点击添加,启用触发器并保存。
3. 配置邮件告警媒介
3.1 启用 Email 媒介类型
路径:告警 --> 媒介,找到Email类型并启用,
配置参数:
- SMTP 服务器:
localhost(指定发送邮件的服务器,实际生产需指定专门的邮件服务器) - 发件人邮箱:
tina@test.com
这里配置的EmailEmail (HTML)是用来设置网络邮箱地址的
3.2 为管理员用户绑定收件邮箱
- 用户 --> 选择 Admin 超级管理员 --> 报警媒介 --> 添加
- 媒介选择:Email
- 收件人:
root@localhost.localdomain(管理员自己的个人邮箱) - 生效时间:
1-7,00:00-24:00,启用媒介并保存。
点击添加,点击更新
4. 创建触发器告警动作
- 路径:告警 --> 动作 --> 触发器动作 --> 创建动作
- 动作基础信息:
- 名称:
report_user - 状态:已启用
- 名称:
- 触发条件:选择触发器
Template_usercount下的usercount_gt_50
点击添加
- 操作配置:
- 操作类型:发送消息
- 接收用户:Admin(Zabbix Administrator)
- 发送媒介:Email
- 步骤持续时间:60秒
点击操作,点击添加:
- 保存动作。
5. Zabbix 服务端配置邮件服务
安装并启动postfix邮件服务与邮件客户端mailx:
# 安装邮件相关软件包postfix发送邮件 mailx查看邮件[root@zabbix-server ~]# dnf -y install postfix mailx# 启动服务并设置开机自启[root@zabbix-server ~]# systemctl enable postfix --now# 验证邮件服务 25 端口监听[root@zabbix-server ~]# ss -nutlp | grep :256. 告警功能测试
6.1 制造告警(用户数 > 50)
在web1批量创建测试用户:
# 批量创建 15 个用户[root@web1 ~]# for i in {1..15}>do>useradduser$i>done# 查看系统总用户数,确认超过 50[root@web1 ~]# wc -l /etc/passwd6.2 查看告警邮件
在 Zabbix 服务端查看邮件:
[root@zabbix-server ~]# mail可收到主题为Problem: usercount_gt_50的告警邮件,输入邮件编号查看内容,按q退出。
6.3 解除告警(用户数 < 50)
批量删除测试用户,恢复正常状态:
# 批量删除 15 个测试用户[root@web1 ~]# for i in {1..15}>do>userdel-ruser$i>done# 验证用户总数低于 50[root@web1 ~]# wc -l /etc/passwd服务端会收到故障恢复的通知邮件。
三、Zabbix 主动监控
1. 主动监控与被动监控区别
两种模式针对被监控端 Agent划分,Zabbix 默认使用被动监控:
- 被动监控:Zabbix Server 主动连接 Agent 拉取数据,Agent 监听 10050 端口。
- 主动监控:Agent 主动连接 Zabbix Server 上报数据。
- 区别在于:Server 不需要每次都链接Agent,Agent会自己收集数据并处理,Server仅负责存储数据。大幅减轻了服务端压力。
- 适用场景:监控主机数量庞大时,推荐使用主动监控或分布式监控。
2. 配置 web2 为主动监控模式
修改web2的 Zabbix Agent 配置文件,关闭被动、开启主动监控:
[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf# 注释此行(被动监控的配置)113# Server=127.0.0.1,192.168.8.100#去掉注释,顶格写,将值改为0,标识关闭被动监控(主动监控没有端口)138StartAgents=0# 指定主动上报的 Zabbix 服务端地址+端口(服务端默认 10051)167ServerActive=192.168.8.100:10051#去掉注释顶格写,将值改为120,设置主动监控刷新时间238RefreshActiveChecks=120注意!主动监控与被动监控不能同时配置,二者的配置互相冲突,如果想要恢复被动监控依旧需要更改配置
重启 Agent 并验证
# 强制停止原有进程[root@web2 ~]# killall -9 zabbix_agentd# 启动 Agent(主动模式无 10050 端口)[root@web2 ~]# zabbix_agentd# 仅查看进程,无需查看 10050 端口[root@web2 ~]# ps aux | grep zabbix_agentd注意,这一步不要使用ss -ntulp去过滤端口了,主动监控是不经过10050端口的!所以只要ps命令来查看进程
3. Zabbix 服务端配置主动监控主机
- 路径:监测 --> 主机 --> 创建主机
- 主机参数配置:
- 主机名称:
web2(必须与 Agent 配置中Hostname完全一致) - 主机群组:
Linux servers - 模板:选择
Linux by Zabbix agent active(一定要指定主动监控专用模板) - 接口:不配置 Agent 接口(主动模式无需端口)
- 状态:已启用
- 主机名称:
- 保存后,主机列表中
web2标记为主动监控模式。
主动模式的Agent不再监听任何端口,本机没有端口等待外部连入
4. 验证主动监控数据
路径:监测 --> 最新数据,筛选主机web2,可正常查看各项监控指标、趋势图表,主动监控配置生效。
四、监控 Nginx 服务
1. 编译部署 Nginx(开启状态模块)
实验要求 Nginx 启用stub_status状态模块,web1主机操作:
1.1 安装依赖与编译 Nginx
将nginx-1.22.1.tar.gz上传至web1的/root目录:
# 安装编译依赖[root@web1 ~]# dnf -y install gcc pcre-devel openssl-devel make# 创建 Nginx 运行用户[root@web1 ~]# useradd nginx# 解压源码包[root@web1 ~]# tar -xf /root/nginx-1.22.1.tar.gz# 进入源码目录[root@web1 ~]# cd nginx-1.22.1# 编译配置:指定安装目录、运行用户、开启ssl与状态模块[root@web1 nginx-1.22.1]# ./configure \>--prefix=/usr/local/nginx\>--user=nginx\>--group=nginx\>--with-http_ssl_module --with-http_stub_status_module# 编译并安装[root@web1 nginx-1.22.1]# make && make install# 查看安装目录[root@web1 ~]# ls /usr/local/nginx1.2 修改 Nginx 配置,开启状态页面
# 编辑 Nginx 主配置文件[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf# 在 server 区块内添加如下配置location /status{stub_status on;# 开启状态统计模块}# 启动 Nginx 服务[root@web1 ~]# /usr/local/nginx/sbin/nginx# 验证 80 端口监听[root@web1 ~]# ss -nutlp | grep :801.3 访问状态页面 & 压力测试
(1)Zabbix 服务端访问 Nginx 状态页
[root@zabbix-server ~]# curl 192.168.8.101/status# 输出示例Active connections:1server accepts handled requests222Reading:0Writing:1Waiting:0(2)状态字段说明
Active connections:当前客户端与 Nginx 的总连接数 = Reading + Writing + Waitingaccepts:Nginx 启动后累计接收的客户端连接总数handled:Nginx 启动后累计处理的连接总数(通常与 accepts 一致)requests:Nginx 启动后累计处理的请求总数Reading:正在读取客户端请求的连接数Writing:正在向客户端返回响应的连接数Waiting:空闲等待新请求的连接数
(3)压力测试(提升访问量)
# 安装压测工具 ab[root@zabbix-server ~]# dnf -y install httpd-tools# 模拟 200 并发、总计 1000 次请求访问 Nginx[root@zabbix-server ~]# ab -n1000 -c200 http://192.168.8.101/2. 编写 Nginx 监控脚本
web1主机编写脚本,用于抓取 Nginx 状态数据:
# 创建脚本文件[root@web1 ~]# vim /usr/local/bin/nginx_status.sh#!/bin/bashcase$1inactive)curl-shttp://192.168.8.101/status|awk'/Active/{print $NF}';;waiting)curl-shttp://192.168.8.101/status|awk'/Waiting/{print $NF}';;accepts)curl-shttp://192.168.8.101/status|awk'NR==3{print $1}';;esac脚本授权与本地测试
# 添加执行权限[root@web1 ~]# chmod +x /usr/local/bin/nginx_status.sh# 测试:当前活跃连接数[root@web1 ~]# nginx_status.sh active# 测试:累计连接数[root@web1 ~]# nginx_status.sh accepts# 测试:空闲连接数[root@web1 ~]# nginx_status.sh waiting3. 配置 Zabbix Agent 自定义监控项
# 创建 Agent 子配置文件[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx_status.conf# 自定义监控项,支持传参UserParameter=nginx_status[*],/usr/local/bin/nginx_status.sh$1# 重启 Zabbix Agent[root@web1 ~]# killall -9 zabbix_agentd[root@web1 ~]# zabbix_agentd# 本地 zabbix_get 测试监控项[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[active][root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[accepts][root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[waiting]4. Zabbix 服务端创建 Nginx 监控模板与监控项
4.1 创建监控模板
路径:数据采集 --> 模板 --> 创建模板
- 模板名称:
Nginx_Monitor - 选择主机群组,保存模板。
4.2 在模板内创建监控项
进入Nginx_Monitor模板 -->监控项 --> 创建监控项,按需创建多个监控项:
- 监控项1:
- 名称:
nginx_accepts - 类型:Zabbix 客户端
- 键值:
nginx_status[accepts] - 信息类型:数字(无正负)
- 更新间隔:1m
- 名称:
- 监控项2:键值
nginx_status[active](监控活跃连接) - 监控项3:键值
nginx_status[waiting](监控空闲连接)
5. 模板关联主机 & 查看监控数据
5.1 关联模板
路径:数据采集 --> 主机 --> 选择 web1 --> 模板 --> 添加,选中Nginx_Monitor模板并保存。
5.2 查看监控数据
路径:监测 --> 最新数据,筛选主机web1,查看 Nginx 相关监控指标与趋势图表,数据正常采集即配置完成。
五、Zabbix 拓扑图
- 功能:通过拓扑图直观展示服务器架构、设备状态、链路关系。
- 入口:监测 --> 拓扑图,可创建新拓扑图、编辑已有拓扑。
- 基础操作:
- 添加拓扑元素(主机、图标);
- 选中两个设备,点击「链接」添加连线;
- 支持网格对齐、宏展开、尺寸调整等功能。
六、整体知识点总结
- 自动发现:解决大批量主机手动添加问题,流程为「创建发现规则 → 配置发现动作 → 自动加主机+关联模板」。
- 报警机制:自定义监控告警依赖触发器(阈值)+ 动作(执行行为),常用邮件告警,需配置邮件服务、告警媒介、用户收件地址。
- 主动/被动监控
- 被动:Server 主动拉取数据,Agent 监听 10050;
- 主动:Agent 主动上报数据,减轻服务端压力,适合大规模集群。
- Nginx 监控:编译 Nginx 开启
stub_status状态模块 → 编写采集脚本 → 配置 Agent 自定义监控项 → Zabbix 创建模板/监控项 → 关联主机查看数据。 - 拓扑图:可视化展示设备架构与运行状态,便于运维直观管理集群。
踩坑经历:使用kill强行杀死zabbix_agentd进程时可能会因为残留pid导致无法重启服务,此时有两种原因:
1,可能是pid文件残留
需要进入配置文件/usr/local/etc/zabbix_agentd.conf查找PidFile路径,删除/tmp/zabbix_agentd.pid文件即可
2,僵尸进程或残留子进程占用端口
使用:ps -elf | grep zabbix过滤查看是否有僵尸进程或残留子进程,若有,那么就用killall -9 批量强行杀死即可
