Linux Apache-最近一小时的日志
我使用的是一个cPanel帐户,并且有一个apache2.4访问日志,它存储的日志如下:Linux Apache-最近一小时的日志,linux,apache,logging,awk,cpanel,Linux,Apache,Logging,Awk,Cpanel,我使用的是一个cPanel帐户,并且有一个apache2.4访问日志,它存储的日志如下: 66.249.93.30 - - [04/May/2018:21:26:39 +0200] "GET / HTTP/1.1" 302 207 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/41.0.2272.118 Safari/53
66.249.93.30 - - [04/May/2018:21:26:39 +0200] "GET / HTTP/1.1" 302 207 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/41.0.2272.118 Safari/537.36"
66.249.93.30 - - [05/May/2018:10:26:39 +0200] "GET / HTTP/1.1" 302 207 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/41.0.2272.118 Safari/537.36"
日期格式为日期“+%d/%B/%Y:%k:%M:%S”
使用bash脚本,我只想提取在过去一小时内记录的行,例如:
完整日志文件:
66.249.93.30 - - [04/May/2018:21:26:39 +0200] First Line
66.249.93.30 - - [05/May/2018:11:00:21 +0200] Second Line
66.249.93.30 - - [05/May/2018:11:15:39 +0200] Third Line
66.249.93.30 - - [05/May/2018:12:00:11 +0200] Fourth Line
66.249.93.30 - - [05/May/2018:11:15:39 +0200] Third Line
66.249.93.30 - - [05/May/2018:12:00:11 +0200] Fourth Line
当前时间:2018年5月5日:12:01:06
记录时间:5月5日11:01-12:01之间
过滤输出:
66.249.93.30 - - [04/May/2018:21:26:39 +0200] First Line
66.249.93.30 - - [05/May/2018:11:00:21 +0200] Second Line
66.249.93.30 - - [05/May/2018:11:15:39 +0200] Third Line
66.249.93.30 - - [05/May/2018:12:00:11 +0200] Fourth Line
66.249.93.30 - - [05/May/2018:11:15:39 +0200] Third Line
66.249.93.30 - - [05/May/2018:12:00:11 +0200] Fourth Line
我已经尝试使用awk和其他一些建议,但我无法让它工作,任何帮助将不胜感激 我终于明白了 我必须将2018年5月4日:21:26:39转换为UNIX时间戳。这是通过以下使用日期来完成的
date -d "YEAR-MONTH-DAY HR:M:S" "+%S"
然后再制作一个落后60分钟的UNIX时间戳
date -d "60 min ago" "+%s"
在if条件筛选器中,UNIX时间戳大于(-gt)时间戳后60分钟的所有日志项
使用我当前的设置:
cPanel+apache2.4
日志格式:/home/$USER/public\u html\u cron\u logs/$DAY/$HOUR-$MINUTE-[GET | POST].log
Like/home/$USER/public_html_cron_logs/05-05-2018/14-53-GET.log
#!/bin/bash
LOG_DIR="public_html_cron_logs"
DAY=`date +"%d-%m-%Y"`
HOUR=`date "+%H-%M"`
GET_LOG="GET.log"
POST_LOG="POST.log"
if [ ! -d /home/$USER/$LOG_DIR/$DAY ]; then
mkdir /home/$USER/$LOG_DIR/$DAY;
fi
CREATE_DIR=/home/$USER/$LOG_DIR/$DAY
GET_LOG=$CREATE_DIR/$HOUR-$GET_LOG
POST_LOG=$CREATE_DIR/$HOUR-$POST_LOG
while read line; do
DATE_LOG=`echo $line | awk '{print $4}'`; DATE_LOG=${DATE_LOG:1}
MONTH_VERB=`echo $DATE_LOG | awk -F '[/:]' '{print $2}'`
if [ "$MONTH_VERB" = "January" ]; then
MONTH=01
elif [ "$MONTH_VERB" = "February" ]; then
MONTH=02
elif [ "$MONTH_VERB" = "March" ]; then
MONTH=03
elif [ "$MONTH_VERB" = "April" ]; then
MONTH=04
elif [ "$MONTH_VERB" = "May" ]; then
MONTH=05
elif [ "$MONTH_VERB" = "June" ]; then
MONTH=06
elif [ "$MONTH_VERB" = "July" ]; then
MONTH=07
elif [ "$MONTH_VERB" = "August" ]; then
MONTH=08
elif [ "$MONTH_VERB" = "September" ]; then
MONTH=09
elif [ "$MONTH_VERB" = "October" ]; then
MONTH=10
elif [ "$MONTH_VERB" = "November" ]; then
MONTH=11
elif [ "$MONTH_VERB" = "December" ]; then
MONTH=12
fi
UNIX_DATE=`echo $DATE_LOG | awk -v AWK_MONTH="$MONTH" -F '[/:]' '{print $3"-"AWK_MONTH"-"$1" "$4":"$5":"$6}'`
UNIX_TIMESTAMP_LOG=`date -d "$UNIX_DATE" "+%s"`
UNIX_TIMESTAMP_LAST_HOUR=`date -d '60 min ago' "+%s"`
if [ $UNIX_TIMESTAMP_LOG -gt $UNIX_TIMESTAMP_LAST_HOUR ]; then
if [[ $line = *"GET"* ]]; then
echo $line | awk '{print $1}' >> $GET_LOG
else
echo $line | awk '{print $1}' >> $POST_LOG
fi
fi
done < ~/access-logs/ENTER_YOUR_DOMAIN_LOG_FILE_HERE
#/bin/bash
LOG\u DIR=“public\u html\u cron\u logs”
DAY=`date+%d-%m-%Y'`
小时=`日期'+%H-%M'`
GET_LOG=“GET.LOG”
POST_LOG=“POST.LOG”
如果[!-d/home/$USER/$LOG_DIR/$DAY];然后
mkdir/home/$USER/$LOG_DIR/$DAY;
fi
CREATE_DIR=/home/$USER/$LOG_DIR/$DAY
获取日志=$CREATE\u DIR/$HOUR-$GET\u LOG
POST_日志=$CREATE_DIR/$HOUR-$POST_日志
读行时;做
日期日志=`echo$line`awk'{print$4}`;日期日志=${DATE日志:1}
MONTH_VERB=`echo$DATE_LOG | awk-F'[/:]''{print$2}'`
如果[“$MONTH_动词”=“一月”];然后
月份=01
elif[“$MONTH_动词”=“二月”];然后
月份=02
elif[“$MONTH_动词”=“March”];然后
月份=03
elif[“$MONTH_动词”=“April”];然后
月份=04
elif[“$MONTH_动词”=“May”];然后
月份=05
elif[“$MONTH_动词”=“June”];然后
月份=06
elif[“$MONTH_动词”=“July”];然后
月份=07
elif[“$MONTH_动词”=“August”];然后
月份=08
elif[“$MONTH_动词”=“九月”];然后
月份=09
elif[“$MONTH_动词”=“十月”];然后
月份=10
elif[“$MONTH_动词”=“十一月”];然后
月份=11
elif[“$MONTH_动词”=“十二月”];然后
月份=12
fi
UNIX_DATE=`echo$DATE_LOG|awk-v awk_MONTH=“$MONTH”-F'[/:]”“{print$3”-“awk_MONTH”--“$1”$4:“$5:$6}”`
UNIX_TIMESTAMP_LOG=`date-d“$UNIX_date”“+%s”`
UNIX_TIMESTAMP_LAST_HOUR='date-d'60分钟前'+%s“`
如果[$UNIX\u TIMESTAMP\u LOG-gt$UNIX\u TIMESTAMP\u LAST\u HOUR];然后
如果[[$line=*“GET”*];然后
echo$line | awk'{print$1}'>>$GET\u LOG
其他的
echo$line | awk'{print$1}'>>$POST_LOG
fi
fi
完成<~/access logs/在此处输入\u您的\u域\u日志\u文件\u
利用问题的时间获得问题的预期输出:
$ awk -v minTime=$(date -d '2018/05/05 11:01:06' '+%Y%m%d%H%M%S') -f tst.awk file
66.249.93.30 - - [05/May/2018:11:15:39 +0200] Third Line
66.249.93.30 - - [05/May/2018:12:00:11 +0200] Fourth Line
看:嘿,赛勒斯,谢谢你的链接。我在一个小时前就看过了,我还在尝试调整比较,希望我能让它起作用:)这是错误的方法,看看原因。谢谢Ed,我已经看过你的建议,明天我会尝试实施它。我还将阅读您提供的链接-处理大约200-300行访问日志确实需要3-4秒。谢谢你抽出时间-再次感谢!