使用zabbix監(jiān)控nginx和php-fpm性能


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)控模板

新建nginx status模板

定義nginx status模板
新建nginxApplication
定義nginx status items麸恍,這里我使用的是被動臨控
增加nginx status狀態(tài)碼映射
nginx trigger定義
定義nginx監(jiān)控視圖

8.2 添加php-fpm status監(jiān)控模板

php-fpm status的模板添加步驟和上述方法一樣灵巧,此處不在贅述搀矫。

8.3 選擇相應(yīng)的主機或主機組關(guān)聯(lián)上相應(yīng)的模板

給主機或主機組關(guān)聯(lián)模板

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ù)敏弃,需要排查原因卦羡。如下所示:

nginx的監(jiān)控數(shù)據(jù)

也可以通過定義的Graphs查看監(jiān)控效果:

nginx statur監(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)用模板
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末麦到,一起剝皮案震驚了整個濱河市绿饵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓶颠,老刑警劉巖拟赊,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粹淋,居然都是意外死亡吸祟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門桃移,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屋匕,“玉大人,你說我怎么就攤上這事谴轮〕次粒” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵第步,是天一觀的道長疮装。 經(jīng)常有香客問我,道長粘都,這世上最難降的妖魔是什么廓推? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮翩隧,結(jié)果婚禮上樊展,老公的妹妹穿的比我還像新娘。我一直安慰自己堆生,他們只是感情好专缠,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淑仆,像睡著了一般涝婉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔗怠,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天墩弯,我揣著相機與錄音吩跋,去河邊找鬼。 笑死渔工,一個胖子當著我的面吹牛锌钮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播引矩,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼梁丘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了旺韭?” 一聲冷哼從身側(cè)響起兰吟,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茂翔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體履腋,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡珊燎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了遵湖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悔政。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖延旧,靈堂內(nèi)的尸體忽然破棺而出谋国,到底是詐尸還是另有隱情,我是刑警寧澤迁沫,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布芦瘾,位于F島的核電站,受9級特大地震影響集畅,放射性物質(zhì)發(fā)生泄漏近弟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一挺智、第九天 我趴在偏房一處隱蔽的房頂上張望祷愉。 院中可真熱鬧,春花似錦赦颇、人聲如沸二鳄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽订讼。三九已至,卻和暖如春沪摄,著一層夾襖步出監(jiān)牢的瞬間躯嫉,已是汗流浹背纱烘。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祈餐,地道東北人擂啥。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像帆阳,于是被迫代替她去往敵國和親哺壶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容