如何定时清理Linux系统中的Nginx日志
可以采用crontab定时任务。
举个例子:
nginx日志access.log路径为:/app/nginx/logs/access.log
我另作了一个叫clearlog.sh的文件,路径:/app/myshell/clearlog.sh,内容如下:
> /app/nginx/logs/access.log 意思是把空内容写入到access.log。
然后在terminal里输入如下命令,开始编辑crontab:
crontab -e 新行编写:
0 */2 * * * sh /app/myshell/clearlog.sh 意思是每两个小时执行一次,然后保存退出(和vim一样的保存退出命令)。
打完收工~~~~
Linux系统下Nginx 日志可以查看系统运行记录和出错说明,对Nginx 日志的分析可以了解系统运行的状态。那么Linux系统Nginx日志怎么分析呢?
Nginx 日志相关配置有 2 个地方:access_log 和 log_format 。
默认的格式:
access_log /data/logs/nginx-access.log;
log_format old ‘$remote_addr [$time_local] $status $request_time $body_bytes_sent ’
‘“$request” “$http_referer” “$http_user_agent”’;
相信大部分用过 Nginx 的人对默认 Nginx 日志格式配置都很熟悉,对日志的内容也很熟悉。但是默认配置和格式虽然可读,但是难以计算。
Nginx 日志刷盘相关策略可配置:
比如,设置 buffer,buffer 满 32k 才刷盘;假如 buffer 不满 5s 钟强制刷盘的配置如下:
access_log /data/logs/nginx-access.log buffer=32k flush=5s;
这决定了是否实时看到日志以及日志对磁盘 IO 的影响。
Nginx 日志能够记录的变量还有很多没出现在默认配置中:
比如:
请求数据大小:$request_length
返回数据大小:$bytes_sent
请求耗时:$request_time
所用连接序号:$connection
当前连接发生请求数:$connection_requests
Nginx 的默认格式不可计算,需要想办法转换成可计算格式,比如用控制字符 ^A (Mac 下 ctrl+v ctrl+a 打出)分割每个字段。
log_format 的格式可以变成这样:
log_format new ‘$remote_addr^A$http_x_forwarded_for^A$host^A$time_local^A$status^A’
‘$request_time^A$request_length^A$bytes_sent^A$http_referer^A$request^A$http_user_agent’;
这样之后就通过常见的 Linux 命令行工具进行分析了:
查找访问频率最高的 URL 和次数:
cat access.log | awk -F ‘^A’ ‘{print $10}’ | sort | uniq -c
查找当前日志文件 500 错误的访问:
cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’
查找当前日志文件 500 错误的数量:
cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ | wc -l
查找某一分钟内 500 错误访问的数量:
cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ | grep ’09:00’ | wc-l
查找耗时超过 1s 的慢请求:
tail -f access.log | awk -F ‘^A’ ‘{if($6》1) print $0}’
假如只想查看某些位:
tail -f access.log | awk -F ‘^A’ ‘{if($6》1) print $3″|”$4}’
查找 502 错误最多的 URL:
cat access.log | awk -F ‘^A’ ‘{if($5==502) print $11}’ | sort | uniq -c
查找 200 空白页
cat access.log | awk -F ‘^A’ ‘{if($5==200 && $8 《 100) print $3″|”$4″|”$11″|”$6}’
查看实时日志数据流
tail -f access.log | cat -e
或者
tail -f access.log | tr ‘^A’ ‘|’
照着这个思路可以做很多其他分析,比如 UA 最多的访问;访问频率最高的 IP;请求耗时分析;请求返回包大小分析;等等。
这就是一个大型 Web 日志分析系统的原型,这样的格式也是非常方便进行后续大规模 batching 和 streaming 计算。
以上就是Linux系统Nginx日志怎么分析的全部内容了,可以看出来Nginx日志还是有很强大的作用的。
举个例子:
nginx日志access.log路径为:/app/nginx/logs/access.log
我另作了一个叫clearlog.sh的文件,路径:/app/myshell/clearlog.sh,内容如下:
> /app/nginx/logs/access.log
意思是把空内容写入到access.log。
然后在terminal里输入如下命令,开始编辑crontab:
crontab -e
新行编写:
0 */2 * * * sh /app/myshell/clearlog.sh
意思是每两个小时执行一次,然后保存退出(和vim一样的保存退出命令)。
打完收工~~~~
领班竞聘演讲稿
能否做好酒店工作,以下几个方面的评判很重要;为进一步提升个人业务技能在工作之余我学习并掌握了如下技能:家用工业用电器维修,电力拖动,低压电器,protel99se(电路板制作)51单片机,avr单片机,pic单片机,plc逻辑控制系统,armlinux嵌入式系统开发。 尊重经验的人,才能少走弯路。如一台设备损坏你可以就该设备的工作原理来...
java定时任务需要一直启动服务器吗?
Java定时任务一般是通过定时器或者定时调度框架来实现的。对于定时任务的执行,通常需要在服务器上运行一个定时任务程序。因此,Java定时任务需要服务器一直运行,才能保证定时任务的正常执行。具体来说,如果服务器因为某些原因停机或者重启,那么定时任务也会因为此而中断。如果需要保证定时任务的连续执行,就...
linux怎么关闭防火墙linux终端关闭
这将强制重新启动Linux机器。3、Halt 我们已经看到了上面的-h开关,但是halt可以单独用作命令。这将导致计算机立即关闭,用一个简单的四个字母单词:halt复制代码 -f开关也可以用于暂停,但结果不一致,并且可能导致系统稳定性问题。4、定时关机 您可能更喜欢poweroff命令的术语。这与halt完全相同,只是它...
linux关机脚本linux关机脚本
这将强制重新启动Linux机器。3、Halt 我们已经看到了上面的-h开关,但是halt可以单独用作命令。这将导致计算机立即关闭,用一个简单的四个字母单词:halt复制代码 -f开关也可以用于暂停,但结果不一致,并且可能导致系统稳定性问题。4、定时关机 您可能更喜欢poweroff命令的术语。这与halt完全相同,只是它...
靳蚂恒迈: nginx日志文件需要手动分割,创建脚本文件clear_log.sh文件路径/usr/local/nginx/clear_log.shvi clear_log.sh.输入如下内容#!/bin/bashcp /usr/local/nginx/logs/error.log /usr/local/nginx/error-$(date -d “yesterday” +“%Y%m%d”).log#先复...
宜秀区19697799726: 如何清空linux中dns缓存 - ?
靳蚂恒迈: Linux 刷新DNS缓存 开启本地DNS 缓存的服务 chkconfig –list|grep nscd启动本地DNS 缓存服务即可: # service nscd start 反之 # service nscd stop在linux下没有强制清除DNS缓存的命令.我们可以通过删除其后台数据库记录信息,达到清除DNS缓存的目的: # rm /var/db/nscd/hosts # service nscd restartbind 提供的rndc 命令可以清空缓存的功能: # rndc flush
宜秀区19697799726: Linux 系统 shell脚本定时 清空系统日志文件 - ?
靳蚂恒迈: 其实没有必要写shell脚本,简单一句话放在系统定时任务里就行了.比如你的日志文件名叫a.log.路径为/tmp/a.log;那么你可以写个定时任务,这样做:crontab -e 进入定时任务器,然后把下面这段写到里面00 02 * * * echo " " >/tmp/a.log 然后保存退出就可以了.这段内容意思是,每天凌晨2点自动清空a.log内容.你也可以自己定义多久清一次.比如想10分钟清一次,就这么写*/10 * * * * echo " " >/tmp/a.log.具体的crontab时间定义你可以去百度查查.希望对您有用!
宜秀区19697799726: 如何操作Linux 定时删除指定目下N天前的文件 - ?
靳蚂恒迈: * 6 * * * find /root/home/zhang/* ctime 1 -exec rm -rf {} \; 表示每天早上六点删除/root/home/zhang目录下一天前创建的所有文件,不删除文件夹zhang,如果这个文件夹也要删除的话用 * 6 * * * find /root/home/zhang ctime 1 -exec rm -rf {} \;* 6 * * * ...
宜秀区19697799726: 如何删除废旧的Linux内核 - ?
靳蚂恒迈: 1,查看一下当前内核版本:uname -a 2.查看一下当前系统内的所有内核文件:dpkg --get-selections|grep linux 3.删除内核文件: sudo apt-get remove linux-headers-2.6.32-24-generic sudo apt-get remove linux-headers-2.6.32-24 这样就成功删...
宜秀区19697799726: linux怎么定义脚本自动清理log - ?
靳蚂恒迈: 确定日志所处磁盘的使用情况,一般使用率达到80%就可以进行清理了. 接着起个定时任务: crontab -e 输入: 0/30 * * * * /xxx/clearLog.sh 每隔30分钟检测一次磁盘使用情况
宜秀区19697799726: Linux下如何清理系统垃圾 - 附BleachBit清理工具是中文的 - ?
靳蚂恒迈: ,使用以下命令清理系统垃圾 sudo apt-get autoclean --清理旧版本的软件缓存 sudo apt-get clean--清理所有软件缓存 sudo apt-get autoremove--删除系统不再使用的孤立软件2,清理opera firefox的缓存文件:ls ~/.opera/cache4 ls ~/.mozilla/firefox/*.default/Cache3,清理Linux下孤立的包:图形界面下用:gtko
宜秀区19697799726: 如何清除linux的内存缓存,缓冲和交换空间 - ?
靳蚂恒迈: linux和其他操作系统一样,已经实现了很有效的内存管理机制,但是任何一个进程损坏了系统的内存,那么你就必须清理它,linux提供了一个比较好的方式刷新\清除RAM缓存.注意:并不是什么时候都需要清除RAM缓存的,大家都知道,linux...
宜秀区19697799726: 如何实现Linux tmp目录自动清理 - ?
靳蚂恒迈: linux本身就会定时清理tmp临时文件夹的.用户不需要自行再做相应的处理.这也是linux高效的一个方面 .
宜秀区19697799726: 定期清理linux服务器日志文件的几个思路 - ?
靳蚂恒迈: 定期清理linux服务器日志文件的几个思路1,在跑批程序中,用java代码调用shell脚本;2,在跑批程序中,用纯java代码实现,也就是使用java的文件操作类File;3,纯shell脚本方式,使用linux服务器的调度程序调用shell脚本;结合最近的项目,...