如何使用logparser查询过去N分钟内记录的IIS日志条目?

如何使用logparser查询过去N分钟内记录的IIS日志条目?

主机位于 EDT 时区。事件日志使用 EDT 记录。IIS 日志使用 UTC 记录,我不确定哪个日志解析器构造有助于解释 UTC。

例如,Windows事件日志,以当地时间登录,可以使用以下方式检索过去 20 分钟登录的条目:

>logparser "SELECT * FROM Application WHERE TimeGenerated >= TO_LOCALTIME( SUB( SYSTEM_TIMESTAMP(), TIMESTAMP( '20', 'mm' ) ) )"

如何检索前 3 分钟记录的 IISW3C 格式的日志条目?

经过进一步审查,我在 SYSTEM_TIME() 的帮助条目中找到了此示例,即检索当前小时内记录的 IIS 日志条目:

logparser -i:IISW3C "SELECT * FROM <1> WHERE date = SYSTEM_DATE() AND time >= QUANTIZE( SYSTEM_TIME(), 3600 )" -o:NAT

当前尝试检索过去 180 秒(我想是吧?),仍在尝试理解它...;-)

logparser -i:IISW3C "SELECT Time, Date, cs-uri-stem FROM <1> WHERE date = SYSTEM_DATE() AND time >= QUANTIZE( SYSTEM_TIME(), 180 )" -RTP:-1

您还能推荐其他建议或方法吗?

答案1

好的,我意识到我正在回复一篇一年多前的帖子,但我知道有些谷歌用户会发现这些信息很有用。下面是我查询过去 X 分钟(或几小时或几秒)的 IIS 条目的方法。

"select TO_LOCALTIME(time), c-ip, cs-method, sc-status, cs-uri-stem from <1> where TIME > SUB(SYSTEM_TIME(), TO_TIMESTAMP('00:05:00','hh:mm:ss'))"

通过将 SYSTEM_TIME() 更改为 SYSTEM_TIMESTAMP() 并编辑 TO_TIMESTAMP() 中指定的格式,可以将其扩展为最后一天、月份、年份(假设您没有对 logparser 使用 -mindatemod 选项)。

记住日志解析器的时间格式也很有帮助:“yyyy-MM-dd hh:mm:ss”

—MBB

答案2

尝试TO_LOCALTIME 函数

例子:

TO_LOCALTIME(TO_TIMESTAMP(date, time)) AS [LocalTime]

然后你应该能够抓取 3 分钟后的所有内容,为此我会SYSTEM_TIMESTAMP()在你的 中使用它QUANTIZE

例子:

logparser "select top 10 TO_LOCALTIME(SYSTEM_TIMESTAMP()), SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP('0000-01-01 00:03', 'yyyy-MM-dd HH:mm')) from \\192.168.1.104\wwwroot\ex*.log"

这将返回当前系统时间和 3 分钟前的时间。因此,您的 WHERE 子句大致如下LocalTime > SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP('0000-01-01 00:03', 'yyyy-MM-dd HH:mm'))

logparser "select top 10 TO_LOCALTIME(TO_TIMESTAMP(date, time)) AS [LocalTime], * FROM \\192.168.1.104\wwwroot\ex*.log WHERE LocalTime > SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP('0000-01-01 00:03', 'yyyy-MM-dd HH:mm'))"

请记住,日期和时间将采用 UTC,因此请确保在与它们进行比较之前将每个实例转换为本地时间。

当然,您可以只在日志文件的时区内工作,这将从TO_LOCALTIME您的最终 WHERE 子句中删除。

相关内容