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 創建觸發器
根據實際情況創建需要的觸發器觸發報警
博主原創文章,轉載請務必注明出處