ホストはEDTタイムゾーンにあります。イベントログはEDTを使用してログに記録されます。 IISログはUTCを使用してログに記録されており、どのlogparser構造がUTCの説明に役立つかわかりません。
たとえば、Windows eventログ、現地時間でログイン、過去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オプションを使用していない場合)。
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'))"
_
日付と時刻はUTCであるため、インスタンスと比較する前に、必ずすべてのインスタンスを現地時間に変換してください。
もちろん、ログファイルのタイムゾーン内で作業することもできます。これにより、最後のWHERE句から_TO_LOCALTIME
_が削除されます。