22 Zabbix 4.2 自定义Key 监控Nginx

监控nginx 状态

nginx 编译时必须加入–with-http_stub_status_module 这个模块

一、修改nginx 配置文件:(在zabbix客户端上操作)

vim /usr/local/nginx/conf/nginx.conf

location /nginx_stat {
stub_status on;
access_log off;
allow 192.168.0.0/16;
allow 127.0.0.1;
deny all;
}

保存退出。重启nginx

Active connections: 对后端发起的活动连接数.

Server accepts handled requests: Nginx总共处理了91312个连接,成功创建61312次握手(证明中间没有失败的),总共处理了226个请求.

Reading: Nginx 读取到客户端的Header信息数.

Writing: Nginx 返回给客户端的Header信息数.

Waiting: 开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是Nginx已经处理完成,正在等候下一次请求指令的驻留连接。

二、编写监控脚本: (在zabbix客户端上操作)

mkdir -p /usr/local/zabbix/script && cd /usr/local/zabbix/script

vim nginx_status.sh

#! /bin/bash
#date: 2019-05-05
# Description:zabbix监控nginx性能以及进程状态
# Note:此脚本需要配置在被监控端
HOST="192.168.189.73"
#如果你的nginx 不是80端口,需要添加一个端口变量。
# 检测nginx进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测nginx性能
function active {
/usr/bin/curl "http://$HOST/nginx_stat/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST/nginx_stat/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST/nginx_stat/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST/nginx_stat/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST/nginx_stat/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST/nginx_stat/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST/nginx_stat/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
# 执行function
$1
++++++++++++++++++++++++++

chmod +x nginx_status.sh

三、修改zabbix客户端的配置文件: (在zabbix客户端上操作)

cd /usr/local/zabbix/etc/zabbix_agentd.conf.d

vim nginx_status.conf

保存,退出,重启zabbix客户端.

pkill zabbix_agentd

zabbix_agentd

四、测试 (在zabbix服务器上操作)

五、在zabbix WEB页面添加nginx 监控模版,并添加监控项。

添加监控项:

添加其他的监控项:

监控nginx 日志:创建项

为监控主机(web01 189.73),添加模版

查看数据:

为nginx 模版添加图形:

创建触发器:(nginx 进程挂掉后,触发,动作,邮件报警)

由于先前创建的动作是应用是所有触发器的,所以这里可以不用再单独创建动作。也可以单独为nginx 触发,创建一个动作。

测试触发器:停止nginx

重新启动nginx