Zabbix5通过脚本自定义Nginx监控

1、客户端配置

1.1、nginx开启nginx status

使用 zabbix 监控 nginx,首先 nginx 需要配置 ngx_status,nginx.conf加入以下配置,并重启Nginx或reload

location /ngx_status

    {

        stub_status on;

        access_log off;

        #allow 127.0.0.1;

        #deny all;

    }

nginx status 信息

[fieldyang@www nginx]$ curl http://127.0.0.1:1080/ngx_status

Active connections: 7

server accepts handled requests

 7493 7493 7511

Reading: 0 Writing: 6 Waiting: 1

说明

active connections – 活跃的连接数量

server accepts handled requests — 总共处理了7493 个连接,成功创建7493 次握手,总共处理了7511个请求

reading — 读取客户端的连接数.

writing — 响应数据到客户端的数量

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

1.2、zabbix 客户端配置

以上为 nginx 性能计数,除了监控以上数据,还需要监控 nginx 进程状态,并且配置触发器!

1.2.1、编写客户端脚本 ngx_status.sh

如脚本无法使用,请检查对应路径和相关变量

[fieldyang@www scripts]$ pwd

/usr/lib/zabbix/scripts

[fieldyang@www scripts]$ cat >ngx_status.sh

#!/bin/bash
# 功能:zabbix 监控 nginx 性能、进程状态、返回码统计
# 说明:需要配置在被监控端,否则 ping 检测将会得到不符合预期的结果
HOST="127.0.0.1"
PORT="1080"
lastmin=`date +"%Y:%H:%M" -d "1 min ago"`
code=$2
# 检测 nginx 进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测 nginx 性能
function active {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
function status_sum {
sum=`grep " ${code}" /var/log/nginx/access.log |grep ${lastmin}|awk '{sum+=1}END{ print sum}'`
if [ "$sum" = "" ]
then
       echo 0
else
       echo $sum
fi
}

# 执行 function
if [ $# -gt 1 ]
then
        status_sum
else
        $1
fi

[fieldyang@www scripts]$ chmod +x ngx_status.sh

1.2.2、zabbix 客户端文件配置

[fieldyang@www scripts]$ cat /etc/zabbix/zabbix_agentd.conf|grep ^UserParameter
UserParameter=nginx.status[*],/usr/lib/zabbix/scripts/ngx_status.sh $1 $2
[fieldyang@www scripts]$ killall zabbix_agentd
[fieldyang@www scripts]$ ps -ef|grep zabbix_agentd
fieldyang      69914  57012  0 13:52 pts/0    00:00:00 grep --color=auto zabbix_agentd
[fieldyang@www scripts]$ /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
[fieldyang@www scripts]$ ps -ef|grep zabbix_agentd
zabbix    69918      1  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix    69919  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix    69920  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix    69921  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix    69922  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix    69923  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
fieldyang      69928  57012  0 13:52 pts/0    00:00:00 grep --color=auto zabbix_agentd
[fieldyang@www scripts]$

将自定义的 UserParameter 加入配置文件,然后重启 agentd,如下:

1.2.3、zabbix_get 获取数据

通过此命令我们可以检测配置是否正确,如下命令 192.168.28.132 为zabbix-agent IP地址

Ps.推荐使用VMware安装 centos7最小系统,按需克隆主机,修改网卡配置的IP地址,重启network,便可以拷贝多台机器完成zabbix 学习。

[fieldyang@www network-scripts]$ cat  /etc/sysconfig/network-scripts/ifcfg-ens33|grep IPADDR

IPADDR=192.168.28.132

[fieldyang@www scripts]$ for i in ping active reading writing waiting accepts handled requests status_sum
do
    if [ $i = "status_sum" ]
    then
        for j in 200 301 302 403 404 500
        do
            zabbix_get -s 192.168.28.132 -k nginx.status[$i,$j] |xargs |xargs echo "${i}_${j}:"
        done
    else
        zabbix_get -s 192.168.28.132 -k nginx.status[$i] |xargs |xargs echo "$i:"
    fi
done

ping: 1
active: 1
reading: 0
writing: 1
waiting: 0
accepts: 141612
handled: 141613
requests: 141218
status_sum_200: 124
status_sum_301: 139
status_sum_302: 99
status_sum_403: 0
status_sum_404: 0
status_sum_500: 0
[fieldyang@www scripts]$

zabbix server 服务器上执行如上命令,192.168.28.132 agentd 机器

2、zabbix web配置

2.1、创建“Template App NGINX”模板、应用集Nginx (略)

配置-->模板-->创建模板

配置-->模板-->“Template App NGINX”-->应用集-->创建应用集

2.2、创建监控项

配置-->模板-->“Template App NGINX”-->监控项-->创建监控项

注意:自定义的脚本只适合以下监控项,其他需求请按需修改脚本。

2.3、创建触发器

配置-->模板-->“Template App NGINX”-->触发器-->创建触发器

2.4、创建图形

配置-->模板-->“Template App NGINX”-->图形-->创建图形

2.5、创建触发器告警动作

配置-->动作-->左上角选择 触发器动作-->创建动作

2.6、链接模板

配置-->主机-->点击 nginx 所在服务器-->点击 模板-->链接新模板 输入"Template App NGINX"->Add->最后点击 更新。

3、功能验证

测试可以使用 ab工具模拟访问

ab -n 4000 -c 15 http://192.168.28.132:1080/ngx_status >>1.txt

或以下脚本

for i in `seq -w 1 9999`

do

curl http://192.168.28.132:1080/ngx_status>>1.txt

done

3.1、查看最新数据

监测-->最新数据

3.2、查看图形展示

监测-->主机-->选择nginx主机-->图形-->过滤相关图形

3.3、测试触发器动作。

模拟下线nginx

[fieldyang@www ~]$ service nginx stop

Redirecting to /bin/systemctl stop nginx.service

[fieldyang@www]~]$

在问题列表可以看到已经触发问题,并下发告警邮件。

重新上线nginx,可以看到问题已解决,并下发恢复邮件

4、导出模板

实际使用中,可以在测试环境中调试好模板,然后再导入到生产环境中

导出

配置-->模板-->选中要导出的模板-->导出

导入

配置-->模板-->选中要导入的模板-->导入

相关文章

文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、N...
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的...
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时...
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+...
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以...
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx ...