Статья размещена автором Бетке Сергей Сергеевич

Разбираем журнал (логи) ISA Server: PowerShell + LogParser

Возникла банальная задача – проверить по журналам ISA сервера, кто конкретно имел доступ к конкретному url за последние несколько месяцев. Логи текстовые (формат W3C), размеры их огромные, поэтому руками решать задачу не хочется, решил использовать LogParser и PowerShell.

Сценарий пока не оформлял должным образом, не судите строго, но его рабочая версия выглядит следующим образом:

ImportSystemModules 
Import-Module '.\ITG.Wrapper\ITG.Wrapper' # -force
Import-Module '.\ITG.LogParser\ITG.LogParser' # -force
Write-Progress -activity 'Importing modules...' -completed -status 'All done.'

Enter-ITGScript -activity 'Анализ журналов ISA сервера';

$ErrorActionPreference = 'Stop'
trap { Write-CurrentException($_); }

[string]$uri = 'http://www.umvd53.ru/information/internet-priemnaya.html';

[string]$logPrefix = 'X:\AMF\Logs\ISALogs\WEBEXTD';
[string]$logSuffix = '.log';

# дата, за которую будем проводить анализ
[System.DateTime]$logDate = (Get-Date);

$dates = 
    0..-20 `
    | %{ $logDate.AddDays($_) }
;
$dates `
| forEach-Object `
    -begin {
        [int]$logIndex = 0;
        write-progress `
            -id 10 `
            -activity $scriptActivity `
            -currentOperation $scriptActivity `
            -status "Анализ журнала ISA сервера" `
            -percentcomplete 0
    } `
    -process {
        $logDate = $_;
        $logFile = "$LogPrefix$($logDate.ToString("yyyyMMdd"))$LogSuffix";
        write-progress `
            -id 10 `
            -activity $scriptActivity `
            -status "Анализ журнала" `
            -currentOperation "$($logDate.ToString("dd.MM.yyyy")) ($($logIndex+1) из $($dates.count))" `
            -percentcomplete ($logIndex/$dates.count*100) `
        ;
        Get-LPRecordSet `
            -query "SELECT * FROM $logFile WHERE cs-uri LIKE '$uri%'" `
            -inputType 'W3C' `
        ;

        $logIndex += 1;
    } `
    -end {
        write-progress `
            -id 10 `
            -activity $scriptActivity `
            -status "Завершён анализ журнала ISA сервера." `
            -completed `
        ;
    } `
| out-gridView `
;

Exit-ITGScript;

Это его полная версия, с красивыми progress bar. Кратко же он будет выглядеть следующим образом:

ImportSystemModules 
Import-Module '.\ITG.Wrapper\ITG.Wrapper'
Import-Module '.\ITG.LogParser\ITG.LogParser'
Write-Progress -activity 'Importing modules...' -completed -status 'All done.'

# дата, за которую будем проводить анализ
[System.DateTime]$logDate = (Get-Date);
[string]$uri = 'http://www.umvd53.ru/information/internet-priemnaya.html';
[string]$logPrefix = 'X:\AMF\Logs\ISALogs\WEBEXTD';
[string]$logSuffix = '.log';

$dates = 
    0..-20 `
    | %{ $logDate.AddDays($_) } `
| %{
        $logDate = $_;
        $logFile = "$LogPrefix$($logDate.ToString("yyyyMMdd"))$LogSuffix";
        Get-LPRecordSet `
            -query "SELECT * FROM $logFile WHERE cs-uri LIKE '$uri%'" `
            -inputType 'W3C' `
        ;
} `
| out-gridView `
;

Разбираем журнал (логи) ISA Server: PowerShell + LogParser Этот сценарий даёт нам на выходе окно с возможностью фильтрации результатов на лету, что удобно для быстрого анализа.

Естественно, весь сценарий построен на возможностях LogParser, для которого я использую собственный модуль-обёртку, который уже описывал в статье про мониторинг SMTP сервера. Ищем сам LogParser на сайте Microsoft.

Сценарий разовый, поэтому и не оформлены параметры должным образом. Потребуется повторно – выложу его в исправленном варианте.

Ну и в качестве бонуса – ссылочка на snv хранилище с этим сценарием, для загрузки через TortoiseSVNtsvn:http://svn.novgaro.ru/svn/Tools/ISA/SelectURLsFromLogs/.

Отзывы » (1)

  1. Всё руки не доходят отдельно описать обёртку для LogParser и сам LogParser с его развёртыванием. Достаточно удобное решение, позволяющее выполнять SQL запросы к журналам (текстовым, в базах данных, системных журналам, реестру), причём как из командной строки, так и через COM интерфейс (что я и использовал в обёртке для PowerShell).

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка