服务器学习心得


日志管理

<h1>日志管理及配置</h1> <ul> <li>Nginx总结(七)Nginx服务器的日志管理及配置</li> <li><a href="https://www.cnblogs.com/zhangweizhong/p/12342366.html">https://www.cnblogs.com/zhangweizhong/p/12342366.html</a></li> </ul> <h2>日志格式</h2> <ul> <li>nginx 配置文件的 server 段,可以找到类似信息 <ul> <li> <h1>access_log logs/host.access.log main;</h1> </li> <li>说明该 server, 它的访问日志的文件是 logs/host.access.log</li> </ul></li> <li>使用的日志格式是&quot;main&quot;格式,除了main格式,你可以自定义其他格式</li> </ul> <h2>main格式</h2> <pre><code class="language-nginx">log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"';</code></pre> <ul> <li>main格式是我们定义好一种日志的格式,并起个名字,便于引用。</li> <li>以上面的例子,main类型的日志,记录的 remote_addr.... http_x_forwarded_for等选项</li> </ul> <h2>日志格式记录选项</h2> <ul> <li> <p>默认的日志格式: main</p> <pre><code class="language-nginx">log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; </code></pre> </li> <li> <p>默认的main日志格式,记录这么几项</p> <ul> <li>远程IP</li> <li> <p>远程用户/用户时间 请求方法(如GET/POST) 请求体body长度 referer来源信息</p> </li> <li>http-user-agent</li> <li> <p>用户代理/蜘蛛 ,被转发的请求的原始IP</p> </li> <li>http_x_forwarded_for</li> <li>在经过代理时,代理把你的本来IP加在此头信息中,传输你的原始IP</li> </ul> </li> </ul> <h2>进行配置</h2> <ul> <li> <p>声明一个新的log_format并命名 mylog</p> <pre><code class="language-nginx">log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';</code></pre> </li> <li> <p>在下面的server/location,我们就可以引用 mylog </p> <pre><code class="language-nginx">server { listen 8080; #端口 server_name 192.168.32.128; #域名 location / { root /usr/local/nginx/html/192.168.32.133; #根目录 index.html index.htm; access_log logs/access_192.168.32.133.log mylog; } }</code></pre> </li> <li> <p>nginx 允许针对不同的 server 做不同的 log(有的 web 服务器不支持,如lighttp)</p> <pre><code class="language-nginx">access_log logs/access_8080.log mylog; # access_log 声明log # logs/access_192.168.32.133.log log位置 # mylog log格式</code></pre> </li> <li> <p>查看日志记录</p> <pre><code class="language-shell"># nginx 日志配置完成后,重启,查看日志是否生成成功 systemctl restart nginx ps aux | grep nginx</code></pre> </li> </ul> <h2>实际应用</h2> <ul> <li> <p>日志实际生产环境一般是按日期分割存储的</p> </li> <li> <p>实现方式</p> <ul> <li>shell + 定时任务 + nginx信号管理,完成日志按日期存储</li> </ul> </li> <li> <p>分析思路</p> <ul> <li>凌晨 02:00:00,把昨天的日志重命名,放在相应的目录下</li> <li>把 USR1 信息号控制 nginx 重新生成新的日志文件</li> </ul> </li> <li> <p>实现</p> <pre><code class="language-shell"># 增加按日期备份日志的脚本 #!/bin/bash base_path='/usr/local/nginx/logs' log_path=$(date -d yesterday +"%Y%m") day=$(date -d yesterday +"%d") mkdir -p $base_path/$log_path mv $base_path/access.log $base_path/$log_path/access_$day.log # echo $base_path/$log_path/access_$day.log kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`</code></pre> </li> <li> <p>增加定时任务</p> <pre><code class="language-shell">* * * 02 1 /xxx/path/b.sh # 每天02时1分(建议在02-04点之间,系统负载小)</code></pre> </li> </ul>

页面列表

ITEM_HTML