環境:nginx1.16.1
(1)日志類型:access_log(訪問日志) error_log(錯誤日志)rewrite_log
訪問日志:通過訪問日志我們可以得到用戶的IP地址、瀏覽器的信息,請求的處理時間等信息
錯誤日志:記錄了訪問出錯的信息,可以幫助我們定位錯誤的原因
重寫日志:rewrite_log on; 它將發送所有的 rewrite 相關的日志信息到 error_log 文件中,使用 [notice] 級別。隨后就可以在error_log 查看rewrite信息了
(2)設置訪問日志:
access_log指令的作用域: http,server,location,limit_except
access_log off; #表示關閉訪問日志
access_log path [格式名 [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
注: path 指定日志存放路徑
格式名 指定日志格式,不寫則默認為combined,使用自定義格式則寫上格式名引入
buffer 指定日志寫入時的緩存大小
gzip 日志寫入前先進行壓縮,指定壓縮比1-9,默認1,數值越大壓縮速度越慢
flush 設置緩存有效時間
if 條件判斷,若為假則該請求不寫入日志
例:access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
log_format name [escape=default | json] string ...; #設置日志格式,字符串中的變量表示日志應寫入的內容
注: name 格式名
escape 設置導出時日志字符串是json還是default格式。2者區別:沒有值的變量,default顯示-,json顯示空字符
string 日志格式字符串,參數中可使用nginx變量
eg: log_format main '$remote_addr - $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
171.44.176.127 - - [21/Nov/2019:12:14:54 +0800] "GET /index/index/index HTTP/1.1" 200 804 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0" "-"
以上沒有值的變量以 - 顯示,上述日志寫入格式為default
日志格式相關變量:
1. 請求信息相關的變量
$bytes_sent 發送給客戶端的總字節數
$body_bytes_sent 發送給客戶端的字節數,不包括響應頭的大小
$request 完整的原始請求行,如 "GET / HTTP/1.1"
$request_length 請求長度(包括請求行,請求頭和請求體)
$request_uri 完整的請求地址,如 https://daojia.com/
$http_host 請求的主機名
$connection 連接序列號
$connection_requests 當前TCP連接發出的請求數量
$pipe 如果請求是通過http流水線發送,則其值為"p",否則為“."
$status 響應狀態碼
2. 客戶端信息相關變量
$remote_addr 客戶端IP
$remote_user 客戶端用戶名稱,針對啟用了用戶認證的請求
$http_referer 請求攜帶的referer地址
$http_user_agent 客戶端瀏覽器信息
$ssl_protocol SSL協議版本
3. 時間相關變量
$msec 日志寫入時間,單位為秒,精度是毫秒
$request_time 請求處理時長,單位為秒,精度為毫秒,從讀入客戶端的第一個字節開始,直到把最后一個字符發送張客戶端進行日志寫入為止
$time_iso8601 標准格式的本地時間,形如“2017-05-24T18:31:27+08:00”
$time_local 通用日志格式下的本地時間,如"24/May/2017:18:31:27 +0800"
4.負載均衡配置相關變量
$upstream_addr 后台upstream的地址,即真正提供服務的主機地址
$upstream_status upstream狀態
$upstream_response_time 請求過程中,upstream響應時間
$http_x_forwarded_for 當前端有代理服務器時,設置web節點記錄客戶端地址的配置,此參數生效的前提是代理服務器也要進行相關的x_forwarded_for設置。
即有負載均衡服務器時用此設置獲取客戶端ip
其它變量參見nginx官方文檔http://nginx.org/en/docs/varindex.html
設置日志為json格式:
log_format jsonlog escape=json '{
"time":"$time_iso8601",
"host": "$server_addr",
"client": "$remote_addr",
"size":"$body_bytes_sent",
"responsetime":"$request_time",
"domain": "$host",
"url":"$request_uri",
"referer": "$http_referer",
"agent":"$http_user_agent",
"status":"$status",
"x_forwarded_for":"$http_x_forwarded_for"
}';
(3)設置錯誤日志:
error_log path [level]; # 作用域: http, server, location, mail, stream, main
注: path 日志存儲的路徑
level 日志級別,默認為error
日志級別:debug | info | notice | warn | error | crit | alert | emerg 級別從左到右依次變低,越低信息越少
open_log_file_cache off; 如果日志文件路徑中有變量,則使用它設置日志文件描述符緩存,提高性能
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
注: max 設置緩存中最多容納的文件描述符數量,如果被占滿,采用LRU算法將描述符關閉
inactive 設置緩存存活時間,默認是10s
min_uses 在inactive時間段內,日志文件最少使用幾次,該日志文件描述符記入緩存,默認是1次
valid 設置多久對日志文件名進行檢查,看是否發生變化,默認是60s