zabbix自定義監控nginx
nginx配置ngx_status
1.編譯安裝時帶上--with-http_stub_status_module參數
2.vi nginx.conf
location ~* ^/ngx_status { stub_status on; access_log off; #allow 127.0.0.1; #deny all; }
3.檢測nginx狀態配置
#curl 127.0.0.1/ngx_status Active connections: 1 server accepts handled requests request_time235587 235587 1393175 83746941 Reading: 0 Writing: 1 Waiting: 0
編寫zabbix客戶端腳本
vi /usr/local/zabbix-agent/shell/nginx_check.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 $1
這裏用./nginx_check.sh ping測試
shell腳本報錯:bash: ./nginx_check.sh: /bin/bash^M: bad interpreter: No such file or directory
原因是nginx_check.sh是在windows下編輯然後上傳到linux系統裏執行的。.sh文件的格式為dos格式。而linux只能執行格式為unix格式的腳本。
解決:用dos2unix命令修改
#dos2unix xxx.sh
再用./nginx_check.sh ping測試,通過
配置自定義UserParameter加入zabbix客戶端zabbix_agentd.conf
為什麽要自定義KEY
有時候我們想讓被監控端執行一個zabbix沒有預定義的檢測,zabbix的用戶自定義參數功能提供了這個方法。我們可以在客戶端配置文件zabbix_angentd.conf裏面配置UserParameter.
語法:UserParameter=key,command
用戶自定義參數包含一個key和一個命令,key必須整個系統唯一,配置好之後,重啟客戶端。
這裏我們vi zabbix_agentd.conf,加入:
UserParameter=nginx.status[*],/usr/local/zabbix-agent/shell/nginx_check.sh $1
nginx.status[*]這些key將由zabbix agent執行後面的shell腳本返回,最大可以返回512KB的數據。
然後需要重啟zabbix_agentd.
zabbix服務端用zabbix_get測試獲取數據
zabbix_get 是 zabbix 服務端的一個命令,用於檢測 agent 端的配置是否正確,可以很方便地知道 key 是否能正常獲取到數據,在測試自定義監控的時候特別有用
[root@xxxx ~]# zabbix_get -h Zabbix get v2.2.17 (revision 65977) (27 February 2017) usage: zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key> Options: -s --host <host name or IP> Specify host name or IP address of a host # agent 端的 ip -p --port <port number> Specify port number of agent running on the host. Default is 10050 #agent 監聽的端口 默認是10050 -I --source-address <IP address> Specify source IP address # 如果server 端有多個網卡 可以指定通過哪個網卡進行數據獲取 -k --key <key of metric> Specify key of item to retrieve value for # 執行的參數,即key -h --help Give this help -V --version Display version number # 例子 Example: zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"
在服務端測試:
zabbix操作後臺導入nginx模板
配置--模板--導入
給該主機添加nginx的自定義監控模板
完成後查看圖形
zabbix自定義監控nginx