- Nginx日誌
Nginx日誌對於統計、系統服務排錯很有用。
Nginx日誌主要分爲兩種:access_log(訪問日誌)和error_log(錯誤日誌)。
通過訪問日誌我們可以得到用戶的IP地址、瀏覽器的信息,請求的處理時間等信息。
錯誤日誌記錄了訪問出錯的信息,可以幫助我們定位錯誤的原因。
因此,將日誌好好利用,可以得到很多有價值的信息。
查看日誌命令:
- tail -f /usr/local/nginx/logs/access.log
- 設置access_log
訪問日誌主要記錄客戶端的請求。客戶端向Nginx服務器發起的每一次請求都記錄在這裏。客戶端IP,瀏覽器信息,referer,請求處理時間,請求URL等都可以在訪問日誌中得到。當然具體要記錄哪些信息,你可以通過log_format指令定義。
語法
- access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 設置訪問日誌
- access_log off; # 關閉訪問日誌
- path 指定日誌的存放位置。
- format 指定日誌的格式。默認使用預定義的combined。
- buffer 用來指定日誌寫入時的緩存大小。默認是64k。
- gzip 日誌寫入前先進行壓縮。壓縮率可以指定,從1到9數值越大壓縮比越高,同時壓縮的速度也越慢。默認是1。
- flush 設置緩存的有效時間。如果超過flush指定的時間,緩存中的內容將被清空。
- if 條件判斷。如果指定的條件計算爲0或空字符串,那麼該請求不會寫入日誌。
- 另外,還有一個特殊的值off。如果指定了該值,當前作用域下的所有的請求日誌都被關閉。
示例
- http {
- include mime.types;
- default_type application/octet-stream;
- log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
- ##日誌格式使用默認的combined,指定日誌的緩存大小爲32k,日誌寫入前啓用gzip進行壓縮,壓縮比使用默認值1,緩存數據有效時間爲1分鐘。
- access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m;
- ...
- }
作用域
access_log指令的作用域分別有http,server,location。
- log_format自定義格式
默認的日誌格式
- log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
各參數明細表:
$remote_addr |
客戶端的ip地址(代理服務器,顯示代理服務ip) |
$remote_user |
用於記錄遠程客戶端的用戶名稱(一般爲“-”) |
$time_local |
用於記錄訪問時間和時區 |
$request |
用於記錄請求的url以及請求方法 |
$status |
響應狀態碼,例如:200成功、404頁面找不到等。 |
$body_bytes_sent |
給客戶端發送的文件主體內容字節數 |
$http_user_agent |
用戶所使用的代理(一般爲瀏覽器) |
$http_x_forwarded_for |
可以記錄客戶端IP,通過代理服務器來記錄客戶端的ip地址 |
$http_referer |
可以記錄用戶是從哪個鏈接訪問過來的 |
- 設置error_log
錯誤日誌在Nginx中是通過error_log指令實現的。該指令記錄服務器和請求處理過程中的錯誤信息。
錯誤日誌不支持自定義。
語法
- error_log path [level];
- path參數指定日誌的寫入位置。
- level參數指定日誌的級別(不寫爲全部)。level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值(等級從低到高排列)。
只有日誌的錯誤級別等於或高於level指定的值纔會寫入錯誤日誌中。默認值是error。
示例
error_log logs/error.log;
error_log logs/error_notice.log notice;
error_log logs/error_info.log info; ##可以將不同的錯誤類型分開存儲
- 日誌配置和及切割
/etc/init.d/rsyslog start #系統日誌,如不開啓,看不到定時任務日誌
/etc/rc.d/init.d/crond start #定時任務開啓
編寫sh:(備註 sh腳本是按每分鐘進行切割 只需修改 %Y%m%d%H%M )
#!/bin/bash
#設置日誌文件存放目錄
LOG_HOME="/usr/local/nginx/logs/"
#備分文件名稱
LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)"
#重命名日誌文件
mv ${LOG_HOME}/access.log ${LOG_HOME}/access.${LOG_PATH_BAK}.log
mv ${LOG_HOME}/error.log ${LOG_HOME}/error.${LOG_PATH_BAK}.log
#向nginx主進程發信號重新打開日誌
kill -USR1 `cat ${LOG_HOME}/nginx.pid`
配置cron:(配置的是每分鐘執行一次)
*/1 * * * * /usr/local/nginx/sbin/logcut.sh