nginx的日誌記錄主機設定
server
}預設情況下,access_log 會使用 combined 的配置來記錄訪問日誌
通常這樣就足夠了。
如果是為了更加方便的日誌分析,通常我們會使用特殊字元(如 ^a) 來作為日誌欄位的分隔符,
這樣無論是過濾還是排序都會十分方便。甚至可以直接匯入 mysql/hive 中,使用強大的 sql 來做查詢分析。
為了排版方便,所有特殊字元都使用了展開的寫法,請自行替換 ^a 為 ctrl+v,ctrl+a (nginx 日誌格式不支援 \1 的寫法)。
自定義日誌格式:
server
log_format abc 「$typ^a$uri」;
如果使用 nginx 比較多,可能會嘗試使用 if ,建議不要使用,因為nginx的if比較讓人混亂。
如果有更多複雜的字段處理需求,可以使用 ngx_lua (
ngx_lua 裡面操作 nginx 變數
# 實現上面 map 類似的功能
# 用法詳見
# lua 語法見
set_by_lua $typ 」
local uri = ngx.var.uri
local _m = string.match
local v = 『-』
if _m(uri, 『^/login』) then
v = 『user』
elseif _m(uri, 『^/my』) then
v = 『user』
elseif _m(uri, 『^/static』) then
v = 『static』
endreturn v
「;某些情況下,可能我們的字段處理需要查詢快取(如redis)、資料庫(如mysql)等,
這些都是可以使用 ngx_openresty 高效完成的(
這些功能就不在這一篇詳細描述了,後續篇章會補充這些功能。
再描述一些複雜的日誌記錄功能吧。
有時候我們希望根據請求,來判斷是否需要記錄這一條日誌。
在web的訪問日誌中這種需求比較少,但是獨立的日誌收集伺服器一般有這樣的需求的。
比如我需要判定,請求引數 arg_id 必須存在且為數字的時候我才記錄日誌,可以這樣實現
server
location = /i-log
location = /1.gif
}利用這個特性,我們甚至可以合併多個記錄為1個http請求,在 ngx_lua 內再將多條記錄拆分記錄到日誌檔案
比如上例,我門可以新增乙個字段 n 來標識有幾條記錄,並且給 q 之類的引數編號 q_1 .. q_n 。
# get /1.gif?n=2&q_1=a&q_2=b&ie=gbk&oe=utf8&ref=
# 其他**不變,只修改 1.gif 的 access_by_lua 為以下**
local n = ngx.var.arg_n
if n then
n = tonumber(n)
if n > 0 then
local logs = {}
local prefix = string.format(『/i-log?ie=%s&oe=%s&ref=%s&q=』, ngx.var.arg_ie, ngx.var.arg_oe, ngx.var.arg_ref)
while n >= 1 do
– 這裡可以對 q_n 做進一步的校驗,看是否需要記錄下來
table.insert(logs, )
n = n – 1
end– 見
ngx.location.capture_multi(logs)
endend
如果請求量較大,一把需要新增寫buffer,
方式為在每條 access_log 後面新增 buffer=32k 這樣的設定(見
快取的大小可以設定成 可以忍受丟失的記錄數*每條記錄的size
至此,各種記錄功能都完成啦。
日誌服務其他必要的功能,就是日誌輪轉了。
nginx 日誌輪轉的原理是
# 啟動nginx收日誌
# 啟用cron任務
## 將日誌檔案move走 (檔名可以帶上時間戳)
## 給 nginx master 程序傳送 usr1 訊號(nginx就會重新開啟新的日誌檔案)
### 否則,日誌會仍然記錄到之前的日誌檔案中,雖然被 move 了
## cron 的頻度可以根據日誌大小調整,盡可能大些,能以天為單位就不要以半天為單位
php中記錄日誌的幾種方法
1 使用fwrite 函式寫入檔案 now date y m d time filename log tongbu now.log file fopen filename,a a 表示檔案可讀寫方式開啟 fwrite file,開始寫入 n time time res www.geiliyou.co...
linux檢視日誌的幾種方法
tail n 是顯示行號 相當於nl命令 例子如下 tail 100f test.log 實時監控100行日誌 tail n 10 test.log 查詢日誌尾部最後10行的日誌 tail n 10 test.log 查詢10行之後的所有日誌 head 跟tail是相反的,tail是看後多少行日誌,...
對於大日誌分割的幾種方法
ls lrth test.log rw r r 1 root root 645m 5月 30 20 42 test.log wc l test.log 8856340 test.log含義 b分割後的文件大小,單位是byte c分割後的文件,單行最大byte數 d使用數字作為字尾,同時使用 a le...