1.系統(tǒng)環(huán)境
1.1 軟件及其版本
軟件 | 版本 |
---|---|
OS | Centos6.8-2.6.32-642.el6.x86_64 |
zabbix | zabbix-3.2.4.tar.gz |
web | nginx-1.10.3.tar.gz |
mysql | mysql-5.5.53-linux2.6-x86_64.tar.gz |
php | php-5.5.38.tar.gz |
1.2 軟件安裝路徑
zabbix安裝在/usr/local/zabbix
路徑下朗伶,其相關(guān)配置文件及二進制執(zhí)行程序都放置其中好渠。
nginx安裝在/usr/local/nginx
下昨稼,其相關(guān)配置文件及二進制執(zhí)行程序都放置其中。
php安裝在/usr/local/php
下拳锚,其相關(guān)配置文件及二進制執(zhí)行程序都放置其中假栓。
繼續(xù)后面的操作前,請確認nginx和php-fpm的服務(wù)端口都處于監(jiān)聽狀態(tài)晌畅。
2. 配置nginx的status
2.1 確認nginx的status已編譯到程序包中
使用nginx -V
可以查看nginx是否將模塊·http_stub_status_module`編譯進包中:
[root@monitor-server2 zabbix_agentd.conf.d]# nginx -V
nginx version: nginx/1.10.3
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx-1.10.3
--with-http_ssl_module
--with-http_stub_status_module --with-pcre
#出現(xiàn)with-http_stub_status_module說明已裝載status模塊
2.2 啟用nginx的status模塊
-
修改nginx.conf文件
一般在默認主機中增加如下location即可:
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.249.0/24;
deny all;
-
查看nginx status
nginx配置文件修改完成以后但指,使用nginx -t
測試配置文件是否有明顯邏輯及語法錯誤,沒有問題則重載配置文件抗楔。
nginx -t
nginx -s reload
然后使用瀏覽器或者curl
指令查看nginx status:
[root@monitor-server2 zabbix_agentd.conf.d]# curl localhost/nginx_status
Active connections: 2
server accepts handled requests
1585 1585 7785
Reading: 0 Writing: 1 Waiting: 1
2.3 nginx status數(shù)值的含義說明
字段 | 含義 |
---|---|
Active connections | 當前的活動連接數(shù)棋凳,包含處于等待狀態(tài)的連接 |
accepts | 接收到的客戶端發(fā)來的連接數(shù) |
handled | 已經(jīng)處理完成的連接數(shù),一般情況下它和accepts值相同连躏,如果不同說明nginx性能出現(xiàn)瓶頸 |
requests | 客戶端請求總數(shù) |
reading | 正在讀取請求頭信息的連接數(shù) |
writing | 正在發(fā)送響應(yīng)報文的連接數(shù) |
waiting | 處于閑置狀態(tài)正等待客戶端發(fā)送請求的連接數(shù) |
3. 配置php-fpm的status
php-fpm自帶的有用于查詢其工作狀態(tài)的頁面剩岳,需要進行如下 兩步,以啟用這一功能入热。
3.1 啟用php-fpm status頁面
修改php-fpm.conf
文件拍棕,去掉status頁面的注釋,并可以根據(jù)需要將其改名勺良。操作如下:
vim /usr/local/php/etc/php-fpm.conf
pm.status_path = /php_fpm-status
#去掉了前面的;注釋符绰播,并更名為php_fpm-status
3.2 查看php-fpm的status
修改完php-fpm.conf
后,使用service php-fpm reload
重新加載配置文件尚困,然后在瀏覽器或者使用curl
指令查看php-fpm的status蠢箩。操作如下:
[root@monitor-server2 zabbix_agentd.conf.d]# curl localhost/php_fpm-status
pool: www
process manager: dynamic
start time: 01/May/2017:15:14:23 +0800
start since: 29536
accepted conn: 5947
listen queue: 0
max listen queue: 3
listen queue len: 128
idle processes: 2
active processes: 1
total processes: 3
max active processes: 3
max children reached: 0
slow requests: 0
php-fpm的status可以查看匯總信息和詳細信息,詳細信息比匯總信息要多出每一個php-fpm進程的相關(guān)信息事甜,同時支持多種格式輸出谬泌,如xml、html和json逻谦,默認情況下分別使用如果指令即可:
Examples for summary status page:
http://example.com/status
http://example.com/status?json
http://example.com/status?html
http://example.com/status?xml
Example for detailed status page:
http://example.com/status?full
http://example.com/status?json&full
http://example.com/status?html&full
http://example.com/status?xml&full
使用何種格式查看status決定了后續(xù)使用zabbix進行監(jiān)控獲取status數(shù)值的方式掌实。本文以上述curl localhost/php_fpm-status
的輸出為例。
3.3 php-fpm status的含義
字段 | 含義 |
---|---|
pool | php-fpm pool的名稱邦马,大多數(shù)情況下為www |
process manager | 進程管理方式贱鼻,現(xiàn)今大多都為dynamic宴卖,不要使用static |
start time | php-fpm上次啟動的時間 |
start since | php-fpm已運行了多少秒 |
accepted conn | pool接收到的請求數(shù) |
listen queue | 處于等待狀態(tài)中的連接數(shù),如果不為0忱嘹,需要增加php-fpm進程數(shù) |
max listen queue | 從php-fpm啟動到現(xiàn)在處于等待連接的最大數(shù)量 |
listen queue len | 處于等待連接隊列的套接字大小 |
idle processes | 處于空閑狀態(tài)的進程數(shù) |
active processes | 處于活動狀態(tài)的進程數(shù) |
total processess | 進程總數(shù) |
max active process | 從php-fpm啟動到現(xiàn)在最多有幾個進程處于活動狀態(tài) |
max children reached | 當pm試圖啟動更多的children進程時嘱腥,卻達到了進程數(shù)的限制,達到一次記錄一次拘悦,如果不為0,需要增加php-fpm pool進程的最大數(shù) |
slow requests | 當啟用了php-fpm slow-log功能時橱脸,如果出現(xiàn)php-fpm慢請求這個計數(shù)器會增加础米,一般不當?shù)腗ysql查詢會觸發(fā)這個值 |
4. 編寫status數(shù)據(jù)提取腳本
在適當?shù)奈恢茫话闶?code>/usr/local/zabbix/bin里準備腳本用于提取status里每個字段的數(shù)值添诉。
4.1 nginx的status數(shù)值提取腳本
此腳本為/usr/local/zabbix/bin/nginx_status.sh
屁桑,其內(nèi)容如下:
#!/bin/bash
#check nginx status
ip=127.0.0.1
function ping() { #用于檢測nginx進程是否存在
/sbin/pidof nginx | wc -l
}
function active() { #用于提取status中的active數(shù)值
/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n '1p' | awk '{print $NF}'
}
function accepts() { #用于提取status中的accepts數(shù)值
/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n '3p' | awk '{print $1}'
}
function handled() { #用于提取status中的handled數(shù)值
/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n '3p' | awk '{print $2}'
}
function requests() { #用于提取status中的request數(shù)值
/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n '3p' | awk '{print $3}'
}
function reading() { #用于提取status中的reading數(shù)值
/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n '4p' | awk '{print $2}'
}
function writing() { #用于提取status中的writing數(shù)值
/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n '4p' | awk '{print $4}'
}
function waiting() { #用于提取status中的waiting數(shù)值
/usr/bin/curl http://$ip/nginx_status 2>/dev/null | sed -n '4p' | awk '{print $6}'
}
$1 #通過第一個位置參數(shù)的值來調(diào)用相應(yīng)的函數(shù)
4.2 php-fpm status數(shù)值提取腳本
php-fpm status數(shù)值提取腳本為/usr/local/zabbix/bin/php_fpm_status.sh
,內(nèi)容如下:
#!/bin/bash
#check php-fpm status
case $1 in
ping) #檢測php-fpm進程是否存在
/sbin/pidof php-fpm | wc -l
;;
start_since) #提取status中的start since數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==4{print $3}'
;;
conn) #提取status中的accepted conn數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==5{print $3}'
;;
listen_queue) #提取status中的listen queue數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==6{print $3}'
;;
max_listen_queue) #提取status中的max listen queue數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==7{print $4}'
;;
listen_queue_len) #提取status中的listen queue len
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==8{print $4}'
;;
idle_processes) #提取status中的idle processes數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==9{print $3}'
;;
active_processes) #提取status中的active processes數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==10{print $3}'
;;
total_processes) #提取status中的total processess數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==11{print $3}'
;;
max_active_processes) #提取status中的max active processes數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==12{print $4}'
;;
max_children_reached) #提取status中的max children reached數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==13{print $4}'
;;
slow_requests) #提取status中的slow requests數(shù)值
/usr/bin/curl localhost/php_fpm-status 2>/dev/null | awk 'NR==14{print $3}'
;;
*)
echo "Usage: $0 {conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processess|total_processes|max_active_processes|max_children_reached|slow_requests}"
exit 1
;;
esac
5. 創(chuàng)建zabbix_agentd的子配置文件
在/usr/local/zabbix/etc/zabbix_agentd.d/
中創(chuàng)建關(guān)聯(lián)nginx status和php-fpm status的子配置文件栏赴,創(chuàng)建一個蘑斧,或者在已有的某配置文件中增加也可以,我這里分別為它們創(chuàng)建配置文件须眷,文件名可自定義竖瘾,只要確保此文件夾全部內(nèi)容在zabbix_agentd.conf
中包含(include)了。
5.1 userparameter_nginx.conf
[root@monitor-server2 zabbix_agentd.conf.d]# cat userparameter_nginx.conf
#/usr/local/zabbix/bin/nginx_status.sh
UserParameter=nginx.status[*],/usr/local/zabbix/bin/nginx_status.sh $1
#這種寫法比較簡潔花颗,參考zabbix 3.2.4中自帶的的userparameter_examples.conf
UserParameter=nginx.version,/usr/local/nginx/sbin/nginx -v
#讓zabbix-agentd獲取nginx的版本信息 捕传,一切shell指令都推薦使用絕對路徑
5.2 userparameter_php-fpm.conf
[root@monitor-server2 zabbix_agentd.conf.d]# cat userparameter_php-fpm.conf
#/usr/local/zabbix/bin/php_fpm_status.sh
UserParameter=php-fpm.status[*],/usr/local/zabbix/bin/php_fpm_status.sh $1
UserParameter=php-fpm.version,/usr/local/php/sbin/php-fpm -v | awk 'NR==1{print $0}'
#獲取php-fpm版本信息
5.3 確認子配置文件被zabbix_agentd配置文件包含
確認在/usr/local/zabbix/etc/zabbix_agentd.conf
中包含:Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
且沒有被注釋。
6. 重啟zabbix_agentd服務(wù)
service zabbix_agentd restart
讓zabbix_agentd加載新的配置文件扩劝。
7. 測試zabbix_get能否取到數(shù)據(jù)
在zabbix server上使用如下指令測試能否獲取到nginx和php-fpm status數(shù)值庸论。
[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k 'nginx.status[ping]'
1
[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k 'nginx.status[active]'
6
[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k 'nginx.status[requests]'
1841
[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k 'php-fpm.status[ping]'
1
[root@monitor-server2 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k 'php-fpm.status[conn]'
1247
注意:
-
zabbix_get
指令在zabbix server上運行。 - userparameter_*.conf文件位于zabbix_agentd端棒呛。
- nginx_status.sh和php_fpm_status.sh位于zabbix_agentd端聂示。
-
zabbix-get
后-s
指定的ip為zabbix-agentd的監(jiān)聽ip。
8. zabbix server上配置相應(yīng)的模板
這里的模板包含對nginx status和php-fpm status要監(jiān)控的item
簇秒、trigger
鱼喉、Graphs
等一系列內(nèi)容。對于在zabbix server上新增要監(jiān)控的內(nèi)容宰睡,最好的辦法就是從模板開始蒲凶,然后按照順序依次配置相應(yīng)內(nèi)容,無需去網(wǎng)上找現(xiàn)成的模板導(dǎo)入拆内,對于系統(tǒng)的監(jiān)控按需配置是最好的旋圆。下面是相應(yīng)的操作過程。
8.1 添加nginx status監(jiān)控模板
8.2 添加php-fpm status監(jiān)控模板
php-fpm status的模板添加步驟和上述方法一樣灵巧,此處不在贅述搀矫。
8.3 選擇相應(yīng)的主機或主機組關(guān)聯(lián)上相應(yīng)的模板
9. 實際監(jiān)控效果展示
查看監(jiān)控效果可以通過查看Monitoring
---->Latest data
,過濾出相應(yīng)的主機及應(yīng)用名進行查看刻肄,最新收集的各item的監(jiān)控結(jié)果瓤球,凡是監(jiān)控到數(shù)據(jù)的item會顯示數(shù)據(jù),出現(xiàn)灰色的表示沒有監(jiān)控到數(shù)據(jù)敏弃,需要排查原因卦羡。如下所示:
也可以通過定義的
Graphs
查看監(jiān)控效果:
10. 小結(jié)
zabbix中要實現(xiàn)對用戶自定義的item的監(jiān)控,大致過程如下:
- 啟用相應(yīng)軟件的性能統(tǒng)計功能
- 編寫性能統(tǒng)計數(shù)據(jù)提取腳本
- 配置自定義的userparameter conf文件
- 重啟zabbix_agentd服務(wù)
- zabbix server web上添加相應(yīng)的模板
- 給主機或主機組調(diào)用模板