Zabbix 企业级高级应用
资源清单
操作系统 配置 主机名 IP 角色 openEuler 24.03 2C4G zabbix 192.168.10.108 Zabbix 服务端 openEuler 24.03 2C4G server01 192.168.10.101 被监控节点 openEuler 24.03 2C4G server02 192.168.10.102 被监控节点 一、自动发现
Zabbix 网络自动发现是一个非常强大的功能,利用该功能可以完成以下工作。
加快部署速度
简化管理
在快速变化的环境中避免过度管理网络自动发现基于以下信息:
IP 地址范围
可用的外部服务(FTP,SSH,WEB,POP3,IMAP,TCP 等)
来自 Zabbix agent 的信息 (仅支持未加密模式)
来自 SNMP agent 的信息
在进行网络自动发现的过程中,涉及到的主要工作流程有 Discovery(发现)和 Action(动作),
虽然网络自动发现能够帮助运维人员实现自动化的管理任务,但是网络自动发现无法实现网络拓扑的自动发现。
网络发现的流程
内容分类 具体说明 网络发现 网络发现模块每次检测到服务和主机(IP)都会生成一个发现事件 执行动作 所有动作都是基于发现事件的,基于事件的网络发现动作,可根据设备类型、IP 地址、状态、运行时间等进行配置 创建主机 可在执行动作过程中选择添加主机操作,包括添加主机至主机组、将主机链接到模板等 移除主机 从 Zabbix 2.4.0 开始,若已发现的实体不在自动发现规则的 IP 范围内,由网络发现规则创建的主机将会被自动删除 1、部署agent
(1) 添加zabbix源
dnf -y install zabbix-release-latest-6.4.el9.noarch.rpm dnf clean all dnf makecache
(2) 安装软件包
dnf -y install zabbix-agent
(3) 配置agent
192.168.10.101
Server=192.168.10.108 ServerActive=192.168.10.108 Hostname=server01
192.168.10.102
Server=192.168.10.108 ServerActive=192.168.10.108 Hostname=server02
(4) 启动服务
systemctl start zabbix-agent systemctl enable zabbix-agent
2、创建发现规则
注意:自动发现规则的每次扫描都会产生事件,如果配置了 1000 个 IP,那么每次都会产生 1000 个事件,需要注意数据库的资源消耗,生产环境中不宜扫描太频繁。
该页面共有 9 项设置,含义如下。
(1)名称:网络发现规则的名称
(2)有 agent 代理程序自动发现:
此处有两个选择 march 如果选择 No proxy,那么这条规则将会由 Zabbix
server 发起:如果选择某个 Zabbix proxy,那么此条规则将由指定的这台 Zabbix proxy 执行。(3) IP 范围:
网络探测的扫描范围。可以书写的格式有四种
单个 IP 地址:192.168.207.138
IP 地址范围:192.168.207.1-255
IP 子网掩码范围:192.168.207.0/24
列表:192.168.207.138、192.168.207.139、192.168.4.0/24(4) 更新间隔:
定义 Zabbix 执行规则的频率。
(5) 检查:
自动发现的网络扫描方式,参数设置如下
(6) 设备唯一性准则:
设备唯一标识,自动发现的清单将会以前面配置的某一项作为唯一性标识,防止重复发现。
(7) 主机名称
(8) 可见的名称
(9) 已启用
3、创建自动发现
(1) 创建规则
(2) 创建动作
(3) 添加触发条件
(4) 添加操作
(5) 验证
(6) 主机名称用 hostnamectl 命令设置的的主机名
vim /etc/zabbix/zabbix_agentd.confsystemctl restart zabbix-agent
修改发现规则
验证
二、自动注册
1、添加自动注册
自动发现是实现自动添加 agent 端的一种办法,大大减轻了运维人员的劳动量,但是,如果我们不知道 agent 端的地址等信息,自动发现就无法实现了,因为要设置一个 IP 地址范围,网络自动发现需要扫描这个 IP 地址段。
自动注册是指 Agent 主动且自动的向 Server 发起注册请求,与自动发现的功能一样,但是自动注册适用于特定的场景,如果某个条件未知(如 agent 的 ip 地址段,操作系统版本等,自动发现需要知道这些信息),此时就无法适用自动发现了;但是 zabbix server 的地址是已知的,所以可以让 agent 主动发起请求,实现主机自动添加到 zabbix 中。
Zabbix 的自动注册对于 agent 是主动模式,Zabbix agent 会主动上报自己的信息,发给 zabbix server。
但是在 agent2 的版本中,对应的是 agent2 的被动模式,缺点是可能因为配置文件配置错误或者网络不通等原因导致 Zabbix agent2 可能找不到 Zabbix server。
(1) 创建动作
(2) 添加触发条件
(3) 添加操作
(4) 验证
三、监控应用服务
Zabbix 基本上能监控所有的服务,这里我们以 nginx 服务为例
Nginx 作为一种高性能的 Web 服务器和反向代理服务器,广泛应用于网站的负载均衡、静态资源处理、反向代理等场景。为了确保 Nginx 能够稳定、可靠地运行,及时了解其性能和健康状态非常重要。Zabbix 作为一款强大的开源监控工具,能够帮助我们对 Nginx 进行全面的监控。
监控目的 具体说明 性能瓶颈排查 通过监控 Nginx 的各种性能指标(如请求数、响应时间等 ),帮助排查服务瓶颈,优化系统性能 故障预警 及时检测到 Nginx 服务故障,防止影响用户正常访问 资源利用率 监控 Nginx 的 CPU、内存使用率等,防止资源过载 负载均衡效果 Nginx 作为负载均衡器时,监控其流量分配情况,帮助发现可能的负载不均问题 三、监控应用服务
1、部署 Nginx
(1) 安装依赖环境
#提供编译安装的环境 dnf -y install gcc zlib-devel pcre-devel
(2) 创建程序用户
useradd -M -s /sbin/nologin nginx
(3) 编译安装 Nginx
#解压 tar zxf nginx-1.26.3_http_proxy.tar.gzcd nginx-1.26.3#配置 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module#编译 make#编译安装 make install#做软连接 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
(4) 启动服务
nginx -t nginx
2、监控Nginx哪些指标
使用 zabbix 监控 Nginx 的时候我们要明确都监控哪些指标,一般来说重点关注连接数、请求处理、性能、资源使用等方面的指标,以确保 Nginx 的稳定性和性能。这些指标有 zabbix 本身就可以监控到的,有些是需要借助自定义 key 来实现的。
(1) 什么是 key
Zabbix 中内置了很多监控参数(Key),我们可以通过在客户端配置文件中定义 key,获取监控对象中的系统、CPU、网络、内存、文件系统等信息。
Key(键)是 zabbix 标记 item 的键,是一种标识符。利用 key 可以定义一个监控对象,那么这个监控对象肯定是采集数据的,当时采集数据的时候可能存在很多节点与 server 交互,那么需要具体哪个采集节点,就可以用 key 进行采集。
使用 zabbix agent 自带的 key 值,我们已经可以监控到很多数据了,但是仍然有一些数据,是 agent 的 key 值没有的。对于这些特殊的需求,就要求我们自己定义 key 值。
(2) 添加监控脚本
通过 Nginx 的状态统计模块获取 nginx 相关信息
vim /usr/local/nginx/conf/nginx.conf###编辑内容### location /nginx_status {stub_status on; access_log off;}
(3) 访问测试
curl 192.168.10.101/nginx_status
类别 描述 具体数值 / 状态 Active connections Nginx 正处理的活动链接数 1 个 server - accepts Nginx 启动到现在共处理的连接数 16449 个 server - handled Nginx 启动到现在共成功创建的握手次数 16449 次 server - requests Nginx 总共处理的请求次数 15422 次 Reading Nginx 读取到客户端的 Header 信息数 无具体数值,为概念描述 Writing Nginx 返回给客户端的 Header 信息数 无具体数值,为概念描述 Waiting Nginx 已处理完正等候下一次请求指令的驻留链接状态 开启 (4) 编辑脚本文件
vim /etc/zabbix/nginx-status.sh
#!/bin/bash NGINX_PORT=80 NGINX_COMMAND=$1 nginx_active(){ /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}' } nginx_reading(){ /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}' } nginx_writing(){ /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}' } nginx_waiting(){ /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}' } nginx_accepts(){ /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}' } nginx_handled(){ /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}' } nginx_requests(){ /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}' } case $NGINX_COMMAND in active) nginx_active; ;; reading) nginx_reading; ;; writing) nginx_writing; ;; waiting) nginx_waiting; ;; accepts) nginx_accepts; ;; handled) nginx_handled; ;; requests) nginx_requests; ;; *) echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}" esac
(5) 授权
chmod +x /etc/zabbix/nginx-status.sh
(6) 测试
cd /etc/zabbix/ ./nginx-status.sh active
(7) 修改配置文件开启自定义key
vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1 UserParameter=nginx_status[*],/etc/zabbix/nginx-status.sh $1
(8) 重启服务
systemctl restart zabbix-agent
备注:
UnsafeUserParameters=1:启用自定义 key 功能
UserParameter:指定脚本
nginx_status 为 key 值名称。[*] 里写脚本参数,没有可以不写。/etc/zabbix/nginx-status.sh
$1 路径为脚本所在路径(9) 测试
dnf -y install zabbix-get
zabbix_get -s 192.168.10.101 -k nginx_status[accepts]
zabbix_get -s 192.168.10.101 -k nginx_status[active]
3、Zabbix Web 端添加监控
(1) 添加模板
“数据采集”-->“模板”-->“创建模板”,创建一个名为 Nginx-status 的模板
(2) 添加监控项
点击 “数据采集”,再点击 “模板” 选项后,找到刚刚创建名为 Nginx-status 的模板,点击 “监控项” 后,再点击 “创建监控项” 按钮,创建出如下监控项。
监控项 键值为 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] nginx proc proc.num[nginx] nginx fs vfs.fs.size[/,pfree]
(3) 添加触发器
(4) 添加条件表达式
应用模板
四、zabbix 实现邮件报警
在日常的 IT 运维过程中,我们时常要关注各个设备和系统的运行情况,但是,我们不希望一直盯着触发器或者事件列表,这样我们就没有空闲时间去处理其他工作。那么能不能让我们摆脱这种束缚,无论我们在什么地方,在发生比较严重的事情的时候能够自动的接收到通知。并且,当发生问题时,我们希望所有相关人员都能收到通知。
也就是说,当配置的监控超过触发器设定的阈值则触发某种动作,而这个动作可以是发送告警信息的动作。那么 Zabbix 在监控到异常之后,就能够自动的触发一个告警信息发给我们,或发送给整个运维团队。
自定义的监控项默认不会自动报警,首页也不会提示错误,需要配置触发器与报警动作才可以自动报警。触发器本质就是一个条件判断,对于不同的监控数据来说,我们要给他设置不同的触发器,比如监控内存,当内存小于 500M,就满足判断条件,触发报警,并可以执行报警动作。
1、实现报警所需的条件
(1) 告警媒介
要想让 Zabbix 把告警信息发送出去,就要有一个接收信息的媒介,目前我们常见的告警媒介有邮箱、钉钉、企业微信等。
(2) 触发器(trigger):
触发器实际是一个条件判断表达式,如判断内存不足 300M,用户超过 30 个等;当触发条件发生后,会导致一个触发事件,触发事件会执行某个动作。
(3) 动作(action):
触发器的条件被触发后的行为;可以是发送邮件、也可以是重启某个服务等。
2、配置告警媒介
(1) 设置告警媒介参数
“告警”-->“媒介”--> 选择 Email
注意:在设置认证时,密码的位置要使用邮箱的授权码,而不是密码,设置完后点击更新,注意要启用 Email 媒介
(2) 启用此媒介并测试邮件发送
(3) 设置用户报警媒介
“用户”--> 选 Admin,添加用户的报警媒介
(4) 设置动作
添加动作
“告警”-->“动作”-->“触发器动作”--> 创建动作
条件使用 “触发器”,并选择对应的主机(或主机组),勾选对应的触发器。
筛选指定触发条件
添加操作
(5) 创建图形
(6) 编辑网页做测试
echo "1111">/usr/local/nginx/html/index.html
(7) 在测试主机上访问网站
while true;do curl 192.168.10.101;done
(8) 查看图像并关注邮箱信件
(9) 终止访问
(10) 查看图像并关注邮箱