linux Nginx 日志脚本

摘要:
/bin/bash脚本名称:nginx.log。sh#description:nginx-logdeleted/rotate/compress#last_update:20130725byzongming#www.jbxue。com#Nginx#SignalAction#TERM,INT立即终止服务器#QUITstop服务器#HUPC配置更改,启动新工作人员,优雅停止旧工作人员#USR1重新打开日志文件#USR2升级服务器可执行#WINCHGracefulStop#variablelog_dir=/var/log/Nginx/log_date=$Nginx pid=/var/run/Nginx。pidkeep_days=30#old_logfind“$log_dir”-name“*.log.gz”-typef mtime+“${keep_days}”-exerm rf{};#重命名logforlognamein`ls“$log_dir”|awk'/。日志$/';doif[-e“${log_dir}${log _date}-${日志名称}”];neicho“${log_dir}${log_date}-${log_name}Alreadyexists”&&continueelse/bin/mv“${log_dir}${logname}”${log-dir}${log_date}-${log_name}“/bin/gzip”${log _dir}-${日志日期}-${日志名称}“fidone#new_日志/bin/kill USR1$&&/bin/sleep1nginx日志剪切脚本:vi/root/cutlog。sh#/Bin/bashI=`psaux|grepnginx|greproot|grep v'grepnginx‘|awk‘{print$14}‘`#如果[$I=/usr/local/nginx/sbin/nginx],则查找nginx进程;则ACCLOG=`cat/usr/local/nginx/conf/nginx。conf|grep'access_Log'|awk'{print$2}'`#如果nginx进程存在,请查找配置文件,读取accesslog路径ERRLOG=`cat/usr/local/nginx/conf/nginx。conf|grep^error|awk“{print$2}”|cut-d“;”-f1 `#错误日志的路径ls$ACCOOG#如果[$?-eq0],请检查是否存在此文件;然后#如果有mv$ACCOOG$ACCOOG。`date-d“-day”+%F`#重命名当前日志mv$ERRLOG$ERRLOG。`date-d“-day”+%F`touch$ACCOOG#创建空日志touch$ERRLOGchownnginx:root$ACCOOG#修改所有者chownngix:root$ERRLOG[-F/usr/local/nginx/logs/nginx.pid]&&kill USR1`cat/usr/local/nngix/logs/ginnx。pid`#判断进程,并在此处重新加载(kill USR1)将使nginx能够将新生成的日志写入新创建的日志。
这篇文章主要介绍了nginx日志切割脚本、nginx日志分析脚本等,需要的朋友可以参考下。
参考自:http://www.jbxue.com/article/13927.html

任务计划 
crontab -l 
1 15 * * * /home/dongnan/sh/split.sh >> /home/dongnan/sh/cron.log 2>&

nginx 日志 
ls /var/log/nginx/ 
20130730-access.log.gz  20130801-access.log.gz  20130803-access.log.gz 
20130730-error.log.gz   20130801-error.log.gz   20130803-error.log.gz 
20130731-access.log.gz  20130802-access.log.gz access.log 
20130731-error.log.gz   20130802-error.log.gz   error.log

shell 脚本 
cat split.sh

#!/bin/bash
#script_name:nginx_log.sh
#description:nginx-log deleted/rotate/compress
#last_update:20130725 by zongming
# www.jbxue.com
#Nginx
#Signal Action
#TERM, INT Terminate the server immediately
#QUIT Stop the server
#HUP Configuration changes, start new workers, graceful stop of old workers
#USR1 Reopen log files
#USR2 Upgrade the server executable
#WINCH Graceful Stop (parent process advise the children to exit)
   
#variables
log_dir=/var/log/nginx/
log_date=$(date +"%Y%m%d")
nginx_pid=/var/run/nginx.pid
keep_days=30

#old_log
find "$log_dir" -name "*.log.gz" -type f -mtime +"${keep_days}" -exec rm -rf {} ;

#rename_log
for log_name in `ls "$log_dir" | awk '/.log$/'`;do
    if [ -e "${log_dir}${log_date}-${log_name}" ];then
        echo "${log_dir}${log_date}-${log_name} Already exists" && continue
    else
        /bin/mv "${log_dir}${log_name}" "${log_dir}${log_date}-${log_name}"
        /bin/gzip "${log_dir}${log_date}-${log_name}"
    fi
done

#new_log
/bin/kill -USR1 $(cat $nginx_pid) && /bin/sleep 1

 nginx日志切割脚本:

vi /root/cutlog.sh

#!/bin/bash
I=`ps aux | grep nginx | grep root | grep -v 'grep nginx' | awk '{print $14}'`    #查找nginx进程
if [ $I == /usr/local/nginx/sbin/nginx ];then
ACCLOG=`cat /usr/local/nginx/conf/nginx.conf | grep  ' access_log' | awk '{print $2}'`  #如果nginx进程在,就找到配置文件,读取accesslog路径
ERRLOG=`cat /usr/local/nginx/conf/nginx.conf| grep  ^error  | awk '{print $2}'| cut  -d";" -f1`  #错误日志的路径
ls $ACCLOG     #查看是否有此文件
if [ $? -eq 0 ];then    #如果有
mv $ACCLOG  $ACCLOG.`date -d "-1 day" +%F`  #重命名当前日志
mv $ERRLOG $ERRLOG.`date -d "-1 day" +%F`
touch $ACCLOG    #创建空日志
touch $ERRLOG
chown nginx:root  $ACCLOG   #修改属主
chown nginx:root  $ERRLOG
[ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`     #判断进程,并重新加载(这里的kill -USR1会使nginx将新产生的日志写到刚创建的新日志里面。)
/mnt/logs/checklog.sh $ACCLOG.`date "-1 day" +%F` #这个是日志分析脚本
gzip $ACCLOG.`date -d "-1 day" +%F`  #压缩日志
gzip $ERRLOG.`date -d "-1 day" +%F`

 mv  $ACCLOG.`date -d "-10 day" +%F`.*  /mnt/history.nginx.log/   #将10天前的老日志清理到其他地方,(你们如果想删除的可以自己改成删除)

mv  $ERRLOG.`date -d "-10 day" +%F`.*  /mnt/history.nginx.log/
fi
fi

 nginx日志分析脚本:

vi /mnt/logs/checklog.sh

#!/bin/bash
echo -e  "####################`date +%F`" >> /mnt/logs/400.txt
echo -e  "####################`date +%F`" >> /mnt/logs/URL.txt
echo -e  "####################`date +%F`" >> /mnt/logs/IP.txt
cat $1 | wc -l >> /mnt/logs/IP.txt   #分析IP
cat  $1  | awk -F'"'  '{print $3}' | awk '{print $1}' | sort | uniq -c| sort -rn >  /mnt/logs/CODE.txt   #分析返回值
cat $1 |  awk   '{print $1}' |  sort | uniq -c| sort -rn | head -n20  >> /mnt/logs/IP.txt  
N=`cat /mnt/logs/CODE.txt | wc -l`
for I in $(seq 1 $N)
do # www.jbxue.com
M=`head -n$I /mnt/logs/CODE.txt | tail -n1 | awk '{print $2}'`
if [ $M -ge 400 ]
then

echo "#####FIND $M###############">>/mnt/logs/400.txt   #分析错误请求
cat $1 | grep "" $M "  | grep -v ' "-" "-" - ' | sort | awk '{print $1 $2 $3 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21}' | sort | uniq -c  | sort -rn  | head -n5 >> /mnt/logs/400.txt
fi
done
cat  $1 | grep -v ' "-" "-" - ' | awk -F'T' '{print $2}' | awk -F'?' '{print $1}' | sort |awk '{print $1}' | sed  's/(/review/file/download/).*/1/g'   | sort | uniq -c | sort -rn | head -n20 >> /mnt/logs/URL.txt

免责声明:文章转载自《linux Nginx 日志脚本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python之SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXCSS3 -- 透明色(rgba)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux安全加固手册

1 身份鉴别 1.1 密码安全策略 操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期更换。 设置有效的密码策略,防止攻击者破解出密码 1)查看空口令帐号并为弱/空口令帐号设置强密码 # awk -F: '($2 == ""){print $1}' /etc/shadow 可用离线破解、暴力字典破解或者密码网站查询出...

Fuseki在linux下的部署及运行方法

在linux环境下部署并启动fuseki服务器的方法: 1.从官网上下载https://repository.apache.org/content/repositories/releases/org/apache/jena/jena-fuseki/ fuseki的工具包(名字中含有.tar的包); 2.解压缩这个包,并将其放在linux系统下,例如路径设为...

C# 简单日志文本输出

第一种 直接文件IO流写日志文件 usingSystem.IO; public static void WriteLog(stringstrLog) { string sFilePath="d:\"+DateTime.Now.ToString("yyyyMM"); string sFileName = "rizhi" + DateTime.Now....

jquery.validate.js的Validate表单验证

原文连接 https://blog.csdn.net/weixin_42765270/article/details/84591593 validate 一、 validate的使用步骤 引入jquery.min.js 引入 jquery.validate.js 页面加载后对表单进行验证 $("#表单id名").validate({}) 在valid...

deppin Linux下安装docker

首先楼主用的是deppin15.11   docker 简介:Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。         思想:              1.集装箱             2.标准化             3.隔离           核...

配置zabbix当内存剩余不足15%的时候触发报警

zabbix默认的剩余内存报警:Average Lack of available memory on server {HOST.NAME}{Template OS Linux:vm.memory.size[available].last(0)}<20M这个值配置的过小,每台机器的内存也不一样。 1.创建item Configuration-->...