路漫漫其修远兮,吾将上下而求索。

导航

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

完成后,页面上可以查看到图形

7

posted on 2020-05-30 13:37  rushiy  阅读(473)  评论(0编辑  收藏  举报