博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx高性能WEB服务器系列之八--nginx日志分析与切割
阅读量:5340 次
发布时间:2019-06-15

本文共 2700 字,大约阅读时间需要 9 分钟。

nginx系列友情链接:

https://www.cnblogs.com/maxtgood/p/9597596.html
https://www.cnblogs.com/maxtgood/p/9597990.html
https://www.cnblogs.com/maxtgood/p/9598113.html
https://www.cnblogs.com/maxtgood/p/9598333.html
https://www.cnblogs.com/maxtgood/p/9598610.html
https://www.cnblogs.com/maxtgood/p/9599068.html
https://www.cnblogs.com/maxtgood/p/9599335.html
https://www.cnblogs.com/maxtgood/p/9599542.html
https://www.cnblogs.com/maxtgood/p/9599752.html

注:原创作品,允许转载,转载时请务必以超链接形式标明文章  、作者信息和本声明。否则将追究法律责任。

nginx的强大之处不必要我细说,当初第一次接触nginx的时候就发现了它的强大之处,并且自我觉得非常有必要出一篇记录nginx的各个功能及坑点。

欢迎大家对nginx感兴趣的朋友们来一起学习与及时提出错误及误点。有问题的可以在评论区@我。

一:nginx日志分析

其实在我们日常的运维工作中,只要有线上使用过Nginx服务器的人都知道,nginx正常运行后,我们都会经常密切关注Nginx访问日志的相关情况,发现有异常的日志信息需要进行及时处理。

那么我将跟大家一起来研究和分析Nginx日志,nginx一般默认日志路径为:/usr/local/nginx/logs/access.log 和error.log文件。如下图:

Nginx日志的格式一般在nginx.conf里面配置,常见的格式配置如下:

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/access.log  main;

格式解释:

$remote_addr, $http_x_forwarded_for 记录客户端IP地址$remote_user 记录客户端用户名称$request 记录请求的URL和HTTP协议$status 记录请求状态$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。$bytes_sent 发送给客户端的总字节数。$connection_requests 当前通过一个连接获得的请求数量。$http_referer 记录从哪个页面链接访问过来的$http_user_agent 记录客户端浏览器相关信息$request_length 请求的长度(包括请求行,请求头和请求正文)。$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

那么一般Nginx日志分析需求有如下几点:

 

1) 分析截止目前为止访问量最高的IP排行。

awk '{print $1}' /usr/local/nginx/logs/access.log|sort |uniq -c |sort -nr |head -20就可以了。

2)找到当前日志中502或者404错误的页面并统计。

awk '{print $0}' /usr/local/nginx/logs/access.log|egrep "404|502"|awk '{print $1,$7,$9}'|more

当然还有很多需求,只要你搞清楚了日志的格式与由来,并且有shell或者python基础的话,相信都不是问题的。

二:nginx日志切割案例

Nginx 是一个非常轻量的 Web 服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如在产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将会导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。那么这里就自然而然用到了shell+crontab 命令了。(当然是用python也是可以的)

脚本的功能,就是定时切割日志,这里切割的方法我们直接使用mv即可。

nginx日志切割脚本

如下:

#!/bin/bash#auto mv nginx log shell#by author wugkS_LOG=/usr/local/nginx/logs/access.logD_LOG=/data/backup/`date +%Y%m%d`echo -e "\033[32mPlease wait start cut shell scripts...\033[1m"sleep 2if [ ! -d $D_LOG ];then        mkdir -p  $D_LOGfimv $S_LOG  $D_LOGkill -USR1 `cat /usr/local/nginx/logs/nginx.pid`echo "-------------------------------------------"echo "The Nginx log Cutting Successfully!"echo "You can access backup nginx log $D_LOG/access.log files."

最后在crontab中添加如下代码即可,每天晚上自动去切割日志:

0    0  * * *  /bin/sh /data/sh/auto_nginx_log.sh  >>/tmp/nginx_cut.log 2>&1

 

转载于:https://www.cnblogs.com/maxtgood/p/9599542.html

你可能感兴趣的文章
分层图最短路【bzoj2763】: [JLOI2011]飞行路线
查看>>
linux下编译复数类型引发的错误:expected unqualified-id before '(' token
查看>>
codeforces 1041A Heist
查看>>
字典常用方法
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
Java中的编码
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>