linux shell命令切割nginx访问日志

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

一、首先是日志切割

#! /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 "发现服务器访问日志错误代码" [email protected]

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

fi

flag=$[$flag+1]

done

}

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

check 400 14

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

check 500 5

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

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

linux shell命令切割nginx访问日志_第1张图片

你可能感兴趣的:(linux shell命令切割nginx访问日志)