nginx是常用的web服务器,需要使用zabbix监控nginx,首先nginx需要配置ngx_status ,使nginx支持采集数据(开启监控页面)
如果是编译安装的nginx,你编译安装的时候需要增加编译模块参数--with-http_stub_status_module
官方配置说明http://nginx.org/en/docs/http/ngx_http_stub_status_module.html
可以采集到的指标类型
Active connections
当前活动客户端连接的数量,包括Waiting连接
accepts
接受的客户端连接的总数
Handled
已处理的连接总数。通常,参数值与accepts 除非达到某些资源限制(例如, worker_connections限制)相同
requests
客户端请求的总数
Reading
当前nginx正在读取请求头的连接数
Writing
当前nginx将响应写回客户端的连接数
Waiting
当前等待请求的空闲客户端连接数
1、在agent端启用nginx的status模块
编辑nginx配置文件
[root@web01 ~]# vim /etc/nginx/nginx.conf
location /ngx_status {
stub_status ; #开启访问功能stub_status功能
access_log off; #关闭访问日志
allow 127.0.0.1; #允许访问的ip
allow 10.0.0.0/24;
deny all; #拒绝除了允许的ip外的所有ip访问
}
修改完后重启nginx
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# nginx -s reload
2、命令行手动测试取值
[root@web01 ~]# curl http://127.0.0.1/ngx_status
Active connections: 1
server accepts handled requests
81 81 135
Reading: 0 Writing: 1 Waiting: 0
3、定义监控项的key值并编写脚本
创建zabbix_agentd关联nginx status的子配置文件
[root@web01 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@web01 zabbix_agentd.d]# vim ngx_status.conf
UserParameter=nginx.status[*],/service/scripts/ngx_status.sh $1 #定义key为nginx.status,传入参数$1
[root@web01 zabbix_agentd.d]# systemctl restart zabbix-agent.service #重启服务
编写脚本对每一个指标进行取值
[root@web01 scripts]# pwd
/service/scripts
[root@web01 scripts]# vim ngx_status.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
# 检测nginx进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测nginx性能
function active {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
# 执行function
$
为脚本添加执行权限
[root@web01 scripts]# chmod +x ngx_status.sh
[root@web01 scripts]# ll
总用量 4
-rwxr-xr-x 1 root root 978 6月 13 10:13 ngx_status.sh
4、web界面配置或导入模板
模板的配置可以选择手动配置,手动配置模板的步骤不做过多介绍。
另外一种方式为导入配置好的模板
点击:配置——>模板——>导入,选择下载的模板文件并上传
5、主机链接模板
选择需要监控nginx的主机,链接nginx模板
6、测试和检查
在zabbix server端测试通过命令行任选一个监控项进行测试
[root@zabbix ~]# zabbix_get -s 192.168.1.7 -k nginx.status[requests]
470
测试成功后到web界面查看最新数据
对多个主机监控
server端增加监控项(模板),链接所有需要监控的主机
7、模板调整和优化
7.1 添加计算类型的监控项,得到nginx请求丢失数
对nginx的监控不仅仅是采集到上面每一项的数值,常常需要更直观的查看到某些数据,例如需要得到nginx请求丢失数,这就需要自定义一个计算类型的监控项,计算方法为已处理的连接总数(Handled)-接受的客户端连接的总数(accepts)
关于计算监控项:https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes/calculated
点击:配置——>模板,找到上面导入的nginx模板,点击监控项——>创建监控项
公式为last("web01:nginx.status[handled]")-last("web01:nginx.status[accepts]")
7.2 通过zabbix内置key,net.tcp.listen[port],监控nginx 80端口是否存在
命令行测试:
[root@zabbix ~]# zabbix_get -s 192.168.1.7 -k "net.tcp.listen[80]"
1
web界面新增监控项
查看值这一项选择值映射即Service state服务状态
刷新zabbix_server的缓存得到最新数据
[root@zabbix ~]# zabbix_server -R config_cache_reload
zabbix_server [30663]: command sent successfully
采集到的最新数据如下
7.3 通过zabbix内置key,proc.num[<name>,<user>,<state>,<cmdline>],监控nginx的进程数
命令行测试
[root@zabbix ~]# zabbix_get -s 192.168.1.7 -k "proc.num[nginx]"
2 #nginx默认的进程数量为worker和master两个
这里的nginx进程数为2,这个值是在nginx配置文件中设置不变的(worker_processes)
此值长期不变,也可以不进行监控
7.4 创建触发器
根据实际情况创建需要的触发器触发报警
博主原创文章,转载请务必注明出处