3

Log Parser 2.2 を使用して IIS ログを解析し、Web サイトの特定の URL のヒット数をカウントしようとしています。タイムスタンプの処理が非常に混乱していることを除いて、すべてが正常に機能しているようです。

IIS ログには、すべてのタイムスタンプが UTC 時間で表されています。したがって、私のアプリケーションでは、クエリにプラグインする前にサーバーの時刻を UTC に変換します。しかし、当日のデータを照会しようとすると、ログ ファイルにレコードが表示されているにもかかわらず、ゼロ カウントが返されます。現在の日付内のすべてを取得するために実行しようとする生成されたクエリは次のようになります (クエリは 2009 年 11 月 11 日に実行され、アリゾナ時間を使用しています)。

SELECT COUNT(*) 
FROM \\Server\IIS Logs\LogFiles\W3SVC1\u_ex*.log
WHERE 
    cs-method = 'GET' 
    AND cs(Referer) NOT LIKE '%ntorus%'
    AND c-ip NOT LIKE '192%'
    AND c-ip NOT LIKE '127%'
    AND (
        cs-uri-stem = '/' 
        OR cs-uri-stem = '/myurl')
    AND sc-status BETWEEN 200 AND 299 
    AND date BETWEEN 
        TIMESTAMP('2009-11-11 07:00', 'yyyy-MM-dd hh:mm') 
        AND TIMESTAMP('2009-11-12 07:00', 'yyyy-MM-dd hh:mm')

何らかの理由で当日のデータがスキップされているようです。以前の日付を照会すると、問題なくデータが返されます。なぜこうなった?

4

3 に答える 3

3

ジェイコブ、投稿ありがとう。また、IIS ログで日付と時刻を比較する際にも問題がありました。あなたの質問と解決策を組み合わせることで、TO_STRING なしで検索できました。

    TO_TIMESTAMP(date, time) 
        BETWEEN TIMESTAMP('2009-11-11 07:00', 'yyyy-MM-dd hh:mm')  
            AND TIMESTAMP('2009-11-12 07:00', 'yyyy-MM-dd hh:mm')  

完全なソース:

SELECT COUNT(*)  
FROM \\Server\IIS Logs\LogFiles\W3SVC1\u_ex*.log 
WHERE  
    cs-method = 'GET'  
    AND cs(Referer) NOT LIKE '%ntorus%' 
    AND c-ip NOT LIKE '192%' 
    AND c-ip NOT LIKE '127%' 
    AND ( 
        cs-uri-stem = '/'  
        OR cs-uri-stem = '/myurl') 
    AND sc-status BETWEEN 200 AND 299  
    AND TO_TIMESTAMP(date, time) 
        BETWEEN TIMESTAMP('2009-11-11 07:00', 'yyyy-MM-dd hh:mm')  
            AND TIMESTAMP('2009-11-12 07:00', 'yyyy-MM-dd hh:mm')  
于 2010-03-02T03:06:51.613 に答える
1

LogParserがタイムスタンプの比較を適切に行わないことが判明しました。ただし、タイムスタンプを文字列に変換すると、文字列の比較は正常に機能しました。変更されたクエリは次のようになります。

SELECT COUNT(*) 
FROM \\Server\IIS Logs\LogFiles\W3SVC1\u_ex*.log
WHERE 
    cs-method = 'GET' 
    AND cs(Referer) NOT LIKE '%ntorus%'
    AND c-ip NOT LIKE '192%'
    AND c-ip NOT LIKE '127%'
    AND (
        cs-uri-stem = '/' 
        OR cs-uri-stem = '/myurl')
    AND sc-status BETWEEN 200 AND 299 
    AND TO_STRING(TO_TIMESTAMP(date, time), 'yyyy-MM-dd hh:mm') 
        BETWEEN '2009-11-11 07:00' AND '2009-11-12 07:00'
于 2009-11-12T18:46:55.760 に答える
1

Log Parser には、時刻を UTC からローカルに変換する機能があります。

AND TO_LOCALTIME(TO_TIMESTAMP(date, time))
    BETWEEN TIMESTAMP('2009-11-11 03:00', 'yyyy-MM-dd hh:mm')  
        AND TIMESTAMP('2009-11-12 03:00', 'yyyy-MM-dd hh:mm') 
于 2015-09-10T20:00:00.727 に答える