#Linux监控与安全Day02:Zabbix 自动发现,Zabbix 报警机制,Zabbix 主动监控,监控 Nginx 服务

一、Zabbix 自动发现

1. 自动发现概述

当需监控的设备数量增多,手动添加主机效率低下,可使用 自动发现(Discovery) 功能。

自动发现可实现:发现主机、添加主机、将主机加入指定主机组、链接模板等。

自动发现整体流程
  1. 创建自动发现规则
  2. 创建 Action 动作(定义发现主机后执行的操作)
  3. 通过动作自动完成添加主机、关联模板等行为

2. web2 被监控端部署(源码编译 Zabbix Agent)

2.1 环境准备与编译安装

zabbix-6.4.7.tar.gz 上传至虚拟机 web2/root 目录,执行如下命令:

bash 复制代码
# 安装编译依赖
[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/sbin
2.2 启动 Zabbix Agent 并配置开机自启
bash 复制代码
# 创建 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.local

3. Zabbix 服务端创建自动发现规则

  1. 路径:数据采集 --> 自动发现 --> 创建发现规则
  1. 规则参数配置:
    • 名称:web_discovery_rule
    • 代理程序:没有 agent 代理程序
    • IP 范围:192.168.8.105-120(可多个网段,逗号分隔)
    • 更新间隔:1m(实验环境修改为1分钟,默认1小时)
    • 设备唯一性准则:IP 地址
    • 可见名称:IP 地址
  • 检查类型选择:SSH(只要发现的主机有SSH 22端口即可)
  1. 保存并启用该发现规则。

4. Zabbix 服务端创建发现动作(Action)

  1. 路径:告警 --> 动作 --> 发现动作 --> 创建动作
  1. 基础配置:
    • 动作名称:web_discovery
    • 状态:已启用
  1. 添加触发条件:
    • 类型:主机 IP 地址
    • 运算符:等于
    • 匹配值:192.168.8.105-120(建议与发现规则的配置一致)
  1. 添加执行操作:
    1. 将发现的主机添加至 Linux servers 主机群组
    2. 为主机关联模板 Linux by Zabbix agent

添加至 Linux servers 主机群组

继续添加动作:

为主机关联模板 Linux by Zabbix agent

  1. 保存动作配置。

5. 验证与被监控端配置修复

5.1 查看主机列表

路径:监测 --> 主机 ,可看到自动发现的 web2 主机,此时主机状态为不可用

5.2 web2 修改 Agent 配置,放行 Zabbix 服务端
bash 复制代码
# 编辑 Zabbix Agent 主配置文件
[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
# 113行:指定允许连接的 Zabbix 服务端 IP
Server=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 :10050
5.3 最终验证

刷新 Zabbix 主机列表,web2 主机状态变为可用,自动发现功能生效。

二、Zabbix 报警机制

1. 报警机制基础说明

  1. 自定义监控项默认无自动报警,首页不会展示异常提示;系统自带模板默认配置告警。
  2. 实现自动告警必须配置 触发器 + 告警动作
    • 触发器(trigger):设定阈值表达式(如用户数大于50、内存低于300M),条件触发则生成事件,执行某个动作。
    • 动作(action):触发器触发后执行的行为,例如发送邮件、重启服务等。

2. 创建触发器

  1. 数据采集 --> 模板 --> 选择模板 Template_usercount --> 触发器 --> 创建触发器
  1. 触发器基础配置:

    • 名称:usercount_gt_50
    • 事件名称:usercount_gt_50
    • 严重性:告警

选择告警

  1. 表达式配置(阈值:用户总数大于50):
    • 监控项:选择模板内自定义的 usercount 监控项
    • 函数:last()(取最新数值)
    • 判断条件:last(/Template_usercount/usercount) > 50
  • 条件:自定义监控项的结果 大于50

点击插入

  1. 点击添加,启用触发器并保存。

3. 配置邮件告警媒介

3.1 启用 Email 媒介类型

路径:告警 --> 媒介 ,找到 Email 类型并启用,

配置参数:

  • SMTP 服务器:localhost(指定发送邮件的服务器,实际生产需指定专门的邮件服务器)
  • 发件人邮箱:tina@test.com

这里配置的EmailEmail (HTML)是用来设置网络邮箱地址的

3.2 为管理员用户绑定收件邮箱
  1. 用户 --> 选择 Admin 超级管理员 --> 报警媒介 --> 添加
  1. 媒介选择:Email
  2. 收件人:root@localhost.localdomain(管理员自己的个人邮箱)
  3. 生效时间:1-7,00:00-24:00,启用媒介并保存。

点击添加,点击更新

4. 创建触发器告警动作

  1. 路径:告警 --> 动作 --> 触发器动作 --> 创建动作
  1. 动作基础信息:
    • 名称:report_user
    • 状态:已启用
  1. 触发条件:选择触发器 Template_usercount 下的 usercount_gt_50

点击添加

  1. 操作配置:
    • 操作类型:发送消息
    • 接收用户:Admin(Zabbix Administrator)
    • 发送媒介:Email
    • 步骤持续时间:60秒

点击操作,点击添加:

  1. 保存动作。

5. Zabbix 服务端配置邮件服务

安装并启动 postfix 邮件服务与邮件客户端 mailx

bash 复制代码
# 安装邮件相关软件包postfix发送邮件 mailx查看邮件
[root@zabbix-server ~]# dnf -y install postfix mailx
# 启动服务并设置开机自启
[root@zabbix-server ~]# systemctl enable postfix --now
# 验证邮件服务 25 端口监听
[root@zabbix-server ~]# ss -nutlp | grep :25

6. 告警功能测试

6.1 制造告警(用户数 > 50)

web1 批量创建测试用户:

bash 复制代码
# 批量创建 15 个用户
[root@web1 ~]# for i in {1..15}
> do
>    useradd  user$i
> done
# 查看系统总用户数,确认超过 50
[root@web1 ~]# wc -l  /etc/passwd
6.2 查看告警邮件

在 Zabbix 服务端查看邮件:

bash 复制代码
[root@zabbix-server ~]# mail

可收到主题为 Problem: usercount_gt_50 的告警邮件,输入邮件编号查看内容,按 q 退出。

6.3 解除告警(用户数 < 50)

批量删除测试用户,恢复正常状态:

bash 复制代码
# 批量删除 15 个测试用户
[root@web1 ~]# for i in {1..15}
> do
>    userdel   -r  user$i
> done
# 验证用户总数低于 50
[root@web1 ~]# wc -l  /etc/passwd

服务端会收到故障恢复的通知邮件。

三、Zabbix 主动监控

1. 主动监控与被动监控区别

两种模式针对被监控端 Agent 划分,Zabbix 默认使用被动监控

  1. 被动监控:Zabbix Server 主动连接 Agent 拉取数据,Agent 监听 10050 端口。
  2. 主动监控 :Agent 主动连接 Zabbix Server 上报数据。
    • 区别在于:Server 不需要每次都链接Agent,Agent会自己收集数据并处理,Server仅负责存储数据。大幅减轻了服务端压力。
  3. 适用场景:监控主机数量庞大时,推荐使用主动监控或分布式监控。

2. 配置 web2 为主动监控模式

修改 web2 的 Zabbix Agent 配置文件,关闭被动、开启主动监控:

bash 复制代码
[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
# 注释此行(被动监控的配置)
113#  Server=127.0.0.1,192.168.8.100    

#去掉注释,顶格写,将值改为0,标识关闭被动监控(主动监控没有端口)
138 StartAgents=0             


# 指定主动上报的 Zabbix 服务端地址+端口(服务端默认 10051)
167 ServerActive=192.168.8.100:10051

#去掉注释顶格写,将值改为120,设置主动监控刷新时间
238 RefreshActiveChecks=120
重启 Agent 并验证
bash 复制代码
# 强制停止原有进程
[root@web2 ~]# killall -9 zabbix_agentd
# 启动 Agent(主动模式无 10050 端口)
[root@web2 ~]# zabbix_agentd
# 仅查看进程,无需查看 10050 端口
[root@web2 ~]# ps aux | grep zabbix_agentd

3. Zabbix 服务端配置主动监控主机

  1. 路径:监测 --> 主机 --> 创建主机
  1. 主机参数配置:
    • 主机名称:web2(必须与 Agent 配置中 Hostname 完全一致)
    • 主机群组:Linux servers
    • 模板:选择 Linux by Zabbix agent active(一定要指定主动监控专用模板)
    • 接口:不配置 Agent 接口(主动模式无需端口)
    • 状态:已启用
  1. 保存后,主机列表中 web2 标记为主动监控模式。

主动模式的Agent不再监听任何端口,本机没有端口等待外部连入

4. 验证主动监控数据

路径:监测 --> 最新数据 ,筛选主机 web2,可正常查看各项监控指标、趋势图表,主动监控配置生效。

四、监控 Nginx 服务

1. 编译部署 Nginx(开启状态模块)

实验要求 Nginx 启用 stub_status 状态模块,web1 主机操作:

1.1 安装依赖与编译 Nginx

nginx-1.22.1.tar.gz 上传至 web1/root 目录:

bash 复制代码
# 安装编译依赖
[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/nginx
1.2 修改 Nginx 配置,开启状态页面
bash 复制代码
# 编辑 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 :80
1.3 访问状态页面 & 压力测试
(1)Zabbix 服务端访问 Nginx 状态页
bash 复制代码
[root@zabbix-server ~]# curl 192.168.8.101/status
# 输出示例
Active connections: 1
server accepts handled requests
 2 2 2
Reading: 0 Writing: 1 Waiting: 0
(2)状态字段说明
  • Active connections:当前客户端与 Nginx 的总连接数 = Reading + Writing + Waiting
  • accepts:Nginx 启动后累计接收的客户端连接总数
  • handled:Nginx 启动后累计处理的连接总数(通常与 accepts 一致)
  • requests:Nginx 启动后累计处理的请求总数
  • Reading:正在读取客户端请求的连接数
  • Writing:正在向客户端返回响应的连接数
  • Waiting:空闲等待新请求的连接数
(3)压力测试(提升访问量)
bash 复制代码
# 安装压测工具 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 状态数据:

bash 复制代码
# 创建脚本文件
[root@web1 ~]# vim /usr/local/bin/nginx_status.sh
#!/bin/bash
case $1 in
active)
    curl -s http://192.168.8.101/status | awk '/Active/{print $NF}';;
waiting)
    curl -s http://192.168.8.101/status | awk '/Waiting/{print $NF}';;
accepts)
    curl -s http://192.168.8.101/status | awk 'NR==3{print $1}';;
esac
脚本授权与本地测试
bash 复制代码
# 添加执行权限
[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 waiting

3. 配置 Zabbix Agent 自定义监控项

bash 复制代码
# 创建 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. 监控项1:
    • 名称:nginx_accepts
    • 类型:Zabbix 客户端
    • 键值:nginx_status[accepts]
    • 信息类型:数字(无正负)
    • 更新间隔:1m
  2. 监控项2:键值 nginx_status[active](监控活跃连接)
  3. 监控项3:键值 nginx_status[waiting](监控空闲连接)

5. 模板关联主机 & 查看监控数据

5.1 关联模板

路径:数据采集 --> 主机 --> 选择 web1 --> 模板 --> 添加 ,选中 Nginx_Monitor 模板并保存。

5.2 查看监控数据

路径:监测 --> 最新数据 ,筛选主机 web1,查看 Nginx 相关监控指标与趋势图表,数据正常采集即配置完成。

五、Zabbix 拓扑图

  1. 功能:通过拓扑图直观展示服务器架构、设备状态、链路关系。
  2. 入口:监测 --> 拓扑图,可创建新拓扑图、编辑已有拓扑。
  3. 基础操作:
    • 添加拓扑元素(主机、图标);
    • 选中两个设备,点击「链接」添加连线;
    • 支持网格对齐、宏展开、尺寸调整等功能。

六、整体知识点总结

  1. 自动发现:解决大批量主机手动添加问题,流程为「创建发现规则 → 配置发现动作 → 自动加主机+关联模板」。
  2. 报警机制 :自定义监控告警依赖 触发器(阈值)+ 动作(执行行为),常用邮件告警,需配置邮件服务、告警媒介、用户收件地址。
  3. 主动/被动监控
    • 被动:Server 主动拉取数据,Agent 监听 10050;
    • 主动:Agent 主动上报数据,减轻服务端压力,适合大规模集群。
  4. Nginx 监控 :编译 Nginx 开启 stub_status 状态模块 → 编写采集脚本 → 配置 Agent 自定义监控项 → Zabbix 创建模板/监控项 → 关联主机查看数据。
  5. 拓扑图:可视化展示设备架构与运行状态,便于运维直观管理集群。.1
相关推荐
zyplayer-doc1 小时前
知识库官方CLI工具已发布并开源,以及重写思维导图编辑器,提供更完整的编辑能力,zyplayer-doc 2.6.6 发布啦!
人工智能·安全·pdf·编辑器·创业创新
gis分享者1 小时前
Linux 网络层 IP 协议与网段划分实战指南
linux·运维·tcp/ip
加油码1 小时前
Linux 信号详解:从 Ctrl+C 到进程异常退出,真正理解信号机制
linux·服务器·c++
keyipatience1 小时前
27,28,29进程通信和匿名管道详解
linux·ubuntu·centos
勇宝趣学前端1 小时前
RustDesk 私有远程控制服务器部署
运维·服务器
Urbano1 小时前
工装外套标准化生产全工艺解析——关键工序、增产逻辑与自动化设备科普
运维·自动化
Jtti1 小时前
怎么判断攻击者主要在打高防服务器哪个端口或协议
运维·服务器·网络
老高学长1 小时前
记录电脑使用痕迹的软件哪款好?硬核上网行为审计软件分享,2026精品
网络·安全·电脑
羑悻的小杀马特1 小时前
拆解下一代LLMOps:从“能用”到“好用”,中间只隔了一个智能路由!
人工智能·docker·自动化·agent