ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

将某个时间段的nginx的access.log日志进行收集

2020-06-08 10:39:47  阅读:222  来源: 互联网

标签:log sum time1 access nginx awk 日志 txt


1. 将某个时间段的nginx的access.log日志进行收集

access.log日志为:

10.0.0.1 - - [14/May/2020:16:25:15 +0800] "GET /undefined HTTP/1.1" 404 153 "http://10.0.0.127:8801/" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Core/1.63.6735.400 QQBrowser/10.2.2614.400" "-"
10.0.0.1 - - [14/May/2020:16:25:25 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Core/1.63.6735.400 QQBrowser/10.2.2614.400" "-"
10.0.0.1 - - [14/May/2020:16:25:28 +0800] "GET /undefined HTTP/1.1" 404 153 "http://10.0.0.127:8801/" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Core/1.63.6735.400 QQBrowser/10.2.2614.400" "-"

思路:怎么进行时间段的比较,怎么将该时间段内产生日志的行号记录下来,怎么通过行号进行收集
解决:
(1)通过查找awk命令发现,它里面可以让格式一定的时间戳进行对比,而且能通过-v传变量,但是在执行过程中像bash 1.sh 1 2 不能将$1、$2传入一条命令的第二个awk的变量中;
(2)#sed –n 数字+p 1.txt 则可以对特定行号的内容打印出来
于是有方式一
cat x.sh

#!/bin/bash
fx() {
cat /usr/'local'/nginx/logs/access.log |awk  '{print $4}' >7.txt #截取日志的时间
cat 7.txt|awk -v num1=$time1 -v num2=$time2  -F'/' '$3 >= num1 && $3 <= num2 {print NR}' > 55.log #截取时间段内日志在第几行
>66.txt
for i in `cat 55.log`
do
  sed -n $i'p' /usr/'local'/nginx/logs/access.log >>66.txt #将日志存入66.txt
done
    }

while :
do
 read  -ep "请输入开始时间
(格式如: yyyy:mm:dd:ss):" time1

 read -ep "          请输入结束时间:" time2

 if echo $time1,$time2| grep -Eq "[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2}" > /dev/null 2>&1 #判断输入格式
   then
   fx
   exit
 else
    echo "时间格式错误!请重新输入!"
 fi
done

执行过程:
在这里插入图片描述注意:这个不能精确到月和日,收集哪年的哪时哪分哪秒

方式二,awk可以比较大小,所以也可以这样:
cat xxx.sh

#!/bin/bash
tima=`echo $1|awk -F':' '{sum=$1*3600+$2*60+$3}{print sum}'`
timb=`echo $2|awk -F':' '{sum=$1*3600+$2*60+$3}{print sum}'`
awk  -v time1=$tima -v time2=$timb -F':' '{sum=$2*3600+$3*60+$4}sum >= time1 && sum <= time2 {print $0}'   /usr/'local'/nginx/logs/access.log

执行过程:
在这里插入图片描述注意:这个是收集哪时哪分哪秒,不管哪年哪月哪日

方式三,后来又有发现:https://www.cnblogs.com/weiyiming007/p/12177429.html中,时间格式:

14/May/2020:16:25:15

这样的awk都可以直接比较
在这里插入图片描述
所以有:
cat xx.sh

#!/bin/bash
#格式要对!
awk -v time1=$1 -v time2=$2 '{split($4,array,"[");if(array[2]>=time1 && array[2]<=time2){print $0}}' /usr/'local'/nginx/logs/access.log                                                                                                          

这样一条命令就可以截取日志。
执行结果如图:
在这里插入图片描述
注意:这个是精确到哪年哪月哪日哪时哪分哪秒

标签:log,sum,time1,access,nginx,awk,日志,txt
来源: https://blog.csdn.net/weixin_43934170/article/details/106595967

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有