#Linux监控与安全Day02:Zabbix 自动发现,Zabbix 报警机制(邮箱),Zabbix 主动监控,监控 Nginx 服务
一、Zabbix 自动发现1. 自动发现概述当需监控的设备数量增多手动添加主机效率低下可使用自动发现Discovery功能。自动发现可实现发现主机、添加主机、将主机加入指定主机组、链接模板等。自动发现整体流程创建自动发现规则创建Action 动作定义发现主机后执行的操作通过动作自动完成添加主机、关联模板等行为2. web2 被监控端部署源码编译 Zabbix Agent2.1 环境准备与编译安装将zabbix-6.4.7.tar.gz上传至虚拟机web2的/root目录执行如下命令# 安装编译依赖[rootweb2 ~]# dnf -y install gcc make pcre-devel autoconf# 解压源码包[rootweb2 ~]# tar -xf zabbix-6.4.7.tar.gz# 进入解压目录[rootweb2 ~]# cd zabbix-6.4.7/# 配置编译参数仅开启 Agent 功能[rootweb2 zabbix-6.4.7]# ./configure --enable-agent# 编译并安装[rootweb2 zabbix-6.4.7]# make install# 查看安装生成目录[rootweb2 ~]# ls /usr/local/etc[rootweb2 ~]# ls /usr/local/bin[rootweb2 ~]# ls /usr/local/sbin2.2 启动 Zabbix Agent 并配置开机自启# 创建 Zabbix 运行用户禁止登录系统[rootweb2 zabbix-6.4.7]# useradd -s /sbin/nologin zabbix# 启动 Zabbix 客户端服务[rootweb2 zabbix-6.4.7]# zabbix_agentd# 查看 10050 监听端口Zabbix Agent 默认端口[rootweb2 zabbix-6.4.7]# ss -nutlp | grep :10050# 配置开机自启将启动命令写入 rc.local[rootweb2 ~]# echo zabbix_agentd /etc/rc.d/rc.local# 赋予 rc.local 执行权限[rootweb2 ~]# 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 主配置文件[rootweb2 ~]# vim /usr/local/etc/zabbix_agentd.conf# 113行指定允许连接的 Zabbix 服务端 IPServer127.0.0.1,192.168.8.100# 178行设置本机主机名与 Zabbix 页面保持一致Hostnameweb2# 强制停止原有 Agent 进程[rootweb2 ~]# killall -9 zabbix_agentd# 重新启动 Agent[rootweb2 ~]# zabbix_agentd# 验证 10050 端口监听[rootweb2 ~]# 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指定发送邮件的服务器实际生产需指定专门的邮件服务器发件人邮箱tinatest.com这里配置的EmailEmail (HTML)是用来设置网络邮箱地址的3.2 为管理员用户绑定收件邮箱用户 -- 选择 Admin 超级管理员 -- 报警媒介 -- 添加媒介选择Email收件人rootlocalhost.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查看邮件[rootzabbix-server ~]# dnf -y install postfix mailx# 启动服务并设置开机自启[rootzabbix-server ~]# systemctl enable postfix --now# 验证邮件服务 25 端口监听[rootzabbix-server ~]# ss -nutlp | grep :256. 告警功能测试6.1 制造告警用户数 50在web1批量创建测试用户# 批量创建 15 个用户[rootweb1 ~]# for i in {1..15}douseradduser$idone# 查看系统总用户数确认超过 50[rootweb1 ~]# wc -l /etc/passwd6.2 查看告警邮件在 Zabbix 服务端查看邮件[rootzabbix-server ~]# mail可收到主题为Problem: usercount_gt_50的告警邮件输入邮件编号查看内容按q退出。6.3 解除告警用户数 50批量删除测试用户恢复正常状态# 批量删除 15 个测试用户[rootweb1 ~]# for i in {1..15}douserdel-ruser$idone# 验证用户总数低于 50[rootweb1 ~]# wc -l /etc/passwd服务端会收到故障恢复的通知邮件。三、Zabbix 主动监控1. 主动监控与被动监控区别两种模式针对被监控端 Agent划分Zabbix 默认使用被动监控被动监控Zabbix Server 主动连接 Agent 拉取数据Agent 监听 10050 端口。主动监控Agent 主动连接 Zabbix Server 上报数据。区别在于Server 不需要每次都链接AgentAgent会自己收集数据并处理Server仅负责存储数据。大幅减轻了服务端压力。适用场景监控主机数量庞大时推荐使用主动监控或分布式监控。2. 配置 web2 为主动监控模式修改web2的 Zabbix Agent 配置文件关闭被动、开启主动监控[rootweb2 ~]# vim /usr/local/etc/zabbix_agentd.conf# 注释此行被动监控的配置113# Server127.0.0.1,192.168.8.100#去掉注释顶格写将值改为0标识关闭被动监控主动监控没有端口138StartAgents0# 指定主动上报的 Zabbix 服务端地址端口服务端默认 10051167ServerActive192.168.8.100:10051#去掉注释顶格写将值改为120设置主动监控刷新时间238RefreshActiveChecks120注意主动监控与被动监控不能同时配置二者的配置互相冲突如果想要恢复被动监控依旧需要更改配置重启 Agent 并验证# 强制停止原有进程[rootweb2 ~]# killall -9 zabbix_agentd# 启动 Agent主动模式无 10050 端口[rootweb2 ~]# zabbix_agentd# 仅查看进程无需查看 10050 端口[rootweb2 ~]# 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目录# 安装编译依赖[rootweb1 ~]# dnf -y install gcc pcre-devel openssl-devel make# 创建 Nginx 运行用户[rootweb1 ~]# useradd nginx# 解压源码包[rootweb1 ~]# tar -xf /root/nginx-1.22.1.tar.gz# 进入源码目录[rootweb1 ~]# cd nginx-1.22.1# 编译配置指定安装目录、运行用户、开启ssl与状态模块[rootweb1 nginx-1.22.1]# ./configure \--prefix/usr/local/nginx\--usernginx\--groupnginx\--with-http_ssl_module --with-http_stub_status_module# 编译并安装[rootweb1 nginx-1.22.1]# make make install# 查看安装目录[rootweb1 ~]# ls /usr/local/nginx1.2 修改 Nginx 配置开启状态页面# 编辑 Nginx 主配置文件[rootweb1 ~]# vim /usr/local/nginx/conf/nginx.conf# 在 server 区块内添加如下配置location /status{stub_status on;# 开启状态统计模块}# 启动 Nginx 服务[rootweb1 ~]# /usr/local/nginx/sbin/nginx# 验证 80 端口监听[rootweb1 ~]# ss -nutlp | grep :801.3 访问状态页面 压力测试1Zabbix 服务端访问 Nginx 状态页[rootzabbix-server ~]# curl 192.168.8.101/status# 输出示例Active connections:1server accepts handled requests222Reading:0Writing:1Waiting:02状态字段说明Active connections当前客户端与 Nginx 的总连接数 Reading Writing WaitingacceptsNginx 启动后累计接收的客户端连接总数handledNginx 启动后累计处理的连接总数通常与 accepts 一致requestsNginx 启动后累计处理的请求总数Reading正在读取客户端请求的连接数Writing正在向客户端返回响应的连接数Waiting空闲等待新请求的连接数3压力测试提升访问量# 安装压测工具 ab[rootzabbix-server ~]# dnf -y install httpd-tools# 模拟 200 并发、总计 1000 次请求访问 Nginx[rootzabbix-server ~]# ab -n1000 -c200 http://192.168.8.101/2. 编写 Nginx 监控脚本web1主机编写脚本用于抓取 Nginx 状态数据# 创建脚本文件[rootweb1 ~]# 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|awkNR3{print $1};;esac脚本授权与本地测试# 添加执行权限[rootweb1 ~]# chmod x /usr/local/bin/nginx_status.sh# 测试当前活跃连接数[rootweb1 ~]# nginx_status.sh active# 测试累计连接数[rootweb1 ~]# nginx_status.sh accepts# 测试空闲连接数[rootweb1 ~]# nginx_status.sh waiting3. 配置 Zabbix Agent 自定义监控项# 创建 Agent 子配置文件[rootweb1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx_status.conf# 自定义监控项支持传参UserParameternginx_status[*],/usr/local/bin/nginx_status.sh$1# 重启 Zabbix Agent[rootweb1 ~]# killall -9 zabbix_agentd[rootweb1 ~]# zabbix_agentd# 本地 zabbix_get 测试监控项[rootweb1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[active][rootweb1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[accepts][rootweb1 ~]# 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 批量强行杀死即可