﹝Linux﹞Zabbix監控nginx-API

前言:

  1. 被監控端需要安裝好 Zabbix-agent 以及 NGINX (API)
  2. 本文為本人整理之筆記,如有侵權冒犯,請立即告知
 作業環境:CentOS 7 mini 
 Zabbix UI介面配置

 新增組態模板 並將下面提供的檔案匯入

 
檔案下載:Template App NGINX

查看NGINX模組已被加入,並點擊進入「Template App NGINX」進入編輯


將需要被監控的機器加入「Template App NGINX」模組中

被監控端配置

 進入被監控端的nginx配置文件中加入下列配置

sudo vi /etc/nginx/conf.d/default.conf

#zabbix监控nginx配置

location /nginx_status

{

stub_status on;

access_log off;

allow 127.0.0.1;

deny all;

}


sudo nginx -t
sudo nginx -s reload

編寫Zabbix-agent監控Script

sudo vi /etc/zabbix/zabbix_agentd.d/nginx_status.sh

#!/bin/bash

#Script to fetch nginx statuses for monitoring systems

#Author Tony

    HOST="127.0.0.1"

    PORT="80"

    function ping {     #用於檢測nginx進程是否存在

        /sbin/pidof nginx | wc -l

    }

    function active {   #用於提取status中的active數值

        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'

    }

    function reading {  #用於提取status中的reading數值

        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'

    }

    function writing {  #用於提取status中的writing數值

        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'

    }

    function waiting {  #用於提取status中的waiting數值

        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'

    }

    function accepts {  #用於提取status中的accepts數值

        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'

    }

    function handled {  #用於提取status中的handled數值

        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'

    }

    function requests { #用於提取status中的request數值

        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'

    }

    $1  #通過第一個位置參數的值来調用相應的函數

授予權限

chmod a+x nginx_status.sh

編輯zabbix配置文件

sudo vi /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

加入

UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh $1


修改Zabbix-agent.conf中的參數

將「Include=/etc/zabbix/zabbix_agentd.d/」修改為「Include=/etc/zabbix/zabbix_agentd.d/*.conf」

重啟 zabbix-agent

sudo systemctl restart zabbix-agent

測試使否能取得nginx連接值

curl http://localhost/nginx_status

Zabbix Server 端

在Zabbix-Serve端下指令取得值

zabbix_get -s 172.16.16.97 -k nginx.status[accepts]


回到Zabbix UI監控平台查看


Zabbix 監控 NGINX API BUG 解決心得

1. 執行該指令時curl http://localhost/nginx_status會造成錯誤,取不到數值,

需要先查看 /etc/hosts 是否有設置Hosts,檢查正常,
請修改 default.conf 的配置,將下列註解,即可正常

# allow 127.0.0.1;

# deny all;

2. 在Zabbix Server 執行該指令時zabbix_get -s 172.16.16.97 -k nginx.status[accepts]會出現抓到空值的情況發生,

只需要修改sudo vi /etc/zabbix/zabbix_agentd.d/nginx_status.sh腳本,將「HOST="127.0.0.1"」修改成「HOST="localhost"」

問題即可解決


參考資料:

nginx 納入 Zabbix 監控

zabbix 监控nginx


天下風雲出我輩,一入江湖歲月催,

塵事如潮人如水,只嘆江湖幾人回。