nginx 日志切割(脚本实现)

    这里主要介绍nginx日志切割.(访问日志与错误日志)

    准备好一台机器,配置随意,安装nginx应用。

    1. nginx安装步骤

  # tar xf nginx-1.9.4.tar.gz
  # cd nginx-1.9.4
  # yum install openssl-devel pcre pcre-devel –y
  # useradd -r -s /sbin/nologin nginx  
  # ./configure --user=nginx--group=nginx--prefix=/usr/local/nginx  --with-http_stub_status_module
     --with-http_ssl_module --with-stream && make && make install

    2. nginx配置文件

    user  nginx nginx;
    worker_processes  2;
    error_log  logs/error/error.log  info;
    pid        logs/nginx.pid;
    worker_cpu_affinity 00000001 00000010;
    events {
        use epoll;
        worker_connections  40960;
        multi_accept on;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format  main
                  '$http_x_forwarded_for - $remote_addr - $remote_user [$time_local] '
                  '$upstream_response_time $request_time '
                  '$http_host $request '
                  '"$status" $body_bytes_sent "$http_referer" '
                  '"$http_accept_language" "$http_user_agent" ';
        access_log logs/access/access.log    main;
        sendfile        on;
        keepalive_timeout  65;
        server_tokens off;
        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types       text/plain application/x-javascript text/css application/xml;
        gzip_vary on;
     server {
            listen       80;
            server_name  localhost;
            location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

    3. 编写nginx切割脚本

    # vim nginx_logcut

    #!/bin/bash
    #description:cut nginx log per day.
    #auth:Net20 huangxiag
    #define logs dir
    LOGS_ACCESS="/usr/local/nginx/logs/access"
    LOGS_ERROR="/usr/local/nginx/logs/error"
    #define pid file
    PID_PATH="/usr/local/nginx/logs/nginx.pid"
    #define date
    DATE=`date -d "yesterday" +%F`
    DATE_DIR=`date +%Y-%m`
    #cut log
    if [ ! -d ${LOGS_ACCESS}/${DATE_DIR} ];then
        mkdir ${LOGS_ACCESS}/${DATE_DIR}
    fi
        mv ${LOGS_ACCESS}/access.log ${LOGS_ACCESS}/${DATE_DIR}/access_$DATE.log
    if [ ! -d ${LOGS_ERROR}/${DATE_DIR} ];then
        mkdir ${LOGS_ERROR}/${DATE_DIR}
    fi
        mv ${LOGS_ERROR}/error.log ${LOGS_ERROR}/${DATE_DIR}/error_$DATE.log
    #reload nginx
    kill -USR1 `cat ${PID_PATH}`

    4. 编写日志打包脚本

    # vim nginx_logtar.sh

    #!/bin/bash
    #description:tar nginx log per month &drop six month ago log.
    #auth:Net20  huangxiang
    #define logs dir
    LOGS_ACCESS="/usr/local/nginx/logs/access"
    LOGS_ERROR="/usr/local/nginx/logs/error"
    #define date
    DATE_DIR=`date -d "-1 month" +%Y-%m`
    DATE_SIX=`date -d "-6 month" +%Y-%m`
    #tar nginx log and drop six month ago log.
    if [ -d ${LOGS_ACCESS}/${DATE_DIR} ];then
        cd ${LOGS_ACCESS}
        tar -czvPf ${DATE_DIR}_log.tar.gz ${DATE_DIR}
        rm -fv ${DATE_DIR}/*
        rm -fv ${DATE_SIX}_log.tar.gz
    else
        echo "Last month access_log_dir was not exit."
    fi
    if [ -d ${LOGS_ERROR}/${DATE_DIR} ];then
        cd ${LOGS_ERROR}
        tar -czvPf ${DATE_DIR}_log.tar.gz ${DATE_DIR}
        rm -fv ${DATE_DIR}/*
        rm -fv ${DATE_SIX}_log.tar.gz
    else
        echo "Last month error_log_dir was not exit."
    fi

    5. 编写定时任务计划

    脚本都放在/root/bin下面(你们随意放,后面的定时任务别写错位置就好)

    脚本加执行权限。

    # crontab -l

    
00 00 * * * bash /root/bin/nginx_logcut.sh > /tmp/nginx_logcut.cron.log 2> /tmp/nginx_logcut.cron.err
00 00 1 * * bash /root/bin/nginx_logtar.sh > /tmp/nginx_logtar.cron.log 2> /tmp/nginx_logtar.cron.err

    6. 调整电脑时间

    调整操作系统时间为23:59:00

    记得访问下80,让nginx出日志。(还有随便访问一个404页面)

    7. 测试

    凌晨之后,查看是否已经日志切割。

    这里没给出具体测试结果,你们自己去整整。最主要的脚本已经给出

    

原创文章,作者:Net20_赤羽,如若转载,请注明出处:http://www.178linux.com/23380

(1)
Net20_赤羽Net20_赤羽
上一篇 2016-07-10 12:15
下一篇 2016-07-10 12:15

相关推荐

  • 第十周作业

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)     CentOS系统启动流程:     1.加电自检:由bios去检测各硬件是否存在且是否正常运行,然后进行硬件初始化     2.选择启动顺序,加载mbr:根据bios设置的设备启动顺序,…

    2017-07-03
  • GOPS2017全球运维大会 • 深圳站将在深圳召开!

    第六届GOPS2017全球运维大会(本次)将于2017年4月21日-22日在深圳举行,历届金牌讲师精选亮相,各种精彩等您发掘。活动家为GOPS2017全球运维大会提供在线报名!在线报名地址:https://www.huodongjia.com/event-231365274.html 大会亮点 众多国外重量级嘉宾在路上 ► 目前正在和各位大咖商榷行程中,主会…

    2017-04-10
  • Linux下常用的日志收集命令(Redhat&SuSe)

       Linux下日志的采集和分析是一个非常重要的工作,一般厂商在你需要技术支持的时候,都需要你通过对应指令收集系统的信息,我这边列举下常用的两个Linux厂商的收集命令(Redhat Linux以及SuSe Linux),便于收集后,对系统进行全面分析。   sosreport是一个类型于supportconfig …

    系统运维 2016-07-07
  • 内键命令和外部命令

    命令的基本格式 COMMAND  [OPTIONS…]  [ARGUMENTS…]        命令 (COMMAND)       OPTIONS(选项):用于启用或关闭命令的某个或某些功能      …

    2017-05-23
  • Linux 文本查看及处理工具&&用户和组管理

    1、列出当前系统上所有已登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ~]# who | cut -d ' ' -f 1 | sort -u 2、取出最后登入到当前系统的相关信息。 ~]# last&…

    Linux干货 2016-10-05
  • 防护墙服务

    iptables的基本认识        Netfilter组件: 内核空间,集成在linux内核中 扩展各种网络服务的结构化底层框架 内核中选取五个位置放了五个Hook(勾子)function(INPUT、OUTPUT、FORWARD、PREROUTING、POST ROUTING),而这五个hoot functio…

    2017-08-21