Получение Event log с серверов под управление Windows Server 2008 R2

Когда в фирме используется один или два сервера на Windows, проблем с проверкой ошибок и предупреждений в Event log большой проблемы нет. Можно каждый день подключаться и проверять Event log.

Совсем другая ситуации когда серверов больше и ручная проверка занимает много времени. При расширении серверного парка с 2 серверов до 6 в моей фирме, возникла такая ситуация. Идея использование сервисов для мониторинга оборудования на подобии Zabbix была откинута сразу тк:

  1. Сложность настройки, излишний функционал - город маленький и людей умеющих пользоваться такими сервисами очень мало (не всю же жизнь мне работать на одно месте, надо думать и о следующих сотрудниках)
  2. Дополнительная нагрузка на сервер - нагрузка не критичная, но все равно излишняя
  3. Необходимость ставить на клиентов агентов для мониторинга и при изменении каких либо настроек придется менять на всех серверах.

Есть еще вариант настройки на самом сервере ( по крайней мере в Windows Server 2008 r2 есть) отправки ошибок в соответствии с настроенными фильтрами. Данный вариант оказался не удобным для меня - каждая ошибка оправлялась отдельным письмом, неудобно для мониторинга.

Остался вариант с написанием скрипта. До этого всегда писал на Jscript и Bat. Но такой скрипт будет грамозким и придется подключатся к серверу через WMI и делать запросы. Вот тогда я решил попробовать. PowerShell, до этого времени я на нем ничего не писал.

В PowerShell оказались есть готовые комадны для получения Event log (get-evetlog)  и отправки сообщения (Send-MailMessage). 

В результате получился данный скрипт:

$todey = Get-Date
$yesterday = (Get-Date).adddays(-1)
$ips = "IP1", "IP2"
$log = ""
$From = "mail@maildomen.ru"
$To = "mail@maildomen.ru"
$Subject = "Event LOG Servers"
$SMTPServer = "maildomen.ru"
$SMTPPort = "25"
$Encoding = [System.Text.Encoding]::UTF8
foreach ($ip in $ips) {
	$log = $log + (get-eventlog -LogName System -ComputerName $ip -entrytype Error, Warning -after $yesterday -before $todey -AsBaseObject | Format-Table -Wrap -Property MachineName, EventID,  TimeGenerated, UserName, Source, Message | out-string)
	$log = $log + (get-eventlog -LogName Application -ComputerName $ip -entrytype Error, Warning -after $yesterday -before $todey -AsBaseObject | Format-Table -Wrap -HideTableHeaders -Property MachineName, EventID,  TimeGenerated, UserName, Source, Message | out-string)
}
Send-MailMessage -From $From -to $To -Subject $Subject -Body $log -SmtpServer $SMTPServer -Encoding $Encoding

Про описание команд get-evetlog и Send-MailMessage можно прочитать на сайте technet.microsoft.com

Коментарии (0)