Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Apache-最近一小时的日志_Linux_Apache_Logging_Awk_Cpanel - Fatal编程技术网

Linux Apache-最近一小时的日志

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

我使用的是一个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/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秒。谢谢你抽出时间-再次感谢!