采集並分析Nginx訪問日志


日志服務支持通過數據接入向導配置采集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

  1. 登錄日志服務控制台,單擊Project名稱。
  2. Logstore列表中,單擊指定Logstore對應的數據接入向導圖標。

    日志服務提供數據接入向導快速接入Nginx在內的多種數據源。

    圖 1. Logstore列表
    采集Nginx日志時,數據接入向導入口 
  3. 選擇數據類型為Nginx訪問日志。

    日志服務提供多種數據類型接入(雲產品、自建軟件、API、SDK等),分析NGINX訪問日志請選擇自建軟件 > NGINX訪問日志。

  4. 數據源設置。
    1. 指定配置配置名稱和日志路徑。
    2. 將推薦的log_format日志格式填寫到NGINX日志格式中。圖 2. 配置數據源
      配置Nginx訪問日志為數據源
    3. 確認Nginx鍵名稱。

      日志服務會自動提取出Nginx日志中的鍵名稱,請確認是否正確。

       
      說明  Nginx日志格式中的 $request會被提取為 request_method和 request_uri兩個鍵。
      圖 3. NGINX鍵名稱
      Nginx訪問日志的默認鍵名稱
    4. 確認是否丟棄解析失敗日志,並單擊下一步。

      開啟該功能后,解析失敗的Nginx訪問日志不上傳到日志服務;關閉后,Nginx訪問日志解析失敗時上傳原始Nginx訪問日志。

    5. 應用到機器組。

      如果您之前沒有創建過機器組,請先根據頁面提示創建IP地址機器組

       
      說明 Nginx訪問日志采集配置生效時間最長需要3分鍾,請耐心等待。

為Nginx訪問日志設置索引

在數據接入向導中配置采集Nginx訪問日志之后,可以在向導的后續步驟中設置Nginx訪問日志的索引。如果直接退出了數據接入向導,也可以在查詢分析頁面開啟並配置索引、查詢並分析Nginx訪問日志。

以下步驟展示在數據接入向導中為Nginx訪問日志設置索引。

確保日志機器組心跳正常的情況下,可以通過單擊右側預覽按鈕獲取到采集上來的數據。

圖 4. 預覽
預覽Nginx訪問日志 

日志服務提供預設的Nginx訪問日志數據鍵名稱以便分析使用,可以選擇預覽數據生成的實際數據鍵名稱,用來映射默認數據鍵名稱。

圖 5. 鍵值索引屬性
Nginx訪問日志的索引 

單擊下一步,日志服務會為您設置好Nginx訪問日志的索引屬性並創建nginx-dashboard儀表盤以供分析使用。

分析Nginx訪問日志

開啟索引后,日志服務默認生成Nginx訪問日志的索引和儀表盤,可以通過以下方式分析Nginx訪問日志。
  • 使用SQL語句分析Nginx訪問日志:

    在日志服務查詢分析頁面輸入查詢分析語句,可以查看符合條件的Nginx原始日志,或查看可視化的分析結果。另外,查詢分析頁面還提供快速分析、快速查詢等功能,詳細說明請查看查詢日志Nginx訪問日志診斷及優化

  • 查看預設儀表盤的分析數據,分析Nginx訪問日志:

    日志服務預設的Nginx訪問日志儀表盤中展示了各個分析指標的詳細數據大盤,例如PV/UV統計等數據。關於如何使用儀表盤,請參考儀表盤

圖 6. Nginx訪問日志儀表盤
Nginx訪問日志的默認儀表盤

  • PV/UV統計(pv_uv)

    統計最近一天的PV數和UV數。

    圖 7. PV/UV統計
    Nginx訪問日志的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. 訪問地域分析
    Nginx訪問日志-訪問地域分析 

    統計語句:

     
     * | 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. 統計訪問
    Nginx訪問日志-統計訪問數據 

    統計語句:

     
     * | 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. 請求方法占比
    Nginx訪問日志-請求方法占比 

    統計語句:

     
     * | select count(1) as pv, request_method  group by request_method
  • 請求狀態占比(http_status_percentage)

    統計最近一天各種http狀態碼的占比。

    圖 11. 請求狀態占比
    Nginx訪問日志-請求狀態占比 

    統計語句:

     
     * | select count(1) as pv, status  group by status
  • 請求UA占比(user_agent)

    統計最近一天各種瀏覽器的占比。

    圖 12. 請求UA占比
    Nginx訪問日志-請求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訪問日志-前十訪問來源 

    統計語句:

     
     * | select count(1) as pv, http_referer  group by http_referer order by pv desc limit 10

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
  • 統計請求延時的分布

    統計網站的所有請求的延時的分布,把延時分布在十個桶里面,看每個延時區間的請求個數。

    統計語句:

     
    * |select numeric_histogram(10,request_time)
  • 統計最大的十個延時

    除最大的延時之外,還需要統計最大的十個延時及其對應值。

    統計語句:

     
    * | select max(request_time,10)
  • 對延時最大的頁面調優

    假如/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

得到以上數據后,就可以對網站的訪問情況進行有針對性的詳細評估。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM