监控nginx的状态

其实这里用到了nginx的ngx_http_stub_status_module模块。通过这个模块,显示网站的接入信息,比如:TCP连接数、请求数 等。

  • 准备nginx环境

安装好nginx服务后,在nginx配置文件中编写一个状态模块的location,启用ngx_http_stub_status_module这个模块。例如下面的写法

[root@web03 conf.d]# cat status.conf 
server {
    listen 80;
    server_name _;

    #获取nginx状态
    location /nginx_status {
        stub_status on;    
    }
}

检查语法,重启nginx服务

nginx -t 
systemctl restart nginx 

使用curl命令获取nginx状态信息

[root@web03 ~]# curl http://10.0.0.9/nginx_status
Active connections: 1 
server accepts handled requests
 151 151 151 
Reading: 0 Writing: 1 Waiting: 0 
  • 编写获取nginx状态的脚本

把脚本放在/server/scripts/目录下

cat /server/scripts/nginx_status.sh

#!/bin/bash

NGINX_PORT=80  #如果端口不同仅需要修改脚本即可,否则修改xml很麻烦
NGINX_COMMAND=$1


nginx_active(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}'
}

nginx_reading(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}'
}

nginx_writing(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}'
}

nginx_waiting(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'
}

nginx_accepts(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}'
}

nginx_handled(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}'
}

nginx_requests(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}'
}


case $NGINX_COMMAND in
    active)
        nginx_active;
        ;;
    reading)
        nginx_reading;
        ;;
    writing)
        nginx_writing;
        ;;
    waiting)
        nginx_waiting;
        ;;
    accepts)
        nginx_accepts;
        ;;
    handled)
        nginx_handled;
        ;;
    requests)
        nginx_requests;
        ;;
    *)
        echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
esac
  • 配置zabbix的agent端的key
[root@web03 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /server/scripts/nginx_status.sh "$1"
[root@web03 ~]# systemctl restart zabbix-agent.service

测试是否能获取key值

#agent端测试
[root@web03 ~]# zabbix_agentd -t nginx_status[requests]
nginx_status[requests]                        [t|106476]

#zabbix服务端测试
[root@zabbix-server ~]# zabbix_get -s 172.16.1.9 -p 10050 -k nginx_status[requests]
106582
  • web界面导入模板

  • 查看导入好后的的数据信息

先把模板关联到web03这台主机上

文档更新时间: 2020-12-28 19:01   作者:Wan Hebin