Zabbix-9·编写脚本监控nginx多项数值
2022-12-07 本文已影响0人
技术老男孩
一、需求:使用Zabbix监控nginx以下几个数值:客户端访问的总量(accepts)、当前客户端与nginx之间的连接数(Active)、正在向客户端发送响应的连接总数(Writing)
二、实现思路流程:
- 安装nginx并启动服务
- 创建shell脚本(实现传值获取nginx运行参数)
- 创建监控键值配置文件
- 在Zabbix web给被控主机创建监控项
三、环境准备:
准备二台主机:
主机名 | 地址 | |
---|---|---|
监控端 | zabbixserver | 192.168.88.5/24 |
被控端 | web1 | 192.168.88.100/24 |
Nginx版本:nginx-1.12.2
四、实施(监控web1 nginx的accepts、Active、Writing数据)
第一步:安装nginx并启动服务
- 编译安装nginx
# 安装依赖
[root@web1 lnmp_soft]# yum install -y gcc pcre-devel openssl-devel
# 进入到nginx目录
[root@web1 lnmp_soft]# cd nginx-1.12.2/
# 查看配置帮助
[root@web1 nginx-1.12.2]# ./configure --help | grep stub
--with-http_stub_status_module enable
# 编译
# 由于涉及到status的检查数据,所以要加上--with-http_stub_status_module
[root@web1 nginx-1.12.2]# ./configure --with-http_stub_status_module
# 安装
[root@web1 nginx-1.12.2]# make && make install
- 修改nginx.conf配置,开放status检查
# 添加stub_status on开启检查
[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
47 location /status {
48 stub_status on;
49 }
# 检查语法,出现syntax is ok表示配置文件正确
[root@web1 ~]# /usr/local/nginx/sbin/nginx -t
- 启动Nginx服务
# 启动服务
[root@web1 ~]# /usr/local/nginx/sbin/nginx
# 查看80端口
[root@web1 ~]# ss -tlnp | grep :80
LISTEN 0 128 *:80
- 查看需要被监控的监控项是否可以正常展示
# 访问监控页面
[root@web1 ~]# curl http://192.168.88.100/status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
"Active connections":当前客户端与nginx之间的连接数。它等于下面Reading / Writing / Waiting之和
"accepts":自nginx启动之后,客户端访问的总量
"handled":自nginx启动之后,处理过的客户端连接总数。
"requests":自nginx启动之后,处理过的客户端请求总数。
"Reading":正在读取HTTP请求头部的连接总数。
"Writing":正在向客户端发送响应的连接总数。
"Waiting":空闲连接。
第二步:创建shell脚本,用于获取各项数据
- 在/usr/local/bin/目录下创建脚本,便于后面直接运行脚本
# 创建脚本
[root@web1 ~]# vim /usr/local/bin/nginx_status.sh
- 使用case语句进行区分监控项
#!/bin/bash
case $1 in
active)
curl -s http://192.168.88.100/status | awk '/Active/{print $NF}';;
waiting)
curl -s http://192.168.88.100/status | awk '/Waiting/{print $NF}';;
accepts)
curl -s http://192.168.88.100/status | awk 'NR==3{print $1}';;
esac
- 测试脚本
# 给脚本添加执行权限
[root@web1 ~]# chmod +x /usr/local/bin/nginx_status.sh
# 执行脚本获取active的数值
[root@web1 ~]# nginx_status.sh active
1
# 执行脚本获取accepts的数值
[root@web1 ~]# nginx_status.sh accepts
1047
# 执行脚本获取waiting的数值
[root@web1 ~]# nginx_status.sh waiting
0
第三步:创建监控键值配置文件
- 创建声明监控项key的文件
# 创建nginx.status
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status
UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
key的语法格式:
UserParameter=key[*],<command> $1
key[*]中的*是参数,将会传给后面的位置变量$1
- 本地验证通过key获取数据
# 修改完配置文件重启服务
[root@web1 ~]# systemctl restart zabbix_agentd.service
# 测试验证accepts
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx.status[accepts]
1049
# 测试验证active
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx.status[active]
1
第四步:在Zabbix web给被控主机创建监控项
-
给web1单独添加监控项
添加监控项1.png -
填入对应key值
添加监控项2.png -
查看web1的最新数据
添加监控项3.png -
显示刚才的监控项及监控数据即为成功
添加监控项4.png