💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
3.1 案例分析
3.1.1 案例概述
现阶段公司有很多服务,包括 Nginx-LB、MySQL 主从等一些重要的服务,Zabbix 自
带 key 值不能满足现有的业务,所以需要添加自定义 key 值来监控 Nginx 关键词检索、
MySQL 主从状态,并把服务的工作状态添加进邮件就能够邮件报警及时发现问题。
3.1.2 案例前置知识点
本案例主要介绍 Zabbix 的自定义 key 值来监控服务状态。
1. Zabbix 自定义 key 值
Zabbix 有很多自带的 item key,但是自带的 key 值不能满足工作中其他重要的业务需
求,例如:MySQL 主从、Nginx 详细状态等业务的监控。
自 定 义 key 值 监 控 项 需 要 在 Agent 端 开 启 UnsafeUserParameters 参 数 、 在
UserParameter 参数中定义参数类型中指定脚本或直接填写 shell 命令,并在 Web 管理界
面创建模板,添加监控项及触发器,再关联到主机来达到监控服务的效果。
2. 触发器
Zabbix 触发器作用是监控服务报警。当服务达到自定义的值时,触发设定的警告,从
而实现邮件报警等操作。
3. 监控网站关键词
在生产环境中可能有论坛或者首页上出现违反国家网络信息安全规定的词语,例如黄赌
毒等词语。为了避免这些违法事情发生,需要运维人员定义关键词检索,及时发现并处理。
3.1.3 案例环境
1. 本案例环境
本案例环境如表 3-1 所示。
表 3-1 本案例的实验环境
主机 | 操作系统 | 主机名/IP 地址 | 主要软件及版本 |
服务器 | CentOS 7.3 | zabbix/192.168.9.168 | Zabbix-Server |
服务器 | CentOS 7.3 | mysql/192.168.9.237 | Zabbix-Agent、MySQL |
服务器 | CentOS 7.3 | nginx/192.168.9.229 | Zabbix-Agent、Nginx、MySQL |
2. 案例拓扑图
本案例实验使用的服务器之间关系,如图 3.1 所示。
图 3.1 案例拓扑图
3. 案例需求
(1)创建自定义 key 值监控项。
(2)使用 Zabbix 监控 MySQL 主从状态。
(3)创建报警触发器。
(4)使用 Zabbix 监控网站关键词。
4. 案例实现思路
(1)安装 Zabbix。
(2)自定义 key 值监控项。
(3)添加 MySQL 主从状态监控项。
(4)创建报警触发器。
(5)利用 Zabbix 监控网站关键词。
3.2 案例实施
完成本案例,需要在 Agent 端开启自定义 key 值,添加被监控模块,添加监控脚本,然
后在 Server 端执行测试,并完成 key 值相关配置。
3.2.1 Zabbix 自定义 key 值
自定义 key 值是在 Zabbix-Agent 端操作,本案例服务器需要将 Zabbix-Server 服务端、
Zabbix-Agent 客户端软件安装到服务端,并且自定义监控 Nginx 服务。所需软件安装方法
在之前章节都有讲解,这里不再赘述。
1. 客户端开启自定义 key 值
使用自定义 key 值需要在 Agent 端开启支持。
[root@nginx ~]# vim /etc/zabbix/zabbix_agentd.conf
...略...
UnsafeUserParameters=1
//去除#号设置值为 1,开启
...略...
UserParameter=nginx_status[*],/etc/zabbix/nginx-status.sh $1
//去掉注释#号,添写自定义脚本
路径,nginx_status 为 key 值名称。[*]里写脚本参数,没有可以不写。/etc/zabbix/nginx-status.sh $1
路径为脚本所在路径
2. 添加 Nginx 模块支持
下面添加 Nginx 的状态模块和访问权限。
[root@nginx ~]# vim /etc/nginx/nginx.conf
...略...
location /nginx_status {
//添加 nginx 状态模块
stub_status on;
access_log off;
allow 192.168.9.0/24;
//添加权限
allow 127.0.0.1;
deny all;
}
...略...
[root@nginx ~]# nginx –t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx ~]# systemctl restart nginx
3. 测试是否能够获取到 Nginx 状态
执行如下命令测试是否能获取到 Nginx 的状态。
[root@nginx ~]# curl http://127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
16449 16449 15422
Reading: 0 Writing: 1 Waiting: 0
执行以上命令得到握手数(handled)为 16449,接受连接数(accepts)为 16449,
因此,请求丢失数=(握手数-接受连接数)=16449-16449=0,可以看出本次状态显示没有丢
失请求。
上述命令执行结果中,可以获得对 Nginx 状态的解释如下:
Active connections
Nginx 正处理的活动链接数 1 个。
server
Nginx 启动到现在共处理了 16449 个连接。
accepts
Nginx 启动到现在共成功创建 16449 次握手。
handled requests
Nginx 总共处理了 15422 次请求。
Reading
Nginx 读取到客户端的 Header 信息数。
Writing
Nginx 返回给客户端的 Header 信息数。
Waiting
Nginx 已经处理完正在等候下一次请求指令的驻留链接,开启。
4. 添加监控脚本
在之前 zabbix_agentd.conf 中指定的路径下,创建 Nginx 状态监控脚本文件,用来监
控 Nginx 工作状态。Shell 脚本在之前章节有介绍,这里不再赘述脚本含义。
[root@nginx ~]# 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;
;;
第 7 页 共 27 页requests)
nginx_requests;
;;
*)
echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
esac
执行完上面配置后,重启 Zabbix-Agent,命令如下:
[root@nginx ~]# systemctl restart zabbix-agent
5. Zabbix_get 测试
重启 Zabbix-Agent,并在 Server 端使用 Zabbix_get 测试。
[root@nginx ~]# chmod +x /etc/zabbix/nginx-status.sh
[root@zabbix ~]# zabbix_get -s 192.168.9.229 -k nginx_status
USAGE:/etc/zabbix/nginx-status.sh {active|reading|writing|waiting|accepts|handled|requests}
//由于脚本中定义了参数,所以在测试的时候需要加入参数
[root@zabbix ~]#zabbix_get -s 192.168.9.229 -k nginx_status[accepts]
16733
6. Zabbix Web 端添加监控
登录 Zabbix 的 Web 界面,点击“配置”按钮,再点击“模板”选项,然后点击“创建
模板”按钮后,弹出如图 3.2 所示界面。在此界面下,创建一个名为 Nginx 状态的模板,并
把需要监控的主机添加进去,输入模板名称,再输入可见的名称,添加被监控的组和主机,
完成模板创建。
图 3.2 配置模板信息
创建模板后添加监控项,点击“配置”,再点击“模板”选项后,找到刚刚创建名为 Nginx
状态的模板,点击“监控项”后,再点击“创建监控项”按钮,如图 3.3 所示。
图 3.3 创建监控项
添加监控项名称“nginx active”,再输入键值“nginx_status[active]”,如图 3.4 所示。
图 3.4 创建 nginx 监控项
然 后 , 把 剩 余 监 控 项 按 照 上 面 方 法 添 加 , 监 控 项 “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]”,如图 3.5 所示。
图 3.5 创建 nginx 监控项 2
7. 验证自定义监控
点击“监测中”按钮,点击“最新数据”选项。在名称中输入“Nginx”,点击“应用”按钮检索,
可以看到刚刚添加的 7 个 Nginx 监控项,如图 3.6 所示。
图 3.6 检索 nginx 监控项
点击图 3.6 中右侧的“图形”选项,即可看到图形化展示的数据,如图 3.7 所示。
图 3.7 查看图形展示数据