日志服務支持通過數據接入向導配置采集Nginx日志,並自動創建索引和Nginx日志儀表盤,幫助您快速采集並分析Nginx日志。
許多個人站長選取了Nginx作為服務器搭建網站,在對網站訪問情況進行分析時,需要對Nginx訪問日志統計分析,從中獲取網站的訪問量、訪問時段等訪問情況。傳統模式下利用CNZZ等方式,在前端頁面插入js,用戶訪問的時候觸發js,但僅能記錄訪問請求。或者利用流計算、離線統計分析Nginx訪問日志,但需要搭建一套環境,並且在實時性以及分析靈活性上難以平衡。
日志服務在支持查詢分析實時日志功能,同時提供Nginx日志儀表盤(Dashboard),極大的降低了Nginx訪問日志的分析復雜度,可以用於便捷統計網站的訪問數據。本文檔以分析Nginx訪問日志為例,介紹日志分析功能在分析Nginx訪問日志場景下的詳細步驟。
應用場景
個人站長選取Nginx作為服務器搭建了個人網站,需要通過分析Nginx訪問日志來分析網站的PV、UV、熱點頁面、熱點方法、錯誤請求、客戶端類型和來源頁面制表,以分析、評估網站的訪問情況。
Nginx日志格式
為了更好滿足分析場景,推薦Nginx日志格式采用如下log_format
配置。
log_format main '$remote_addr - $remote_user [$time_local] "$request" $http_host ' '$status $request_length $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time $upstream_response_time';
各字段含義如下:
字段 | 含義 |
---|---|
remote_addr | 客戶端地址 |
remote_user | 客戶端用戶名 |
time_local | 服務器時間 |
request | 請求內容,包括方法名、地址和http協議 |
http_host | 用戶請求時使用的http地址 |
status | 返回的http狀態碼 |
request_length | 請求大小 |
body_bytes_sent | 返回的大小 |
http_referer | 來源頁 |
http_user_agent | 客戶端名稱 |
request_time | 整體請求延時 |
upstream_response_time | 上游服務的處理延時 |
采集Nginx日志
采集日志前,請確認您已創建Project和創建Logstore。
- 登錄日志服務控制台,單擊Project名稱。
- 在Logstore列表中,單擊指定Logstore對應的數據接入向導圖標。
日志服務提供數據接入向導快速接入Nginx在內的多種數據源。
- 選擇數據類型為Nginx訪問日志。
日志服務提供多種數據類型接入(雲產品、自建軟件、API、SDK等),分析NGINX訪問日志請選擇
- 數據源設置。
- 指定配置配置名稱和日志路徑。
- 將推薦的
log_format
日志格式填寫到NGINX日志格式中。圖 2. 配置數據源 - 確認Nginx鍵名稱。
日志服務會自動提取出Nginx日志中的鍵名稱,請確認是否正確。
說明 Nginx日志格式中的$request
會被提取為request_method
和request_uri
兩個鍵。 - 確認是否丟棄解析失敗日志,並單擊下一步。
開啟該功能后,解析失敗的Nginx訪問日志不上傳到日志服務;關閉后,Nginx訪問日志解析失敗時上傳原始Nginx訪問日志。
- 應用到機器組。
如果您之前沒有創建過機器組,請先根據頁面提示創建IP地址機器組。
說明 Nginx訪問日志采集配置生效時間最長需要3分鍾,請耐心等待。
為Nginx訪問日志設置索引
在數據接入向導中配置采集Nginx訪問日志之后,可以在向導的后續步驟中設置Nginx訪問日志的索引。如果直接退出了數據接入向導,也可以在查詢分析頁面開啟並配置索引、查詢並分析Nginx訪問日志。
以下步驟展示在數據接入向導中為Nginx訪問日志設置索引。
確保日志機器組心跳正常的情況下,可以通過單擊右側預覽按鈕獲取到采集上來的數據。
日志服務提供預設的Nginx訪問日志數據鍵名稱以便分析使用,可以選擇預覽數據生成的實際數據鍵名稱,用來映射默認數據鍵名稱。
單擊下一步,日志服務會為您設置好Nginx訪問日志的索引屬性並創建nginx-dashboard
儀表盤以供分析使用。
分析Nginx訪問日志
- 使用SQL語句分析Nginx訪問日志:
在日志服務查詢分析頁面輸入查詢分析語句,可以查看符合條件的Nginx原始日志,或查看可視化的分析結果。另外,查詢分析頁面還提供快速分析、快速查詢等功能,詳細說明請查看查詢日志和Nginx訪問日志診斷及優化。
- 查看預設儀表盤的分析數據,分析Nginx訪問日志:
日志服務預設的Nginx訪問日志儀表盤中展示了各個分析指標的詳細數據大盤,例如PV/UV統計等數據。關於如何使用儀表盤,請參考儀表盤。
- PV/UV統計(pv_uv)
統計最近一天的PV數和UV數。
圖 7. PV/UV統計
統計語句:
* | select approx_distinct(remote_addr) as uv , count(1) as pv , date_format(date_trunc('hour', __time__), '%m-%d %H:%i') as time group by date_format(date_trunc('hour', __time__), '%m-%d %H:%i') order by time limit 1000
- 訪問地域分析(ip_distribution)
統計訪問IP來源情況。
圖 8. 訪問地域分析
統計語句:
* | select count(1) as c, ip_to_province(remote_addr) as address group by ip_to_province(remote_addr) limit 100
- 訪問前十地址(top_page)
統計最近一天訪問PV前十的地址。
圖 9. 統計訪問
統計語句:
* | select split_part(request_uri,'?',1) as path, count(1) as pv group by split_part(request_uri,'?',1) order by pv desc limit 10
- 請求方法占比(http_method_percentage)
統計最近一天各種請求方法的占比。
圖 10. 請求方法占比
統計語句:
- 請求狀態占比(http_status_percentage)
統計最近一天各種http狀態碼的占比。
圖 11. 請求狀態占比
統計語句:
- 請求UA占比(user_agent)
統計最近一天各種瀏覽器的占比。
圖 12. 請求UA占比
統計語句:
* | select count(1) as pv, case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end as http_user_agent group by http_user_agent order by pv desc limit 10
- 前十訪問來源(top_10_referer)
統計最近一天訪問前十的來源信息。
圖 13. 前十訪問來源
統計語句:
Nginx訪問日志診斷及優化
除了一些默認的訪問指標外,站長常常還需要對一些訪問請求進行診斷,分析Nginx訪問日志中記錄的處理請求的延時如何、有哪些比較大的延時、哪些頁面的延時比較大。此時可以進入查詢頁面進行快速分析。
- 統計平均延時和最大延時
通過每5分鍾的平均延時和最大延時,從整體上了解延時情況。
統計語句:
* | select from_unixtime(__time__ -__time__% 300) as time, avg(request_time) as avg_latency , max(request_time) as max_latency group by __time__ -__time__% 300
- 統計最大延時對應的請求頁面
知道了最大延時之后,需要明確最大延時對應的請求頁面是,以方便進一步優化頁面響應。
統計語句:
* | select from_unixtime(__time__ - __time__% 60) , max_by(request_uri,request_time) group by __time__ - __time__%60
- 統計請求延時的分布
統計網站的所有請求的延時的分布,把延時分布在十個桶里面,看每個延時區間的請求個數。
統計語句:
- 統計最大的十個延時
除最大的延時之外,還需要統計最大的十個延時及其對應值。
統計語句:
- 對延時最大的頁面調優
假如
/url2
這個頁面的訪問延時最大,為了對/url2
頁面進行調優,接下來需要統計/url2
這個頁面的訪問PV、UV、各種method次數、各種status次數、各種瀏覽器次數、平均延時和最大延時。統計語句:
request_uri:"/url2" | select count(1) as pv, approx_distinct(remote_addr) as uv, histogram(method) as method_pv, histogram(status) as status_pv, histogram(user_agent) as user_agent_pv, avg(request_time) as avg_latency, max(request_time) as max_latency
得到以上數據后,就可以對網站的訪問情況進行有針對性的詳細評估。