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

主机位于EDT时区。 使用EDTlogging事件日志。 IIS日志获取日志使用UTC,我不知道哪个logparser构造有助于占UTC。

例如,本地时间login的Windows 事件日志,最近20分钟内logging的条目可以通过以下方式获取:

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

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

进一步审查后,我在SYSTEM_TIME()的帮助条目中find了这个例子,即检索当前小时中logging的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 

其他build议或方法,你可以推荐?

好吧,我意识到我正在回复一个已经超过一年的post,但是我知道那里有一些Google员工会发现这个信息有用。 这里是我如何查询最后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()中指定的格式,可以将其扩展为最后一天,每月,每年(假设您没有使用-mindatemod选项来login)。

记住logparser时间格式也是有帮助的:'yyyy-MM-dd hh:mm:ss'

-MBB

试试TO_LOCALTIME函数 。

例:

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

你应该能够在3分钟之前抓住所有东西,为此我将在QUANTIZE使用SYSTEM_TIMESTAMP()

例:

 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'))" 

请记住,date和时间将采用UTC,所以请确保您将每个实例转换为当地时间,然后再进行比较。

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