如何基於ARMS快速實現一個基於Nginx的網站監控場景 – 操作篇
本文介紹ARMS如何實現Nginx的監控場景,對於ARMS本文主要解決的問題,還記得小明的老板給他布置的任務嗎?需求回顧
1. ARMS的Nginx監控方案概述和準備
目前在監控領域上比較流行的數據處理方法有很多種,例如,搜索引擎,時間序列數據庫,實時計算,甚至是大數據離線計算,等。
ARMS采用的是實時計算+列式存儲。這種方案的優勢是數據實時性高,而且對於固定的數據查詢接口查詢效率非常塊。在Nginx的監控方案中,其架構概要如下所示, 藍色部分為ARMS所集成的Nginx監控開箱即用的黑盒。
由於ARMS的分析是針對Nginx的accee.log日誌,因此對Nginx日誌有一定要求,需要用戶在nginx.config中配置出打印內容,包括:“$upstream_response_time” “$request_time”等代表請求消耗時間的日誌信息。如下例:
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$upstream_response_time" "$request_time" "$ user_cookie_id"' ;
這樣的話,打印出的日誌,大致如下表所示。
58.211.119.29 144288 - [16/Mar/2017:21:47:07 +0800] "POST https://arms.console.aliyun.com/api/query.json?action=DataQueryAction&eventSubmitDoQueryData=1" 200 594 "https://arms.console.aliyun.com/" "127.0.0.1:8080" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4" "0.144" "0.144" "EX866MB1-Y70JO57WM37ST3HWDVFK3-JWPNH30J-Z"
58.211.119.29 148219 - [16/Mar/2017:21:47:08 +0800] "POST https://arms.console.aliyun.com/api/query.json?action=DataQueryAction&eventSubmitDoQueryData=1" 200 583 "https://arms.console.aliyun.com/" "127.0.0.1:8080" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4" "0.148" "0.148" "EX866MB1-Y70JO57WM37ST3HWDVFK3-JWPNH30J-Z"
完成上述日誌配置定製以後,即可開始在ARMS上進行配置。以下篇幅從ARMS數據集,報警,和交互大盤,三個部分進行配置概要描述。關於數據源如何添加到ARMS可參見文檔,在此不贅述。
2. 基於ARMS的Nginx監控 數據集實現
在Nginx監控模板中,用戶數據分為兩類,一類是指標,相當於數據倉庫中的Measure;一類是維度,相當於數據倉庫中的Dimension。
對於Nginx監控,最常見的指標為以下幾類指標:
頁麵的PV, UV
- PV: 頁麵的PV通過對access.log中的每一條日誌做count來統計,
- UV: 通過日誌中代表用戶ID的對應的$cookie_id來做count distinct來統計。對應的cookie_id需要開發人員進行手動統計。
頁麵響應時間
- 平均頁麵響應時間: 在ARMS中通過對$request_time做sum操作來統計出total_request_time,然後在通國際total_request_time / pv來得到某維度下的瓶平均響應時間。
- 最大響應時間: 則對單條日誌request_time進行max統計。
頁麵流量
- 平均頁麵流量和最大頁麵流量:針對 $body_bytes_sent來進行統計。統計方式和頁麵響應時間類似,不贅述。
對於Nginx監控,最常見的維度有以下幾類:
- 頁麵URL: $request。用戶可以針對特定URL進行訪問統計,甚至可以在不同URL之間進行訪問排行。
- 頁麵返回狀態:$status。用戶可以針對不同的返回值維度進行統計,如僅統計200返回值的正常頁麵訪問情況,或是非200返回值的錯誤頁麵訪問情況。
- 瀏覽器類型:根據 $http_user_agent 統計出的用戶的瀏覽器客戶端,如Chrome, Sofari, IE, Firefox, 甚至Curl命令,等。用戶可以根據此類維度統計客戶端的分布情況。
- 用戶ID:根據 $cook_id 統計出的用戶的使用習慣,如哪一類頁麵被哪一些用戶經常訪問,等。
對於ARMS的數據集設計,其實就是針對用戶感興趣的Nginx監控結果,進行各類維度的排列組合。
- 例如,以頁麵URL維度,統計UV, PV,頁麵響應時間,則可以統計出不同頁麵的各自的UV, PV和頁麵響應時間,甚至根據例如PV進行TopN排行。
下圖是一個數據集配置的例子,該數據集配置出兩個維度: URL和Status (支持由URL下鑽到Status的查詢方式),分別統計兩個指標:PV和UV。這樣用戶可以依次下鑽頁麵路徑和返回值來查詢PV, UV情況。
下圖是另個數據集配置的例子,該數據集配置出和上例相同但是順序相反的兩個維度: Status和URL (支持由Status下鑽到URL的查詢方式),分別統計兩個指標:PV,平均響應時間,最高響應時間 。其中,平均調用時間是複合指標,由 總體調用時間 / PV 間接得出。
3. 基於ARMS的Nginx監控 報警實現
常見的Nginx報警有以下幾種:
某類頁麵的響應時間過長。
某類頁麵的錯誤率頁麵過高。
使用ARMS的原生報警的一些特性天然支持Nginx監控報警的各種場景。以下舉例。支持某類指標的維度下鑽遍曆
例如檢查(遍曆)所有頁麵維度的響應時間是否超過100ms.支持不同指標之間的複合計算
典型如錯誤碼為5xx占總調用的占比,通過不同指標複合計算而得。支持各種其他報警高級報警配置
包括最近N分鍾同比,環比,最大,最小值比較,等。例如,最近5分鍾同比PV下跌50%這種典型的場景。
以下例子結合以上三個特點,介紹了一種如何在ARMS定義”任意URL調用一分鍾500返回占比超過10%”的報警定義例子,如下所示。
4. 基於ARMS的Nginx監控大盤配置
監控大盤一般有以下幾個用途:
-
掛在作戰室,全麵掌控運行狀態。
-
用於實時查看,並下鑽分析每個具體用戶或網頁的網站實際使用情況。
針對Nginx監控,ARMS可以基於類似用戶維度,頁麵維度,IP維度,甚至地域維度,展示不同的數據。以展示用戶總體UV, PV為例,假設對應的數據集為”整站UV PV”,則配置如下:
集成各類UV, PV,響應時間等統計的最終交互式大盤效果圖如下:
5. 馬上快速上手
以上各類Nginx監控場景,目前在ARMS上已有成熟商業模板支持,用戶隻需要在ARMS首頁點擊 “新建標準模板監控”,並選擇Nginx高級模板,即可。幫助文檔
其他解決方案推薦閱讀
1. 如何快速構建全渠道零售平台
2. 針對移動互聯網&物聯網場景的消息服務解決方案
3. 如何高效處理 IOT 中的數據與消息
4. Dubbo的商業化解決方案
5. 麵向萬物互聯的高性能時序數據庫 HiTSDB
6. 打造立體化監控體係的最佳實踐
7. 淺談性能測試 PTS
8. 全麵了解企業級互聯網架構和阿裏雲中間件產品
最後更新:2017-07-05 18:02:27