Nginx中log變量及Tengine的log_unescape

Nginx變量

Nginx的log模塊是不少人作日誌輸出的首選切入點。html

Nginx默認access_log語法寫入服務器本地路徑或NFS,用於之後的彙總分析;在此基礎上,Tengine加強了日誌目標,能夠經過組合管道功能或syslog接口進行遠程集中日誌存儲。nginx

log功能的核心是變量。靈活而全面的變量定義是Nginx日誌模塊的優點體現。在2011年時曾經整理過一些核心變量的意義,主要是第一種類型的核心變量。最近兩年核心模塊進行過比較大的變更,涌現出比較多的優秀第三方模塊,也出現了Tengine/OpenResty這樣優秀的第三方發行版,變量的定義大大豐富。git

Nginx變量包括:github

  1. 核心模塊提供了足夠的變量定義(Embedded Variables);
  2. 經過rewrite模塊的set語法自定義變量(rewrite#set);
  3. 第三方模塊提供額外的變量定義(使用ngx_http_add_variable設置一系列ngx_http_variable_t的變量);
  4. 經過第三方模塊作變量內容變換/改寫(如agentzh/set-misc-nginx-module)。

在這種狀況下作一個變量大全須要必定的工做量,根據實際使用狀況去查閱各種模塊的文檔是個捷徑。若是有人整理過也請告訴我。web

log_unescape

在實際使用中會遇到一個問題關於日誌中被轉義的字符,好比輸出一段json數據,其中的引號會被轉義。這種轉義規則參考了apache httpd的習慣。早在2008年就有討論。Nginx官方社區對此問題的態度是繼續保留轉義。apache

在實際使用中,查看和處理轉義過的字符串帶來一些負擔,在權衡中選擇不作轉義也常常是一種選擇。Tengine在2012年將log_unescape的功能加入,能夠打開/關閉轉義功能,或者僅針對ASCII字符,方便大規模日誌處理。json

固然escape問題並不僅出如今log階段,好比這裏,解決方法也不必定都是修改nginx代碼或配置——在分析端作轉義處理也是一種可行的思路。%服務器

http://mib.cc/2013/12/27/background-of-log_unescape-in-tengine_nginx.html日誌

相關文章
相關標籤/搜索