Хост находится в часовом поясе EDT. Журналы событий регистрируются с использованием EDT. Журналы IIS регистрируются с использованием UTC, и я не уверен, какая конструкция logparser помогает учитывать UTC.
Например, Windows мероприятие журналы, зарегистрированные по местному времени, записи, зарегистрированные за последние 20 минут, могут быть получены с помощью:
>logparser "SELECT * FROM Application WHERE TimeGenerated >= TO_LOCALTIME( SUB( SYSTEM_TIMESTAMP(), TIMESTAMP( '20', 'mm' ) ) )"
Как получить записи журнала в формате IISW3C, зарегистрированные за последние 3 минуты?
После дальнейшего просмотра я нашел этот пример в записи справки для 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
Другие предложения или подходы, которые вы можете порекомендовать?
Хорошо, я понимаю, что отвечаю на сообщение, которому больше года, но я знаю, что некоторые гуглеры сочтут эту информацию полезной. Вот как я запрашиваю записи IIS за последние X минут (или часов, или секунд).
"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'))"
Его можно расширить до последнего дня, месяца, года (при условии, что вы не используете параметр -mindatemod для logparser), изменив SYSTEM_TIME () на SYSTEM_TIMESTAMP () и отредактировав формат, указанный в TO_TIMESTAMP ().
Также полезно запомнить формат времени анализатора журнала: 'гггг-ММ-дд чч: мм: сс'
-MBB
Попробуйте Функция TO_LOCALTIME.
Пример:
TO_LOCALTIME(TO_TIMESTAMP(date, time)) AS [LocalTime]
После этого вы сможете получить все через 3 минуты назад, для чего я бы использовал SYSTEM_TIMESTAMP()
внутри вашего QUANTIZE
.
Пример:
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, поэтому убедитесь, что вы преобразовали каждый экземпляр в местное время, прежде чем сравнивать их с ними.
Конечно, вы можете просто работать в часовом поясе файлов журнала, что приведет к удалению TO_LOCALTIME
из вашего последнего предложения WHERE.