【问题标题】:Parsing log files in BASH to find "ERROR" entries between certain time stamps在 BASH 中解析日志文件以查找特定时间戳之间的“错误”条目
【发布时间】:2011-08-16 04:32:57
【问题描述】:

我正在用 BASH 编写一个脚本,它需要检查日志文件中的错误条目。我计划每小时运行一次,所以我只想让它只返回过去一小时内发生的错误类型条目(所有服务器时间都是格林威治标准时间)。我建立以下变量

# Log file directory
LOGPATH="/path/to/logs/"
# Current date and time
CURDATE=`date +%Y-%m-%d`
CURTIME=`date +%H:%M:%S`
# Old date and time
OLDDATE=`date +%Y-%m-%d -d "1 hour ago"`
OLDTIME=`date +%H:%M:%S -d "1 hour ago"`

所有日志文件都遵循 ktYEAR-MONTH-DAY.root.log.txt 的文件名格式,其中 YEAR/MONTH/DAY 替换为记录条目的日期。例如,今天的日志文件将是kt2011-08-15.root.log.txt。内容的示例条目是

2011-08-15 | 19:30:02 | ERROR | 18333 | 337 | n/a | dms | default | error | XMLRPC Lucene - addDocument - Reason: Failed to parse XML-RPC request: An invalid XML character (Unicode: 0xb) was found in the element content of the document.

感兴趣的列是第 1、2、3 列(值可能是“INFO”、“DEBUG”等,但只有当“ERROR”是值时才感兴趣)和最后一列是正文记录消息。

我想要完成的是让这个 BASH 脚本解析具有跨越活动最后一小时的条目的文件(如第 1 列和第 2 列中所定义),并且如果第 4 列包含字符串“ ERROR”,然后显示最右侧列的内容。当我试图确定如何根据$CURTIME$OLDTIME 解析日志文件时,我感到困惑,午夜来临时变得更糟,然后我必须搜索前一天的日志文件。我不希望对所有日志文件进行全面的 grep 样式搜索,因为数量和大小可能过多,但如果必须这样做,那就这样吧。

【问题讨论】:

  • 您的日志格式看起来像 log4j 的输出。如果是这种情况,我建议创建一个仅包含错误消息的新输出文件。

标签: bash datetime logfiles


【解决方案1】:
 awk -F ' \\| ' -v "d=$(date -d "1 hour ago" -u +%Y-%m-%d@%H:%M:%S)" '$3 == "ERROR" && $1"@"$2 > d'

【讨论】:

    【解决方案2】:

    这就像在 awk 中进行字符串比较一样简单。午夜过后,只需将$OLDDATE 文件添加到搜索中即可:

    if [ "$CURDATE" != "$OLDDATE" ]; then
       cat "kt$OLDDATE.root.log.txt" "kt$CURDATE.root.log.txt"
    else
       cat "kt$CURDATE.root.log.txt"
    fi | awk -F "|" -v olddate=$OLDDATE -v oldtime=$OLDTIME -v curdate=$CURDATE 'BEGIN{olddate=olddate " "; curdate = curdate " "; oldtime = " " oldtime " "}
    $1 == olddate && $2 >= oldtime && $3 == " ERROR "{print $0}
    $1 > olddate && $3 == " ERROR "{print $0}'
    

    可以结合 glenn 的解决方案来缩短很多时间。

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 2017-08-06
      相关资源
      最近更新 更多