zabbix監控nginx的大概流程為:
1:被監控端的nginx開啟stub_status模塊
2:通過腳本的方式獲取nginx的狀態值
3:修改被監控端的配置文件,Userparameter=item.key[*],command
4:創建模版 添加應用集、監控項、觸發器、圖像等
5:添加主機,添加nginx模版,創建動作
6:測試
一、nginx的stub_stauts模塊
stub_status模塊主要用於查看nginx的一些狀態信息
http://nginx.org/en/docs/http/ngx_http_stub_status_module.html 官網關於stub_status模塊
1)若在機器上,還未安裝nginx,那么在編譯安裝的時候,要加上stub_status模塊參數
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/lnmp/pcre-7.9
2)若機器上已經安裝了nginx,查看是否安裝的時候,是否安裝了--with-http_stub_status_module
[root@lile Downloads]#/usr/local/nginx/sbin/nginx -V nginx version: nginx/1.8.0 built by gcc 4.4.720120313(RedHat4.4.7-16)(GCC) built with OpenSSL1.0.1e-fips 11Feb2013 TLS SNI support enabled configure arguments:--prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_ssl_module --with-pcre=/usr/local/lnmp/pcre-7.9
若沒有,那么進到安裝目錄執行(這里需要加的參數都要加上,而不是只加stub_status的)
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/lnmp/pcre-7.9
然后make,
不要make install
make
然后把新編譯的nginx替換到舊的(這里可以先把原來的nginx執行腳本備份一下)
cp /home/lile/nginx-1.8.0/objs/nginx /usr/local/nginx/sbin/nginx
這個時候再使用/usr/local/nginx/sbin/nginx -V 查看的時候,configure arguments這里就有stub_status的模塊參數了
3)修改nginx的配置文件,在server里加上:
location /ngx_status { stub_status on; access_log off; allow 127.0.0.1; allow 10.0.0.146; }
4)啟動nginx
5)瀏覽器訪問:
http://10.0.0.13/ngx_status ,返回這樣一個數據

我的理解的意思:(通過做實驗,理解出來的)
Active connections:當前活躍的客戶端連接數,比如打開了3個瀏覽器窗口
accepts:接受客戶端訪問的總次數
handled:處理的連接總次數
requests:客戶端請求的總次數
reading:nginx正在讀取請求頭的連接數
writing:nginx正將請求返回給客戶端的連接數
waiting:當前等待客戶端請求的空閑連接數
官網的解釋:

二、寫腳本,分別獲取上面的值
nginx.sh 把這個腳本放在被監控端的服務器,然后在配置文件里指定位置
#!/bin/bash Host=10.0.0.13 Port=80
ping(){ /bin/pidof nginx |wc -l } active(){ curl $Host:$Port/ngx_status 2>/dev/null |grep 'Active'|awk -F":"'{print $NF}' } Reading(){ curl $Host:$Port/ngx_status 2>/dev/null |grep 'Reading'|awk '{print $2}' } Writing(){ curl $Host:$Port/ngx_status 2>/dev/null |grep 'Writing'|awk '{print $4}' } Waiting(){ curl $Host:$Port/ngx_status 2>/dev/null |grep 'Waiting'|awk '{print $6}' } accepts(){ curl $Host:$Port/ngx_status 2>/dev/null |awk NR==3|awk -F" "'{print $1}' } handled(){ curl $Host:$Port/ngx_status 2>/dev/null |awk NR==3|awk -F" "'{print $2}' } requests(){ curl $Host:$Port/ngx_status 2>/dev/null |awk NR==3|awk -F" "'{print $3}' } $1
vim 除了:wq!保存退出
ZZ 也可以保存退出
三、修改被監控端的zabbix-agent的配置文件:
添加UserParameter值 vim zabbix-agent/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log Server=10.0.0.146 ServerActive=10.0.0.146 Hostname=Zabbix agent1 UserParameter=nginx.status[*],/home/lile/zabbix-agent/nginx.sh $1
UserParameter:用戶自定義key
格式:
UserParameter=key[],command
key:[*] key里可以傳遞多個參數,item-key
command:key里傳遞的參數分別對應$1,$2......
四、測試
在zabbix服務端,使用zabbix-get命令進行檢測:
使用方法:
[root@lile alertscripts]#/usr/local/zabbix-3.2.6/bin/zabbix_get usage: zabbix_get -s host-name-or-IP [-p port-number][-I IP-address]-k item-key zabbix_get -h zabbix_get -V
在服務端先使用zabbix-get檢測看是否能得到值:只有這樣能到到返回值,才能在zabbix界面顯示出來
[root@lile alertscripts]#/usr/local/zabbix-3.2.6/bin/zabbix_get -s 10.0.0.13-k 'nginx.status[accepts]' 43
五:創建nginx模版
1:創建模版


2:在剛剛的nginx模版上創建應用集

3:創建監控項,把所有的需要監控的創建監控項,鍵值就是我們在配置文件里寫的item-key,我的是nginx.status[*],把所有的全部創建起來 active Reading Writing Waiting accepts handled requests


4:創建觸發器,我這里只是對nginx進程不存在的進行觸發,這里的表達式根據腳本里寫的ping函數,他的返回值來進行修改

5:創建圖形
對剛剛nginx進程存不存在創建圖像

其他狀態信息創建一個圖形

六、使用這個nginx模版
和原來的一樣,進行測試
1:添加主機
2:在這個主機上添加nginx模版
3:添加動作
4:分別在被監控的主機上停止和啟動nginx,進行測試,看是否會報警
這是恢復的報警
