Использование log parser для разбора множества журналов в разных папках
Я недавно начал использовать Log Parser
с визуальным интерфейсом.
журналы, которые я хочу проанализировать, поступают из IIS, и они связаны с SharePoint. Например, я хочу знать, сколько людей посещали определенные веб-страницы, и т. д.
и кажется, что IIS создает журналы в разных папках (я не знаю, почему), и каждый день появляется новый файл журнала в другой папке.
Итак, мой вопрос в том, можно ли подойти ко всем этим файлам по-разному папки?
Я знаю, что вы можете использовать From-clause
, положить разные папки, но это слишком сложно, особенно если в будущем будут добавлены новые папки. Цель состоит в том, чтобы создать один скрипт, который будет выполняться.
Так, например, в журнале папку с именем LogFIles, у меня есть папки folder1, folder2, folder3, folder4 и т. д. и в каждой папке есть файлы журналов log1, log2, log 3, logN и т.д.
поэтому мой запрос должен быть таким:Select * FROM path/LogFiles/*/*.log
но анализатор журнала не принимает его, так как же его реализовать?
5 ответов
вы можете использовать параметр-recurse при вызове logparser.
например:
logparser file:"query.sql" -i:IISW3C -o:CSV -recurse
где запрос.sql содержит:
select *
from .\Logs\*.log
и в моем текущем каталоге есть каталог под названием "журналы", который содержит несколько подкаталогов, каждый из которых содержит файлы журналов. Например:
\Logs\server1\W3SVC1
\Logs\server1\W3SVC2
\Logs\server2\W3SVC1
\Logs\server2\W3SVC2
etc.
вы можете объединить журналы, а затем запросить объединенный журнал
то, что я должен сделать, это
LogParser.exe -i:w3c "select * into E:\logs\merged.log from E:\logs\WEB35\*, E:\logs\WEB36\*, E:\logs\WEB37\*" -o:w3c
Я предпочитаю powershell следующим образом:
Select-String C:\Logs\diag\*.log -pattern "/sites/Very" | ?{$_.Line -match "Important"}
справка LogParser не перечисляет параметр-recurse, поэтому я не уверен, что он все еще поддерживается. Тем не менее, это то, что я сделал, чтобы обойти его:
предположим, вы используете следующую команду для выполнения logparser -
logparser "SELECT * INTO test.csv FROM 'D:\samplelog\test.log'" -i:COM -iProgID:Sample.LogParser.Scriptlet -o:CSV
затем просто создайте пакетный скрипт для "рекурсии" через структуру папок и проанализируйте все файлы в нем. Пакетный скрипт, который делает это выглядит так -
echo off
for /r %%a in (*) do (
for %%F in ("%%a") do (
logparser "SELECT * INTO '%%~nxF'.csv FROM '%%a'" -i:COM -iProgID:Sample.LogParser.Scriptlet
REM echo %%~nxF
)
)
выполните его из Пути, где должны быть файлы журнала разбираются расположенные. Это можно дополнительно настроить, чтобы выплюнуть все проанализированные журналы в одном файле с помощью оператора append ( > > ).
надеюсь, что это помогает.
проверьте это:https://stackoverflow.com/a/31024196/4502867 с помощью powershell рекурсивно получать элементы файлов в подкаталогах и анализировать их.