飘摇的风 發表於 2023-8-21 00:00:00

centos中nginx按日期自动分割访问日志的方法

<p>
        Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息。</p>
<p>
        一条典型的Web访问日志如下:</p>
<p>
         </p>
<div class="codetitle">
        <span><u>复制代码</u></span> 代码如下:</div>
<div class="codebody" id="code44446">
        <br>
        192.168.50.195 - - "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36" "-"1</div>
<br><p>
         </p>
<p>
        <strong>1、 要解决问题:</strong></p>
<p>
        当网站访问量大后,日志数据就会很多,如果全部写到一个日志文件中去,文件会变得越来越大。文件大速度就会慢下来,比如一个文件几百兆。写入日志的时候,会影响操作速度。另外,如果我想看看访问日志,一个几百兆的文件,下载下来打开也很慢。</p>
<p>
        注意:使用第三方免费的日志分析工具-日志宝,可以上传nginx、apache、iis的日志文件,它们帮助分析网站安全方面。毕竟专攻,更加专业。日志宝对上传的文件也是做了大小限制的,不超过50m。</p>
<p>
        <strong>2、日志自动切割脚本编写</strong></p>
<p>
        nignx没有自动分开文件存储日志的机制。由于nginx它不会帮你自动分文件保存。所以,需要自己编写脚本来实现。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_628492">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash preprocessor bold">#!/bin/bash</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash comments"># Program:</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash comments">#   Auto cut nginx log script.</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash comments"># 2016/6/15 luozhibo </code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                         </div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash comments"># nginx日志路径 /var/log/nginx/</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">LOGS_PATH=</code><code class="bash plain">/var/log/nginx</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">TODAY=$(</code><code class="bash functions">date</code> <code class="bash plain">-d </code><code class="bash string">'today'</code> <code class="bash plain">+%Y-%m-%d)</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash comments">#echo $TODAY</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                         </div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="bash comments"># 移动日志并改名</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash functions">mv</code> <code class="bash plain">${LOGS_PATH}</code><code class="bash plain">/error</code><code class="bash plain">.log ${LOGS_PATH}</code><code class="bash plain">/error_</code><code class="bash plain">${TODAY}.log</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="bash functions">mv</code> <code class="bash plain">${LOGS_PATH}</code><code class="bash plain">/access</code><code class="bash plain">.log ${LOGS_PATH}</code><code class="bash plain">/access_</code><code class="bash plain">${TODAY}.log</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                         </div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="bash comments"># 向nginx主进程发送重新打开日志文件的信号</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="bash functions">kill</code> <code class="bash plain">-USR1 $(</code><code class="bash functions">cat</code> <code class="bash plain">/var/run/nginx</code><code class="bash plain">.pid)</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        上面shell脚本的原理是:</p>
<p>
        先把以前的日志文件移动重命名,目的是就是备份。</p>
<p>
        <strong>3、crontab自动任务配置</strong></p>
<p>
        直接编写vim /etc/crontab 或者 直接通过echo写入自动任务</p>
<p>
         </p>
<div class="codetitle">
        <span><u>复制代码</u></span> 代码如下:</div>
<div class="codebody" id="code36161">
        <br>
        echo '59 23 * * * root /var/log/nginx/nginx_log_division.sh &gt;&gt; /var/log/nginx/cutnginxlog.log 2&gt;&amp;1' &gt;&gt; /etc/crontab</div>
<br><p>
         </p>
<p>
        每晚23:59分自动执行计划任务  以root用户身份运行  将自动任务的执行日志(错误和正确的日志)自动写入cutnginxlog.log  “命令 &gt;&gt; 2&gt;&amp;1” 表示以追加方式将正确输出和错误输出都保存到同一个文件中</p>
<p>
        以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。</p>
<p>
        原文链接:http://www.centoscn.com/nginx/2016/0616/7449.html</p>
頁: [1]
查看完整版本: centos中nginx按日期自动分割访问日志的方法