Log Parser 2.2, пропускающий сегодняшние журналы IIS - PullRequest
3 голосов
/ 12 ноября 2009

Я пытаюсь подсчитать количество посещений определенного URL на нашем веб-сайте, анализируя наши журналы IIS с помощью Log Parser 2.2. Кажется, все работает нормально, за исключением того, что обработка временных меток меня сильно смущает.

Журналы IIS имеют все метки времени, выраженные в времени UTC. Поэтому в моем приложении я конвертирую время сервера в UTC, прежде чем подключить его к запросу. Однако, когда я пытаюсь запросить данные текущего дня, я получаю нулевой счет, несмотря на то, что вижу записи в файле журнала. Сгенерированный запрос, который я пытаюсь выполнить, чтобы получить все в течение текущего дня, выглядит примерно так (запрос выполняется 11/11/2009, и я использую время Аризоны):

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

По какой-то причине данные текущего дня пропускаются. Запрашивая более ранние даты, я получаю данные просто отлично. Почему это происходит?

Ответы [ 3 ]

2 голосов
/ 02 марта 2010

Jacob, Спасибо за ваш пост. У меня также были проблемы при сравнении даты / времени в журналах 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')  
1 голос
/ 10 сентября 2015

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') 
1 голос
/ 12 ноября 2009

Оказывается, что Log Parser не выполняет сравнения меток времени должным образом. Однако, когда я преобразовал метки времени в строки, сравнение строк работало нормально. Вот как выглядит измененный запрос:

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'
...