您现在的位置是:首页 >其他 >Zabbix5通过脚本自定义Nginx监控网站首页其他

Zabbix5通过脚本自定义Nginx监控

Field_Yang 2024-08-07 18:01:03
简介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 客户端文件配置

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

[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]$

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、导出模板

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

导出

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

导入

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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。