zabbix自定义监控nginx活动连接数和绘制图形
1 安装nginx
[root@zbx-node01 ~]# yum install -y gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel wget httpd-tools
[root@zbx-node01 ~]# [root@zbx-node01 ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@zbx-node01 ~]# tar -zxf nginx-1.18.0.tar.gz
[root@zbx-node01 nginx-1.18.0]# ./configure --prefix=/usr/local/src/nginx-1.18/ --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio
[root@zbx-node01 nginx-1.18.0]# make && make install
[root@zbx-node01 nginx-1.18]# ln -f sbin/nginx /usr/sbin/
[root@zbx-node01 nginx-1.18]# vim conf/nginx.conf # 启动nginx自带的状态监控模块
location /status {
stub_status on;
}
[root@zbx-node01 nginx-1.18]# nginx
[root@zbx-node01 nginx-1.18]# ps -ef | grep nginx # 查看进程是否存在
[root@zbx-node01 nginx-1.18]# ss -ln | grep 80 # 查看端口是否存在
浏览器中查看nginx自带的状态模块,如图,可以查看连接数等信息
2 配置zabbix监控nginx当前连接数
[root@zbx-node01 ~]# curl 'http://10.138.3.20/status'
Active connections: 1
server accepts handled requests
11 11 11
Reading: 0 Writing: 1 Waiting: 0
[root@zbx-node01 ~]# curl -s 'http://10.138.3.20/status' | grep 'Active' | awk '{print $NF}' # 获取nginx当前连接数
1
[root@zbx-node01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.conf # 将自定义监控项下载zabbix的子配置文件目录下/etc/zabbix/zabbix_agentd.d/
UserParameter=nginx.active,/usr/bin/curl -s 'http://10.138.3.20/status' | grep 'Active' | awk '{print $NF}'
# 此处的自定义名称(监控项key)nginx.active可随意取,主要在配置监控项网页的时候一致就行,逗号后的命令建议使用绝对路径
[root@zbx-node01 ~]# systemctl restart zabbix-agent # 配置完成后,重启zabbix-agent
在zabbix server端测试是否可获取到值,能获取到值后,再取页面上配置
[root@zbx-server ~]# zabbix_get -s 10.138.3.20 -k 'nginx.active'
1
3 页面添加自定义监控项和图形
3.1 添加自定义监控项
进入页面后,点击创建监控项,即可进行自定义设置
点击'添加',完成添加,添加完成后,可以在监控项中查看到自定义的监控项信息
3.2 自定义图形
查看自定的图形
3.3 添加聚合图形
编辑聚合图形
编辑完成后,如下图(此处只是做了可以添加各种类型的资源的展示,因此不考虑实用、美观等)
3.4 添加触发器
点击'配置'-->‘主机’,进入主机编辑界面,点击‘触发器’,点击'添加触发器',此处为了模拟实验,将触发器设置为链接数大于1
刷新nginx网页,以产生nginx告警
当连接数低于触发器的告警数时,告警自动消除
4 自定义监控脚本
nginx.conf配置文件中定义监控内容
[root@zbx-node01 zabbix_agentd.d]# vim /usr/local/src/nginx-1.18/conf/nginx.conf
location /status {
stub_status on; # 开启nginx自带监控模块
access_log off; # 关闭访问日志
allow 127.0.0.1; # 只本机可采集,拒绝其他主机来采集数据
deny all;
}
zabbix-agent.conf配置文件中关于子配置文件的定义
Include=/etc/zabbix/zabbix_agentd.d/*.conf # 自定义监控项存放的目录位置和名称
zabbix_agentd.d目录下新建的监控文件
[root@zbx-node01 zabbix_agentd.d]# ls
nginx.conf nginx_status.sh
[root@zbx-node01 zabbix_agentd.d]# cat nginx.conf # 将监控参数写在该文件中
UserParameter=nginx.active,/usr/bin/curl -s 'http://10.138.3.20/status' | grep 'Active' | awk '{print $NF}'
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh $1
# UserParameter自定义监控项的键,/etc/zabbix/zabbix_agentd.d/nginx_status.sh $1是执行的脚本和传入的参数,建议使用绝对路径,并有执行权限
[root@zbx-node01 zabbix_agentd.d]# cat nginx_status.sh # 该脚本来自网络
#!/bin/bash
#Script to fetch nginx statuses for monitoring systems
HOST="127.0.0.1"
PORT="80"
function ping {
/sbin/pidof nginx | wc -l
}
function active {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
$1
重启nginx和zabbix-agent
[root@zbx-node01 zabbix_agentd.d]# nginx -s reload
[root@zbx-node01 zabbix_agentd.d]# systemctl restart zabbix-agent
在zabbix-server端测试连通性
[root@zbx-server ~]# zabbix_get -s 10.138.3.20 -p 10050 -k nginx.status[accepts]
1033
[root@zbx-server ~]# zabbix_get -s 10.138.3.20 -p 10050 -k nginx.status[handled]
1035
[root@zbx-server ~]# zabbix_get -s 10.138.3.20 -p 10050 -k nginx.status[active]
1
能取到数据后,就可以配置网页了,添加模板
5 新建监控模板
5.1 新建模板
5.2 在模板中新建监控项
同样的方法,将自定义脚本中的所有监控项键都添加上,添加完成后如图
5.3 在模板中新建图形
将新建的模板添加到主机中
完成后,就可以在'检测'下的图形中选择对应的主机,查看nginx的图形了
对于新建的监控模板,我们可以导出保存,以便以后再使用。
点击'配置'-->'模板',选择需要导出的模板,点击浏览器下方的导出,即可将模板导出到本地
5.4 导入模板
将新导入的模板添加给主机
将shell脚本添加到对应主机
[root@zbx-node01 zabbix_agentd.d]# cat tcp_status.sh
#!/bin/bash
[ $# -ne 1 ] && echo "Usage:CLOSE-WAIT|CLOSED|CLOSING|ESTAB|FIN-WAIT-1|FIN-WAIT-2|LAST-ACK|LISTEN|SYN-RECV SYN-SENT|TIME-WAIT" && exit 1
tcp_status_fun(){
TCP_STAT=$1
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/ss.txt
TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/ss.txt | cut -d ' ' -f2)
if [ -z "$TCP_STAT_VALUE" ];then
TCP_STAT_VALUE=0
fi
echo $TCP_STAT_VALUE
}
tcp_status_fun $1;
[root@zbx-node01 zabbix_agentd.d]# chmod +x /etc/zabbix/zabbix_agentd.d/tcp_status.sh
[root@zbx-node01 zabbix_agentd.d]# vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf
UserParameter=tcp_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/tcp_status.sh "$1"
[root@zbx-node01 zabbix_agentd.d]# systemctl restart zabbix-agent
zabbix服务端查看是否可获取到数据
[root@zbx-server ~]# zabbix_get -s 10.138.3.20 -p10050 -k tcp_status[ESTAB]
2
完成后,页面上可以查看到图形