Журнал событий Windows - уведомление по электронной почте
Есть ли простой способ отправить электронное письмо, когда конкретная серьезность события из определенной службы попадает в журнал событий сервера Windows? Это на Windows Server 2003, если это имеет значение.
Но у нас на рабочем месте есть надлежащий мониторинг и оповещение для производственных серверов, но нам просто нужно быстрое решение для этого сервиса в разработке.
6 ответов
Вы можете сделать это с помощью OSSEC, мультиплатформенного программного обеспечения с открытым исходным кодом:
OSSEC - это полная платформа для мониторинга и управления вашими системами. Он объединяет все аспекты HIDS (обнаружение вторжения на основе хоста), мониторинг журналов и SIM/SIEM вместе в простом, мощном и открытом решении.
И для мониторинга / оповещения журнала:
Настраиваемые оповещения в режиме реального времени
OSSEC позволяет клиентам настраивать инциденты, о которых они хотят получать оповещения, что позволяет им сосредоточиться на повышении приоритета критических инцидентов по сравнению с обычным шумом в любой системе. Интеграция с smtp, sms и syslog позволяет клиентам получать оповещения, отправляя их на электронную почту и на портативные устройства, такие как сотовые телефоны и пейджеры.
[...]
Каждая операционная система, приложение и устройство в вашей сети генерируют журналы (события), чтобы вы знали, что происходит. OSSEC собирает, анализирует и сопоставляет эти журналы, чтобы вы знали, происходит ли что-то не так (атака, неправильное использование, ошибки и т. Д.).
Вот статья о OSSEC о безопасности 360°.
Специализированная, коммерческая альтернатива: EventTracker (Prism Microssystems):
EventTracker - это комплексное решение для обеспечения безопасности информации и управления событиями (SIEM), которое сочетает в себе управление журналами в режиме реального времени и мощное управление конфигурацией и изменениями в одном программном пакете "под ключ".
Вот еще одно глупое создание VBScript от меня, собранное из пары других скриптов.
Option Explicit
' Main
Dim objShell, objWMIService, objEventSink, dictEventsToMonitor, eventToMonitor
' =====================( Configuration )=====================
' Set to 0 to disable event log reporting of bans / unbans
Const USE_EVENTLOG = 1
Const EVENTLOG_SOURCE = "SimpleEventMonitor"
' SMTP configuration
Const EMAIL_SENDER = "EventLogMonitor@company.com"
Const EMAIL_RECIPIENT = "recipient@company.com"
Const EMAIL_SMTP_SERVER = "smtp-server"
Const EMAIL_SMTP_PORT = 25
Const EMAIL_TIMEOUT = 20
Set dictEventsToMonitor = CreateObject("Scripting.Dictionary")
' Define events that should be monitored. Matches are based on exact matches of all non-NULL fields
' Monitor our own startup and alert based on starting
PushEventToMonitor "100", "Application", EVENTLOG_SOURCE, NULL, NULL, NULL, NULL
PushEventToMonitor "7036", "System", "Service Control Manager", NULL, NULL, NULL, "Telnet service.*(running|stopped).*state"
' ===================( End Configuration )===================
Set objShell = CreateObject("WScript.Shell")
' Create event sink to catchevents
Set objWMIService = GetObject("winmgmts:{(security)}!root/cimv2")
Set objEventSink = WScript.CreateObject("WbemScripting.SWbemSink", "eventSink_")
objWMIService.ExecNotificationQueryAsync objEventSink, "SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent'"
' Loop sleeping for one week, logging an event each week to say we're still alive
While (True)
LogEvent 100, "INFORMATION", "Simple Event Log Monitor started"
WScript.Sleep(7 * 24 * 60 * 60 * 1000)
Wend
' Fires each time new events are generated
Sub eventSink_OnObjectReady(objEvent, objWbemAsyncContext)
Dim evt, field, boolAlert, regexpMessage
For Each evt In dictEventsToMonitor.Keys
boolAlert = True
For Each field In dictEventsToMonitor.Item(evt).Keys
If UCase(Field) = "MESSAGE" Then
Set regexpMessage = new Regexp
regexpMessage.Pattern = dictEventsToMonitor.Item(evt).Item(Field)
regexpMessage.IgnoreCase = True
If NOT regexpMessage.Test(objEvent.TargetInstance.Properties_(Field)) then boolAlert = False
Else
If UCase(objEvent.TargetInstance.Properties_(Field)) <> UCase(dictEventsToMonitor.Item(evt).Item(field)) Then boolAlert = False
End If
Next ' field
if boolAlert = True Then
SendMessage "Simple Event Log Monitor notification from " & objEvent.TargetInstance.ComputerName, _
"Event ID: " & objEvent.TargetInstance.EventCode & VbCrLf _
& "Date/Time: " & Mid(objEvent.TargetInstance.TimeGenerated, 5, 2) & "/" & Mid(objEvent.TargetInstance.TimeGenerated, 7, 2) & "/" & Mid(objEvent.TargetInstance.TimeGenerated, 1, 4) & " " & Mid(objEvent.TargetInstance.TimeGenerated, 9, 2) & ":" & Mid(objEvent.TargetInstance.TimeGenerated, 11, 2) & ":" & Mid(objEvent.TargetInstance.TimeGenerated, 13, 2) & VbCrLf _
& "Computer: " & objEvent.TargetInstance.ComputerName & vbCrLf _
& "Event Log: " & objEvent.TargetInstance.LogFile & vbCrLf _
& "Event Source: " & objEvent.TargetInstance.SourceName & vbCrLf _
& "Event Category: " & objEvent.TargetInstance.CategoryString & vbCrLf _
& "Event Type: " & objEvent.TargetInstance.Type & vbCrLf _
& "User Name: " & objEvent.TargetInstance.User & vbCrLf _
& "Message:" & vbCrLf & vbCrLF _
& objEvent.TargetInstance.Message
Exit Sub
End If
Next ' evt
End Sub
Sub LogEvent(ID, EventType, Message)
' Log an event to the Windows event log
If USE_EVENTLOG Then objShell.Exec "EVENTCREATE /L APPLICATION /SO " & EVENTLOG_SOURCE & " /ID " & ID & " /T " & EventType & " /D """ & Message & """"
End Sub
Sub SendMessage(strSubject, strBody)
Dim objCDOMessage
Set objCDOMessage = CreateObject("CDO.Message")
objCDOMessage.From = EMAIL_SENDER
objCDOMessage.To = EMAIL_RECIPIENT
objCDOMessage.Subject = strSubject
objCDOMessage.Textbody = strBody
objCDOMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = EMAIL_SMTP_SERVER
objCDOMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = EMAIL_SMTP_PORT
objCDOMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = EMAIL_TIMEOUT
objCDOMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objCDOMessage.Configuration.Fields.Update
objCDOMessage.send
End Sub
Sub PushEventToMonitor(strID, strLog, strSource, strCategory, strType, strUser, strMessagePattern)
Dim x
x = dictEventsToMonitor.Count
Set dictEventsToMonitor.Item(x) = CreateObject("Scripting.Dictionary")
If NOT IsNull(strID) Then dictEventsToMonitor.Item(x).Add "EventCode", strID
If NOT IsNull(strLog) Then dictEventsToMonitor.Item(x).Add "LogFile", strLog
If NOT IsNull(strSource) Then dictEventsToMonitor.Item(x).Add "SourceName", strSource
If NOT IsNull(strCategory) Then dictEventsToMonitor.Item(x).Add "CategoryString", strCategory
If NOT IsNull(strType) Then dictEventsToMonitor.Item(x).Add "Type", strType
If NOT IsNull(strType) Then dictEventsToMonitor.Item(x).Add "User", strUser
If NOT IsNull(strMessagePattern) Then dictEventsToMonitor.Item(x).Add "Message", strMessagePattern
End Sub
Вы можете запустить его как службу Windows, если для ее установки вы используете что-то вроде диспетчера службы не- сосания или SRVANY. Используя NSSM, команда-коммандная строка будет:
nssm install SimpleEventLogMonitor %SystemRoot%\System32\cscript.exe "\"Pull_path_and_filename_of_script\""
Обязательно укажите имя получателя, отправителя и SMTP-сервера.
Вы определяете события, о которых хотите получать оповещения, с помощью вызова "PushEventToMonitor". Аргументы: идентификатор события, имя журнала событий, источник, категория, тип, пользователь и регулярное выражение, которое можно сопоставить с сообщением журнала. У меня есть пример, который соответствует запуску / остановке службы TELNET, а также пример, который будет соответствовать запуску самого сценария (который регистрирует событие в журнале приложений).
Это первый черновик, потому что тот, который я написал для Заказчика, который на самом деле "в производстве", был написан на их копейки и "принадлежит" им. Как таковой, я перекодировал этот (который на самом деле существенно отличается от того, который использует Заказчик), и в нем могут скрываться глупые ошибки. Я немного поработал сегодня вечером на некоторых своих системах и не вижу проблем.
Может быть, я в конце концов сделаю это немного лучше. Было бы хорошо, если бы он вытащил свою конфигурацию из реестра (чтобы ее можно было контролировать с помощью групповой политики) и если он был упакован в виде MSI для простого развертывания на группы серверов. Ну что ж.
Вы можете сделать это с помощью задачи Windows
Смотрите здесь http://www.vistax64.com/tutorials/67961-event-viewer-email-notification.html
Живые серверы могут сделать это за вас. Продукт бесплатен для отслеживания до 10 событий.
Монитор журнала событий NT - бесплатный плагин, расположенный здесь. Довольно прост в использовании и настройке.
См. /questions/61205/server-2008-elektronnaya-pochta-na-peremennyih-sobyitiya/61206#61206 для способа отправки электронных писем на основе пользовательских фильтров событий.
Протестировано работает на Server 2008, и даже когда SMTP-аутентификация не требуется.
Средство централизованного управления журналом событий GFI ( GFI EventsManager) делает это, хотя и не FOSS.
Уведомления в режиме реального времени, оповещения о ловушках SNMPv2 включены
В последней сборке GFI EventsManager™ улучшен уровень предупреждений для ключевых событий или вторжений, обнаруженных в сети. GFI EventsManager позволяет запускать такие действия, как сценарии, или отправлять оповещение одному или нескольким людям по электронной почте, сетевым сообщениям, SMS-уведомлениям, отправляемым через шлюз или службу электронной почты в SMS, и теперь включает ловушки SNMPv2. Генерация предупреждений SNMP также позволит администраторам интегрировать GFI EventsManager с уже существующими или общими механизмами мониторинга.