【zabbix告警監控】配置zabbix監控nginx服務


zabbix監控nginx,nginx需要添加--with-http_stub_status模塊

  使用zabbix監控nginx,首先nginx需要配置開啟ngx_status。但是我這邊nginx安裝成功了並且也沒有添加sub模塊,需要重新編譯添加該模塊。配置如下:

# 在添加之前需要查看是否有sub的模塊(--with-http_sub_module 這個模塊),如果沒有就需要重新編譯
# 使用nginx -V可以查看
[root@VM_0_10_centos thy]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --er
ror-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-http_ssl_module

# 重新配置(需要在nginx的解壓目錄下執行)
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_realip_module

# 編譯,注意不要make install,不然會覆蓋之前的安裝
[root@VM_0_10_centos nginx-1.16.1]# make

# 替換二進制文件(可以先備份好再操作)(如果沒有這一步,就不會重新加載模塊,使用-V查看的還會是之前的模塊)
[root@VM_0_10_centos nginx-1.16.1]# cp /usr/local/src/nginx-1.16.1/objs/nginx /usr/local/nginx/sbin/

# 重啟nginx(nginx停掉重啟,pid文件會被刪除,所以需要生成下pid文件再重啟),再次-V查看就能看到剛剛添加的模塊
[root@VM_0_10_centos nginx-1.16.1]# /usr/local/nginx/sbin/nginx -t
[root@VM_0_10_centos nginx-1.16.1]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@VM_0_10_centos nginx-1.16.1]# /usr/local/nginx/sbin/nginx -s reload

# 查看
[root@VM_0_10_centos nginx-1.16.1]# nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --er
ror-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module

# 我的nginx配置文件是采用的導入方式,也就是將配置文件分開,一個主配置文件里邊調用多個服務的配置文件,這里以other.conf為列開啟nginx的status
[root@VM_0_10_centos thy]# pwd
/usr/local/nginx/conf/thy
[root@VM_0_10_centos thy]# vim other.conf
server{
        listen 80;
        server_name ip地址或域名;
        location / {
                root html;
        index index.html index.htm index.php;
        }
        # 開啟status
    location /nginx_status {  
                stub_status on;  
                access_log   off;  
            allow 10.0.0.1;
        allow 10.0.0.2;
        deny all;
    }
        
   # 緩存php生成頁面內容,8個16k
   # fastcgi_buffers 8 16k;
   # 緩存php生成的頭部信息
   # fastcgi_buffers_size 32k;
   # 連接php的超時時間
   # fastcgi_connect_timeout 300;
   # 發送請求的超時時間
   # fastcgi_send_timeout 300;
   # 讀取請求的超時時間
   # fastcgi_read_timeout 300;

      location ~ \.php$ {
          root           html;
          fastcgi_pass   127.0.0.1:9000;
          fastcgi_index  index.php;
          #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
          include        fastcgi_params;
      }
}

# 重啟nginx
[root@VM_0_10_centos thy]# /usr/local/nginx/sbin/nginx -s reload

使用瀏覽器訪問或curl訪問:

[root@VM_0_10_centos thy]# curl http://ip地址或域名:80/nginx_status
Active connections: 7 
server accepts handled requests
 22 22 161 
Reading: 0 Writing: 1 Waiting: 6

PS:上面如果設置了允許訪問的ip,那么只能在允許訪問的ip訪問,一般是不會開放給所有人訪問的。

禁止訪問會出現如下圖:

active connections – 活躍的連接數量(當前與http建立的連接數,包括等待的客戶端連接)7

server accepts handled requests — 接受的客戶端連接總數目22 , 處理的客戶端連接總數目22, 客戶端總的請求數目161
reading — 讀取客戶端的連接數.(當前,nginx讀請求連接

writing — 響應數據到客戶端的數量
waiting — 開啟 keep-alive 的情況下,這個值等於 active – (reading+writing), 意思就是 Nginx 已經處理完正在等候下一次請求指令的駐留連接.(目前有多少空閑客戶端請求連接)

 

zabbix配置

  上面配置好stub模塊之后,現在配置zabbix監控nginx的服務。我們除了監控以上數據,還需要監控nginx進程狀態,並且配置觸發器!

1. zabbix客戶端配置

# 在zabbix_agentd客戶端編寫監控腳本
[root@VM_0_10_centos thy]# cd /usr/local/share/zabbix/alertscripts/  
[root@VM_0_10_centos alertscripts]# vi ngx_status.sh
#!/bin/bash
# DateTime: 2019-12-10
# AUTHOR: HeiDi
# Description: Zabbix monitors nginx performance and process status

# 開啟stub_status服務的名稱,也就ip或域名
HOST="ip或域名"
PORT="80"

# Detects if the nginx process exists
function ping {
    /sbin/pidof nginx | wc -l
}

# check nginx property
# 這中方法也可以實現和下面相同的效果curl http://域名/nginx_status 2>/dev/null | grep Active | awk -F '[:]+' '{p
rint $2}'  這里的[:]+表示以1個或多個 :(空格或冒號)作為分隔符
# NR表示行,
function active {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}

# execute function
$1

# 賦予權限
[root@VM_0_10_centos alertscripts]# chmod +x ngx_status.sh
[root@VM_0_10_centos alertscripts]# chown zabbix.zabbix ngx_status.sh

本地服務器上測試:

[root@VM_0_10_centos alertscripts]# ./ngx_status.sh active 
5

 

 

2. 配置zabbix.conf,定義監控腳本key:

# 開啟該參數,默認為0(另外還需要將zabbix_agentd.conf需要加載zabbix_agentd.conf.d目錄的行注釋去掉)
[root@VM_0_10_centos alertscripts]# cat /usr/local/etc/zabbix_agentd.conf | grep UnsafeUserParameter
### Option: UnsafeUserParameters
UnsafeUserParameters=1
# 加載配置文件目錄
Include=/usr/local/etc/zabbix_agentd.conf.d/
# 在/usr/local/etc/zabbix_agentd.conf.d目錄下添加監控項配置文件鍵值 [root@VM_0_10_centos alertscripts]# cd /usr/local/etc/zabbix_agentd.conf.d/ # 這里為鍵值,nginx_status為agentd.conf.d目錄下的文件對應,后面值為nginx_status.sh腳本路徑 [root@VM_0_10_centos zabbix_agentd.conf.d]# vi nginx_status UserParameter=nginx_status[*],/usr/local/share/zabbix/alertscripts/ngx_status.sh $1 # 配置好之后重啟zabbix_agentd [root@VM_0_10_centos zabbix_agentd.conf.d]# killall zabbix_agentd [root@VM_0_10_centos zabbix_agentd.conf.d]# zabbix_agentd  [root@VM_0_10_centos zabbix_agentd.conf.d]# ss -tulpn | grep zabbix_agentd

3. zabbix_server服務端通過zabbix_get測試獲取數據

# zabbix_get -s 監控主機 -k key名
[root@VM_0_10_centos zabbix_agentd.conf.d]# zabbix_get -s 被監控agentd主機ip -k nginx_status[active]
5

PS:服務端獲取數據正確之后,在web頁面進行配置

4. web頁面配置監控nginx操作

1)添加主機,這里我已經添加了,就不在重復操作

2)添加監控模板

  配置==》模板 ==》創建模板

 填寫對應的信息,確認無誤點擊更新

3) 創建應用集

點擊應用集==》創建應用集

4)創建監控項

點擊監控項進入==》創建監控項

 這里以active為例,其余一樣創建即可,這里的鍵值要和我們創建的鍵值文件名稱一致

創建后如下圖:

5)創建圖形

6)將模板鏈接到被監控主機

 

 

 7)查看數據

8)創建聚合圖形

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PS:其余的一樣添加

最終結果為:

至此,nginx的監控就配置完成了

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM