Nginx 打印最近 10 分钟的日志,其中 nginx 有时间戳格式“time_iso8601”

Nginx 打印最近 10 分钟的日志,其中 nginx 有时间戳格式“time_iso8601”

目的:打印服务器中当前时间起最后10分钟的nginx api_access.log。

我如何尝试:

我尝试将 nginx api_access.log 中的时间戳与当前时间进行比较,然后打印过去 10 分钟的日志。

使用的命令:

awk -F'["+]' -v d1="$(date --date '-10 min' '+%FT%T')" -v d2="$(date '+%FT%T')" '
  $4 > d1 && $4 <d2 || $4 ~ d2' api_access.log

Nginx api_access.log:

{"@timestamp":"2020-06-15T12:36:38+00:00","msec":1592224598.704,"remote_addr":xxx xxxx}
{"@timestamp":"2020-06-15T12:51:41+00:00","msec":1592225501.530,"remote_addr":xxx xxxx}

失败:

无法比较当前时间和 2020-06-15T12:36:38+00:00 格式并从 api_access.log 打印最后 10 分钟日志

请帮忙...

答案1

使用 GNUawk并将日期转换为时间戳:

awk -v d1="$(date -d '-10 min' '+%s')" -v d2="$(date '+%s')" -F'[-":,T+]' '
  { ts=mktime($5" "$6" "$7" "$8" "$9" "$10) }
  ts >= d1 && ts <= d2
  ts > d2{ exit 0 }
' api_access.log

如果遇到的时间戳大于当前日期的时间戳,最后一行将立即退出脚本。

相关内容