使用zabbix去监控nginx

准备工作

zabbix监控nginx,首先要确认nginx里是否有http_stub_status_module这个模块,一般来说,这个模块是自动安装的,nginx -V如下图:
paradin

如果你的nginx没有这个模块,请去看https://rorschachchan.github.io/2018/01/03/Nginx动态编译新的模块/

然后在nginx.conf里添加一段话:

1
2
3
4
 location = /nginx-status  {
stub_status on;
access_log off;
}

nginx -s reload一下,然后在命令行输入curl http://127.0.0.1/nginx-status,就会看到如下的界面:
paradin

这样就可以通过http_stub_status_module检查nginx情况了!

nginx status详解

以上图的nginx status来做例子说明一下各个数字的意思:
active connections – 活跃的连接数量
accepts — 总共处理了3832000个连接
handled — 成功创建3832000次握手
requests — 总共处理了3295877个请求
reading — 读取客户端的连接数
writing — 响应数据到客户端的数量
waiting — 开启keep-alive的情况下,这个值等于active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接

配置监控

有了模块,还需要添加一个脚本,然后就可以获取上面的数值了,脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
# Method of use

HOST="127.0.0.1"
PORT="80" #这个根据实际情况填写
URL="http://${HOST}:${PORT}/nginx-status"

active() {
curl "${URL}" 2>/dev/null | grep "Active" | awk '{print $NF}'
}
reading() {
curl "${URL}" 2>/dev/null | grep "Reading" | awk '{print $2}'
}
writing() {
curl "${URL}" 2>/dev/null | grep "Writing" | awk '{print $4}'
}
waiting() {
curl "${URL}" 2>/dev/null | grep "Waiting" | awk '{print $NF}'
}
accepts() {
curl "${URL}" 2>/dev/null | awk NR==3 | awk '{print $1}'
}
handled() {
curl "${URL}" 2>/dev/null | awk NR==3 | awk '{print $2}'
}
requests() {
curl "${URL}" 2>/dev/null | awk NR==3 | awk '{print $NF}'
}
ping() {
ps -ef | grep nginx | grep -v grep -c
}
$1

然后再去zabbix_agentd.conf里添加一句话:

1
UserParameter=nginx.status[*],/usr/local/zabbix/script/nginx_status.sh $1

然后service zabbix-agent restart,自定义项就搞定了。

如果要导入模板,https://gitee.com/careyjike_173/zabbix 这个朋友的模板已经非常全面了,根据实际情况修改之后再导入他的xml就好,感谢前人付出!

paradin

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------