web-dev-qa-db-ja.com

logparserを使用してIIS過去N分間にログに記録されたログエントリをクエリする方法は?

ホストは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

あなたが推奨できる他の提案やアプローチは?

3
ApexRx

わかりました。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

3
MrBlargityBlarg

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_が削除されます。

2
James Skemp