3
回答
Nginx 的日志切割处理

在把apache迁移成nginx之后,就要着手解决web日志的问题了。

由于我们分域名网站众多,以前通过cronolog将apache的log自动按照yyyy-mm-dd截断成每天的各分网站日志,然后通过bash脚本 使用awstat生成所有分网站的log分析页面,以便所有网站日志的统一管理和浏览。但是nginx的配置文件中不支持cronolog的管道,只好通 过手动的方式来截取生成每天的各网站日志。

在nginx.conf中定义log:

在http{}内定义log格式:
log_format  combined  '$remote_addr - $remote_user [$time_local] '                     
'"$request" $status $apache_bytes_sent '
'"$http_referer" "$http_user_agent"';
log_format表示log格式,combined表示定义的格式名称,后面表示格式样式。

在server{}内定义日志文件的位置和相应的格式:
access_log  /data/weblogs/www1_access.log  combined;

nginx可接受的信号如下: Signal    Action
TERM, INT  Terminate the server immediately
QUIT  Stop  the server
HUP  Configuration changes, start new workers, graceful stop of  old workers
USR1  Reopen log files
USR2  Upgrade the server  executable
WINCH  Graceful Stop (parent process advise the children to  exit)
kill -HUP pid 重新应用配置文件
kill -USR1 pid 重新刷新log

通过如下方式达到日志轮询的目的:
# vi logcron.sh
log_dir="/data/weblogs"
date_dir=`date +%Y/%m/%d/%H` 
/bin/mkdir -p  ${log_dir}/${date_dir} > /dev/null 2>&1
/bin/mv  ${log_dir}/access.log ${log_dir}/${date_dir}/access.log
kill -USR1 `cat  /opt/nginx/logs/nginx.pid`
定义一个cron,在每天晚上23:59:50执行这个脚本,后面的事情就交给awstats了。

举报
红薯
发帖于9年前 3回/2K+阅
共有3个评论 最后回答: 6年前

引用来自“mark35”的答案

用 logrotate 来分割不行么
logrotate 是可以的。下面是解压Nginx-1.0.12-1.el6.x86_64.rpm 之后的logrotate 配置文件:
[root@ example  ~]# cat rpmdev/nginx-1.0.12-1.el6.x86_64/etc/logrotate.d/nginx 
/var/log/nginx/*log {
    daily
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

cronolog 也可以,但是Nginx 本身不支持管道,不能直接写在配置文件里;淘宝的 Tengine 是可以使用管道的。Nginx 使用cronolog 操作如下:
[root@example ~]# service nginx stop
[root@example ~]# mv /usr/local/nginx/logs/access.log
/usr/local/nginx/logs/access.log.bak

[root@example ~]# mkfifo /usr/local/nginx/logs/access.log
[root@example ~]# cronolog /usr/local/nginx/logs/access.log.%Y%m%d <
/usr/local/nginx/logs/access.log &
[root@example ~]# service nginx start
顶部