【发布时间】:2019-06-03 04:46:54
【问题描述】:
我正在尝试从远程主机(我在 icinga2 中使用此脚本)从 /var/log/maillog 获取最后的 x 分钟日志,但没有运气。
我尝试了几种 awk、sed 和 grep 的组合,但似乎都没有奏效。我认为这是双引号与单引号的问题,但我使用它们并没有任何帮助。
host=$1
LOG_FILE=/var/log/maillog
hour_segment=$(ssh -o 'StrictHostKeyChecking=no' myUser@${host} 2>/dev/null "sed -n "/^$(date --date='10 minutes ago' '+%b %_d %H:%M')/,\$p" ${LOG_FILE}")
echo "${hour_segment}"
使用 bash -x 运行脚本时,我得到以下输出:
bash -x ./myScript.sh host.domain
+ host=host.domain
+ readonly STATE_OK=0
+ STATE_OK=0
+ readonly STATE_WARN=1
+ STATE_WARN=1
+ LOG_FILE=/var/log/maillog
+++ date '--date=10 minutes ago' '+%b %_d %H:%M'
++ ssh -o StrictHostKeyChecking=no myUser@host.domain 'sed -n /^Jan' 8 '12:56/,$p /var/log/maillog'
+ hour_segment=
+ echo ''
Maillog 日志文件输出。我也希望 $hour_segment 看起来像下面的输出,这样我就可以对其应用过滤器:
head -n 5 /var/log/maillog
Jan 6 04:03:36 hostname imapd: Disconnected, ip=[ip_address], time=5
Jan 6 04:03:36 hostname postfix/smtpd[9501]: warning: unknown[ip_address]: SASL LOGIN authentication failed: authentication failure
Jan 6 04:03:37 hostname imapd: Disconnected, ip=[ip_address], time=5
Jan 6 04:03:37 hostname postfix/smtpd[7812]: warning: unknown[ip_address]: SASL LOGIN authentication failed: authentication failure
Jan 6 04:03:37 hostname postfix/smtpd[7812]: disconnect from unknown[ip_address]
【问题讨论】:
-
请发布一些具有预期输出的示例数据。
-
我已将邮件日志输出添加到帖子中。
-
这种格式有很多问题:
Jan 6 04:03:36形式的日期不能排序为Feb 29 < Jan 6并且没有年份,这意味着很难确定你是哪一月需要。 2019 年的一个或 1919 年的一个。 ... -
我查看了我必须使用的邮件日志,它们是轮换的。可以肯定地说在给定日志文件中只有“1”一月吗?