zabbix監控nginx


nginx是常用的web服務器,需要使用zabbix監控nginx,首先nginx需要配置ngx_status ,使nginx支持采集數據(開啟監控頁面)

如果是編譯安裝的nginx,你編譯安裝的時候需要增加編譯模塊參數--with-http_stub_status_module

官方配置說明http://nginx.org/en/docs/http/ngx_http_stub_status_module.html

可以采集到的指標類型

Active connections

當前活動客戶端連接的數量,包括Waiting連接

accepts

接受的客戶端連接的總數

Handled

已處理的連接總數。通常,參數值與accepts 除非達到某些資源限制(例如, worker_connections限制)相同

requests

客戶端請求的總數

Reading

當前nginx正在讀取請求頭的連接數

Writing

當前nginx將響應寫回客戶端的連接數

Waiting

當前等待請求的空閑客戶端連接數

1、在agent端啟用nginx的status模塊

編輯nginx配置文件

[root@web01 ~]# vim /etc/nginx/nginx.conf

location /ngx_status {

stub_status ;    #開啟訪問功能stub_status功能

access_log off;    #關閉訪問日志

allow 127.0.0.1;    #允許訪問的ip

allow 10.0.0.0/24;    

deny all;    #拒絕除了允許的ip外的所有ip訪問

}

修改完后重啟nginx

[root@web01 ~]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@web01 ~]# nginx -s reload

2、命令行手動測試取值

[root@web01 ~]# curl http://127.0.0.1/ngx_status

Active connections: 1

server accepts handled requests

81 81 135

Reading: 0 Writing: 1 Waiting: 0

3、定義監控項的key值並編寫腳本

創建zabbix_agentd關聯nginx status的子配置文件

[root@web01 ~]# cd /etc/zabbix/zabbix_agentd.d/

[root@web01 zabbix_agentd.d]# vim ngx_status.conf

UserParameter=nginx.status[*],/service/scripts/ngx_status.sh $1        #定義key為nginx.status,傳入參數$1

[root@web01 zabbix_agentd.d]# systemctl restart zabbix-agent.service    #重啟服務

編寫腳本對每一個指標進行取值

[root@web01 scripts]# pwd

/service/scripts

[root@web01 scripts]# vim ngx_status.sh

#!/bin/bash

HOST="127.0.0.1"

PORT="80"

# 檢測nginx進程是否存在

function ping {

/sbin/pidof nginx | wc -l

}

# 檢測nginx性能

function active {

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

}

function reading {

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

}

function writing {

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

}

function waiting {

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

}

function accepts {

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

}

function handled {

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

}

function requests {

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

}

# 執行function

$

為腳本添加執行權限

[root@web01 scripts]# chmod +x ngx_status.sh

[root@web01 scripts]# ll

總用量 4

-rwxr-xr-x 1 root root 978 6月 13 10:13 ngx_status.sh

4、web界面配置或導入模板

模板的配置可以選擇手動配置,手動配置模板的步驟不做過多介紹。

另外一種方式為導入配置好的模板

點擊:配置——>模板——>導入,選擇下載的模板文件並上傳

5、主機鏈接模板

選擇需要監控nginx的主機,鏈接nginx模板

6、測試和檢查

在zabbix server端測試通過命令行任選一個監控項進行測試

[root@zabbix ~]# zabbix_get -s 192.168.1.7 -k nginx.status[requests]

470

測試成功后到web界面查看最新數據

對多個主機監控

server端增加監控項(模板),鏈接所有需要監控的主機

7、模板調整和優化

7.1 添加計算類型的監控項,得到nginx請求丟失數

對nginx的監控不僅僅是采集到上面每一項的數值,常常需要更直觀的查看到某些數據,例如需要得到nginx請求丟失數,這就需要自定義一個計算類型的監控項,計算方法為已處理的連接總數(Handled)-接受的客戶端連接的總數(accepts)

關於計算監控項:https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes/calculated

點擊:配置——>模板,找到上面導入的nginx模板,點擊監控項——>創建監控項

公式為last("web01:nginx.status[handled]")-last("web01:nginx.status[accepts]")

7.2 通過zabbix內置key,net.tcp.listen[port],監控nginx 80端口是否存在

命令行測試:

[root@zabbix ~]# zabbix_get -s 192.168.1.7 -k "net.tcp.listen[80]"

1

web界面新增監控項

查看值這一項選擇值映射即Service state服務狀態

刷新zabbix_server的緩存得到最新數據

[root@zabbix ~]# zabbix_server -R config_cache_reload

zabbix_server [30663]: command sent successfully

采集到的最新數據如下

7.3 通過zabbix內置key,proc.num[<name>,<user>,<state>,<cmdline>],監控nginx的進程數

命令行測試

[root@zabbix ~]# zabbix_get -s 192.168.1.7 -k "proc.num[nginx]"

2        #nginx默認的進程數量為worker和master兩個

這里的nginx進程數為2,這個值是在nginx配置文件中設置不變的(worker_processes)

此值長期不變,也可以不進行監控

7.4 創建觸發器

根據實際情況創建需要的觸發器觸發報警

 

博主原創文章,轉載請務必注明出處


免責聲明!

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



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