nginx的日誌格式標準

相信互聯網的從業人員,或多或少都會接觸access_log進行一些信息的提取和分析,那麼如何高效的達成目標,今天我就將業務線的實踐分享給大家。

雖然我很羨慕那些能夠把access_log分析命令寫得足夠長的人,但我並不建議在線上依然保持如此原始的方式,通過使用格式化的日誌格式,我們會獲取以下收益:

  • 日誌需求分析標準化
  • 日誌需求分析工具化|插件化
  • 日誌字段含義清晰
  • 離線分析系統統計方法標準化

基於日誌格式的規範,不論是單機分析,還是離線集羣分析,效率都得到了大幅的提升,我們只需要做數據接入,通過各個產品線提供的插件即可滿足絕大部分需求

log_format  access

‘[Remote_ip:$remote_addr] ‘

‘[Remote_user:$remote_user] ‘

‘[Querytime:$time_local] ‘

‘[Request_url:$request] ‘

‘[Request_status:$status] ‘

‘[Request_byte_B:$bytes_sent] ‘

‘[Request_time_s:$request_time] ‘

‘[Http_referer:$http_referer] ‘

‘[Http_agent:$http_user_agent] ‘;

注意事項

  • 要明確定義單位,從而讓分析系統能夠自適應
  • 含義要清晰和標準,便於各類角色都能夠統一理解
  • 分隔符要避免使用url中可能出現的字符

日誌示例

調整前:

10.10.10.10 – – [18/Mar/2016:09:47:16 +0800] “GET /test.php HTTP/1.1” 844 200

調整後:

[Remote_ip:10.10.10.10] [Remote_user:-] [Querytime:18/Mar/2016:09:47:16 +0800][Request_url:GET /test.php HTTP/1.1] [Request_status:200] [Request_byte_B:844]

問題:在日誌中找出訪問次數最多的幾個分鐘

  • 原始格式:awk ‘{print $4}’ access_log |cut -c 14-18|sort|uniq -c|sort -nr|head
  • 優化格式:cut -d “]” -f3 access_log|cut -d “:” -f2-4|sort |uniq -c |sort -nr|head

結論:優化格式,可以用最簡單的命令,100%保證日誌分析結果的可靠性和通用性,且越複雜的場景,其帶來的收益越顯著。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章