1.監控原理
通過status模塊監控(--with-http_stub_status_module)

2.修改nginx配置(/etc/nginx/conf.d/default.conf)
在被監控的主機上修改nginx配置文件,在配置文件中添加(一個location)下面的內容,修改后記得重啟nginx服務:
location /nginx_status {
stub_status on;
allow 192.168.10.100; #表示允許該主機訪問url:http://192.168.10.100/nginx_status
allow 192.168.10.2;
access_log off;
}
3.添加監控腳本
在nginx服務器主機上添加監控nginx腳本(/etc/zabbix/zabbix_agent.d/nginx_status.sh,同時賦予該腳本可執行權限chmod a+x nginx_status.sh
#!/bin/bash
#Script to fetch nginx statuses for monitoring systems
HOST="192.168.10.100" #IP地址為裝有nginx服務的主機地址
PORT="80"
function ping {
/sbin/pidof nginx | wc -l
}
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}'
}
$1
4.進行訪問測試檢測
[root@zabbix-server-center alertscripts]# curl http://192.168.10.100/nginx_status #IP地址為nginx服務器的主機地址 Active connections: 1 server accepts handled requests 1 1 1 Reading: 0 Writing: 1 Waiting: 0
5.檢測腳本測試
關於nginx狀態的一些概念:
Active connections Nginx正處理的活動鏈接數個數;重要 server Nginx啟動到現在共處理了多少個連接。 accepts Nginx啟動到現在共成功創建幾次握手。 handled requests Nginx總共處理了幾次請求。 Reading Nginx讀取到客戶端的 Header 信息數。 Writing Nginx返回給客戶端的 Header 信息數。 Waiting Nginx已經處理完正在等候下一次請求指令的駐留鏈接,開啟。 Keep-alive的情況下,Waiting這個值等於active-(reading + writing)。 請求丟失數=(握手數-連接數)可以看出,本次狀態顯示沒有丟失請求。
[root@zabbix-server-center alertscripts]# sh nginx_status.sh active 1 [root@zabbix-server-center alertscripts]# sh nginx_status.sh reading 0 [root@zabbix-server-center alertscripts]# sh nginx_status.sh writing 1 [root@zabbix-server-center alertscripts]# sh nginx_status.sh accepts 20
6.在裝有nginx服務的主機上修改zabbix_agentd.conf配置文件(/etc/zabbix/zabbix_agentd.conf)
修改:UnsafeUserParameters 等於 1 :UnsafeUserParameters=1
7.添加zabbix配置文件,放於 /etc/zabbix/zabbix_agentd.d/目錄下(agent的配置文件 /etc/zabbix/zabbix_agentd.conf 中定義了其他key的包含目錄)創建配置文件nginx_status.conf
添加:UserParameter=nginx[*], /etc/zabbix/zabbix_agentd.d/nginx_status.sh $1
#后面路徑是監控腳本的位置

8.重啟zabbix-agent服務
[root@ansible-control zabbix_agentd.d]# systemctl restart zabbix-agent.service
9.在zabbix server服務器上測試,是否能正常獲取數據
[root@zabbix-server-center /]# zabbix_get -s 192.168.10.100 -p 10050 -k nginx.status[ping] 1 [root@zabbix-server-center /]# zabbix_get -s 192.168.10.100 -p 10050 -k nginx.status[requests] 2304 [root@zabbix-server-center /]# zabbix_get -s 192.168.10.100 -p 10050 -k nginx.status[accepts] 6285 [root@zabbix-server-center /]# zabbix_get -s 192.168.10.100 -p 10050 -k nginx.status[handled] 6286
7.進入zabbix界面配置監控模板
(1)創建模板:

(2)添加應用集:

(3)創建監控項:

(4)創建多個監控項:

(5)創建觸發器:觸發器實時監控 Nginx 的存活狀態,Nginx 一旦 Dump 機,就會發生報警。

(6)創建圖形:

8.將模板應用在裝有Nginx服務的主機

9.查看監控圖形

10.如果剛開始數值比較小,不利於查看圖形,可以使用ab進行簡單的壓力測試(主要是requests),再查看數值變化
-n:在測試會話中所執行的請求個數。默認時,僅執行一個請求。
-c:一次產生的請求個數。默認是一次一個。
[root@zabbix-server-center /]# ab -n 1000 -c 1000 http://192.168.10.100:80/nginx_status
[root@zabbix-server-center /]# ab -n 1000 -c 1000 http://192.168.10.100:80/nginx_status
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.10.100 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.17.1
Server Hostname: 192.168.10.100
Server Port: 80
Document Path: /nginx_status
Document Length: 106 bytes
Concurrency Level: 1000
Time taken for tests: 0.331 seconds
Complete requests: 1000
Failed requests: 819
(Connect: 0, Receive: 0, Length: 819, Exceptions: 0)
Write errors: 0
Total transferred: 253092 bytes
HTML transferred: 109092 bytes
Requests per second: 3016.63 [#/sec] (mean)
Time per request: 331.496 [ms] (mean)
Time per request: 0.331 [ms] (mean, across all concurrent requests)
Transfer rate: 745.59 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 3 31 15.1 26 69
Processing: 26 90 68.1 62 253
Waiting: 1 90 68.2 62 253
Total: 72 121 64.4 91 282
Percentage of the requests served within a certain time (ms)
50% 91
66% 103
75% 109
80% 113
90% 239
95% 280
98% 282
99% 282
100% 282 (longest request)

值得參考的帖子:https://cloud.tencent.com/developer/article/1400917
11.關於Nginx的一個告警測試
進入模板選擇nginx-status模板,添加觸發器,表示requests大於500就發送郵件報警。

在zabbix服務器上使用ab命令進行瘋狂壓力測試(發送requests請求),不一會requests請求就超過500,隨后就會收到報警郵件。
[root@zabbix-server-center /]# ab -n 1000 -c 1000 http://192.168.10.100:80/nginx_status

