Zabbix5.0之监控Nginx

前言

目前公司门户网站是使用Nginx作为web服务器的,作为运维人员,我需要清晰知道Nginx的工作状态,请求数有多少,多少是已经响应完成,多少是响应失败的,以及Nginx服务及端口监听情况是处于运行状态,等信息。当出现服务停止或大量请求响应失败时我需要第一时间知道。因此我使用了Zabbix通过Nginx内置的运行状态模块进行一系列的监控。


实验环境

系统:CentOS Linux release 7.6.1810 (Core)
Zabbix服务器:版本:5.0.0 IP地址:10.1.1.1
Nginx服务器:版本:nginx/1.18.0 IP地址:10.1.1.6


一、查看当前Nginx是否已安装内置运行状态模块

[root@nginx ~]# nginx -V

在这里插入图片描述

从命令返回值中出现“–with-http_stub_status_module”这一个模块即代表内置运行状态模块已开启


二、开启运行状态模块

编辑nginx配置文件

[root@nginx ~]# vim /etc/nginx/nginx.conf
注意:stub_status模块只能应用在server或者location下
参考以下内容进行修改:
server {
 location /status {		#定义运行状态页面名称,页面为status
        stub_status on;	#开启模块
        access_log off;	#不开启访问日志记录
        allow 127.0.0.1;    #运行127.0.0.1地址访问此网页
        allow 10.1.1.0/24;	#只运行10.1.1.0网段的主机访问此网页
        deny all;			#其余网段主机不允许访问
 }
}

在这里插入图片描述

[root@nginx ~]# nginx -t		#检查配置文件语法是否正确
[root@nginx ~]# systemctl restart nginx	#重启nginx服务

浏览器访问运行状态页面
http://IP/status
在这里插入图片描述

页面内容解析:
Active connections: 1
server accepts handled requests 1 1
1 Reading: 0 Writing: 1 Waiting: 0

Active connections:当前活动的客户端连接数有多少(包括在等待阶段的) accepts:接受的客户端连接总数
handled:已处理的连接总数(通常与accepts数量一致,但存在某些资源限制的情况导致数量不一致)
requests:客户端请求总数(包括接受请求或拒绝请求的) Reading:nginx正在读取请求标头的当前连接数。
Writing:nginx正在将响应写回到客户端的当前连接数。 Waiting:当前等待请求的空闲客户端连接数。

具体stub_status模块信息可查看官方文档:https://nginx.org/en/docs/http/ngx_http_stub_status_module.html


三、编写监控脚本并安装zabbix agent

[root@nginx ~]# rpm -ivh zabbix-agent-5.0.0-1.el7.x86_64.rpm
[root@nginx ~]# mkdir /etc/zabbix/script
[root@nginx ~]# vim /etc/zabbix/script/ngx_status.sh 
#!/bin/bash

#function: monitor nginx1.16 for zabbix5.0
#blog: www.qiufeng5.cn
#version: 1.0
#date: 2020-09-17

#定义Nginx status页面
ngx_status="http://127.0.0.1/status"

#判断status页面是否存活
ngx_status_code() {
        http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}`
        if [ ${http_code} == "200" ];then
                return 1
        else
                echo "Nginx status is not running."
        fi
}

#获取当前活动的客户端连接数
active() {
        ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}

#获取接收客户端连接的总数量
accepts() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}

#获取已处理的连接总数量
handled() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}

#获取客户端请求总数量
requests() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}

#获取正在读取请求标头的当前连接数量
reading() {
        ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}

#获取正在将响应写回到客户端的当前连接数量
writing() {
        ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}

#获取当前正在等待响应的客户端连接数量
waiting() {
        ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}

#使用位置变量控制脚本输出
case $1 in
        active)
                active;;
        accepts)
                accepts;;
        handled)
                handled;;
        requests)
                requests;;
        reading)
                reading;;
        writing)
                writing;;
        waiting)
                waiting;;
        *)
                echo "Unknown options"
esac

四、配置Zabbix Agent

[root@nginx ~]# cp /etc/zabbix/zabbix_agentd.conf{,.bak}
[root@nginx ~]# vim /etc/zabbix/zabbix_agentd.conf 
参考以下内容进行修改:
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
DenyKey=system.run[*]
EnableRemoteCommands=1
Server=10.1.1.1
ServerActive=10.1.1.1
Hostname=nginx
Timeout=10
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1
[root@nginx ~]# grep -v "^#" /etc/zabbix/zabbix_agentd.conf | grep -v "^$" 

在这里插入图片描述


五、创建自定义监控项

[root@nginx ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf
添加以下内容
UserParameter=nginx.active,bash /etc/zabbix/script/ngx_status.sh active
UserParameter=nginx.accepts,bash /etc/zabbix/script/ngx_status.sh accepts
UserParameter=nginx.handled,bash /etc/zabbix/script/ngx_status.sh handled
UserParameter=nginx.requests,bash /etc/zabbix/script/ngx_status.sh requests
UserParameter=nginx.reading,bash /etc/zabbix/script/ngx_status.sh reading
UserParameter=nginx.writing,bash /etc/zabbix/script/ngx_status.sh writing
UserParameter=nginx.waiting,bash /etc/zabbix/script/ngx_status.sh waiting
[root@nginx ~]# systemctl start zabbix-agent
[root@nginx ~]# firewall-cmd --permanent --add-port=10050/tcp
[root@nginx ~]# firewall-cmd --reload

Zabbix主机使用zabbix_get工具进行测试

[root@zabbix ~]# zabbix_get -s 10.1.1.6 -k nginx.active
1
[root@zabbix ~]# zabbix_get -s 10.1.1.6 -k nginx.reading
0

六、模板创建

进入Zabbix web界面,进行模板创建
在这里插入图片描述
在这里插入图片描述
在对应模板中创建相关监控项
在这里插入图片描述
按照以下方式添加其余自定义监控项到模板中
在这里插入图片描述


七、创建监控主机,链接模板

创建监控主机
在这里插入图片描述

链接Nginx模板
在这里插入图片描述
查看最新监控数据
在这里插入图片描述

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值