關于nginx包含變量的自動日志:
使用自動日志需要注意以下:
1、nginx日志目錄權限,以我的安裝路徑為例/usr/local/nginx,那我的日志目錄就是在/usr/local/nginx/logs裡;使用了包含變量自動日志,那麼這個目錄nginx的使用者需要有寫入的權限,否則将不可能生成日志。預設情況下,nginx的運作使用者為nobady。 我的習慣是安裝一個程式然後給他配置設定一個專用賬戶使用。
2、緩存将不會被使用,因為使用了變量的原因吧(這一點我還沒有完全了解)
3、每條日志,要先打開檔案,然後寫入,最後關閉檔案,如此循環。此時,需要開啟nginx的open_log_file_cache功能,緩存經常被使用的日志檔案描述符緩存。open_log_file_cache 預設為off
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
max 最大的檔案描述符數量,最大的緩存數量
inactive 在多少時間内不活動,就會被删除
min_uses 如果在inactive時間内,使用超過該參數定義的次數,就會被緩存
valid 多少時間檢查一次。
http {
…………
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log logs/$server_name.access.log main;
………… 省去了其他行
}
最後,日志檔案名會以在server_name中定義的名字開始。例:svr3.labexam.com.access.log
4、關于日志切割:
完成以上三項後,并不是工作的結束,隻是又一個開始。日志會随着通路量的增大急速增長,是以需要做日志的切割!
以下是一個腳本:
#!/bin/bash
#made by cheng
#blog:myhat.blog.51cto.com
#last_time=2011/08/18
#存檔的環境變量
log_path=/data1/backup_log
nginx_pid=/usr/local/webserver/nginx/nginx.pid
nginx_log=/data1/logs
yesterday=`date -d “yesterday” +%Y%m%d`
#擷取有規則的access.log名稱,以後于後面建立目錄使用
host=`ls -l $nginx_log/*.access.log | awk -F ” ” ‘{print $9}’ | awk -F “.access” ‘{print $1}’ | awk -F “$nginx_log/” ‘{print $2}’`
#循環建立目錄與移動日志。
for i in $host
do
if [ ! -d $log_path/$i/$yesterday ];then
mkdir -p $log_path/$i/$yesterday
fi
if [ ! -f $log_path/$i/$yesterday/$yesterday.access.log ];then
mv $nginx_log/$i.access.log $log_path/$i/$yesterday/$yesterday.access.log
kill -USR1 `cat $nginx_pid`
else
mv -bf $nginx_log/$i.access.log $log_path/$i/$yesterday/$yesterday.access.log_1
done
最後需要做的是,把這個腳本放到crontab裡,讓其00:00時運作!
運作該腳本後,會自動根據虛拟主機的主機名建立主目錄,在該目錄下層放建立前一天的日期目錄,然後把昨天的日志放到這個目錄裡。實作每天一次日志切割。
*******該腳本運作的前提是,使用了自動日志的功能。