Парсинг журналов событий и сохранение результатов в БД

Powershell Logo
Очередная микро-заметка из разряда себе на память и авось кому пригодится.

Продолжая разговор о парсинге событий хочется описать методику сохранения событий из системных журналов в таблицу на MS SQL сервере.

Предположим что вам необходимо отслеживать события из журнала приложений и архивировать их в БД для последующего анализа. Изначально считаем что у вас есть предварительно настроенный SQL сервер и установлен powershell на сервере где запускается скрипт.

В приведенном ниже скрипте берутся события из журнала Application за последний час $1HourAgo = [DateTime]::Now.AddHours(-1) и из источника if ($source -like «MSExchangeIS*»). Далее данные помещаются в таблицу ExchangeAuditLog.

function parseLog
{
  param (
    [string] $SQLSERVER,
    [string] $Database
  )
  $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
  $SqlConnection.ConnectionString = "Server=$SQLSERVER;Database=$Database;Integrated Security=True"
 
  $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
  $SqlCmd.Connection = $SqlConnection
  $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

  $1HourAgo = [DateTime]::Now.AddHours(-1)
  $strings = Get-eventlog application | where {$1hourago -le $_.timewritten}
 
  foreach ($string in $strings){
    $source     = $string.source

    if ($source -like "MSExchangeIS*") {
      $source     = $string.source
      $midx       = $string.index
      $type       = $string.type
      $eventid    = $string.eventid
      $time       = $string.timegenerated
      $username   = $string.username

      $messageout = $string.message
      $message = $messageout -replace "’", " "
      $message = $message -replace "  ", ""

      $SqlCmd.CommandText = "insert into ExchangeAuditLog (midx, time, type, source, eventid, message, username) values (‘$midx’, ‘$time’, ‘$type’, ‘$source’, ‘$eventid’, ‘$message’, ‘$username’)"
      $SqlAdapter.SelectCommand = $SqlCmd
      $DataSet = New-Object System.Data.DataSet
      $SqlAdapter.Fill($DataSet)
    }
  }
  $SqlConnection.Close()
}

parseLog "SQL-01" "auditDb"

Вместо послесловия.
Скрипт был написан под задачу мониторинга событий на Exchange 2003 и успешно выполнив ее был отключен.

Буду благодарен, если поделитесь этой статьей:

Приглашаю присоединиться ко мне в следующих сервисах:
facebook Google Plus вКонтакте Twitter
Если Вам понравилась статья, то вы можете подписаться на RSS. А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.
Получать обновления на email

Вы можете оставить комментарий.

Добавить комментарий

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