博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux shell命令切割nginx访问日志
阅读量:5932 次
发布时间:2019-06-19

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

hot3.png

小小菜鸟脚本,菜鸟思维,见谅!!!

一、首先是日志切割

#! /bin/bush

#######################################################################################

#方法封装,切割日志

#author:谭家俊   date:2015-08-20   funtion:linux按天分割nginx访问日志,并且保3天内的。

########################################################################################

nginx_log="/usr/local/nginx/logs/access.log"  #nginx访问日志目录

new_log_path="/usr/local/nginx/logs"          #切割后的目录

today=`date +%Y-%m-%d`                        #今天的时间日期  

function sortTheLog(){

rm -rf ${new_log_path}/${today} #删除一下今天的日志文件目录,避免之前手动有产生一样名字的文件名字

mkdir ${new_log_path}/${today}  #创建记录今天的日志目录/usr/local/nginx/logs/2015-08-20(今天是2015-08-20的话)

echo ${new_log_path}            #调试信息的输出

cp -rf ${nginx_log} ${new_log_path}/${today}  #将今天的nginx访问日志access.log复制到新建的日志目录下 

echo "" |cat > ${nginx_log}     #清空nginx的日志文件access.log    

#这里是写一个for循环玩玩而已,打印前3天的日期

for loop in 1 2 3

do

today_n=`date -d  "${loop} days ago" +%Y-%m-%d`

echo ${today_n}

done

#for end

//因为是要保留3天的日志,所以这里删除前4天的日志

days_ago_4=`date -d "4 days ago" +%Y-%m-%d`  #前4天的日期

del_path="${new_log_path}/${days_ago_4}"     #删除的路径

#echo "$del_path"

# read ${new_log_path}/days_ago_4

if [ -d "$del_path" ]                        #路径如果存在,则删除

then

echo ""

rm -rf ${del_path}

else

echo ""

fi

}

sortTheLog 调用方法

二、日志检查

#! /bin/bush

##################

#方法封装

#排查方法   入口:#param1:错误代码前缀(int)   #param:错误代码后缀(int)  返回:无

function check(){

flag=0   #while循环入口

end=$2   #输入参数2,循环结束

start=$1 #输入参数1,循环开始

while [ $flag -le $end ]  #如果start>end,结束循环

do

s=$[$start+${flag}]  

state="HTTP/1.1\" ${s}"  #遍历服务器每种错误状态码,如500,501,502

#echo ${s}

#echo ${state}

#echo `grep "HTTP/1.1\" 404" ${new_log_path}/${today}/access.log | wc -l`

#echo `grep "${state}" ${new_log_path}/${today}/access.log | wc -l`           #根据错误代码统计日志中错误行数

error_num=`grep "${state}" ${new_log_path}/${today}/access.log | wc -l`  #匹配今天的日志有没这种状态码的记录行,有就统计错误数量记录

if [ $error_num -gt 0 ]                                                      #大于0,有错 

then

echo "${state} error..."

#echo "服务器有错误啦!" | mail -s "发现服务器访问日志错误代码" 15986943045@163.com

mail -s "发现服务器访问日志错误代码" 15986943045@163.com < ${new_log_path}/${today}/access.log    #邮件通知,把错误日志以邮件发送

fi

flag=$[$flag+1]

done

}

#调用排查方法,排查4xx(请求错误)

check 400 14

#调用排查方法,5xx(服务器错误)

check 500 5

将以上的内容保存成shell脚本,加入定时器即可每天按时自我分割和排查...也算是自己学习的小小例子吧!!!

注意:在做发送邮件的时候,邮箱尽量不要用qq邮箱,会被拦截收不到的。我用的是163邮箱,而且进行了白名单设置。所以接收邮件挺快。

185827_ZnzB_2394701.png

转载于:https://my.oschina.net/u/2394701/blog/499711

你可能感兴趣的文章
《C++面向对象高效编程(第2版)》——4.3 C++中的无用单元收集
查看>>
《Nmap渗透测试指南》—第10章10.9节新建扫描模板
查看>>
2017 OpenStack峰会:k8S抢尽风头?
查看>>
⑤Windows Server 8 RemoteFX体验
查看>>
SCCM 2007系列2 安装部署
查看>>
msyql 启动报错 找不到pid 文件
查看>>
对象克隆的研究_关于魔术方法__clone
查看>>
这50款前端热门工具简直不要太好用了!(3)
查看>>
Ubuntu 1510 (Mate)安装
查看>>
挪窝儿
查看>>
RSA密钥对加密流程
查看>>
JavaScript应用开发实践指南迷你书
查看>>
新浪SAE架构与设计
查看>>
数据挖掘应用研究案例精选合集
查看>>
Taste Struts2
查看>>
wmware exsi 4.0.1的
查看>>
BeetlSQL,简单和强大数据库访问工具(更新)
查看>>
Spring Boot 1 和 Spring Boo 2的差别
查看>>
linux系统基础优化小结
查看>>
iscsiadm 命令的总结
查看>>