AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 47953
In Process
Matt Howells
Matt Howells
Asked: 2009-07-31 02:24:36 +0800 CST2009-07-31 02:24:36 +0800 CST 2009-07-31 02:24:36 +0800 CST

Windows 事件日志 - 电子邮件通知

  • 772

当来自特定服务的特定严重性事件命中 Windows 服务器事件日志时,是否有一种简单的方法可以发送电子邮件?这是在 Windows Server 2003 上,如果它有所作为的话。

注意,我们确实在我的工作场所对生产服务器进行了适当的监控和警报,但我们只需要在开发中为该服务提供快速解决方案。

windows windows-event-log alerting
  • 6 6 个回答
  • 33987 Views

6 个回答

  • Voted
  1. splattne
    2009-07-31T02:33:37+08:002009-07-31T02:33:37+08:00

    您可以使用多平台开源软件OSSEC来做到这一点:

    OSSEC 是一个完整的平台,用于监视和控制您的系统。它将 HIDS(基于主机的入侵检测)、日志监控和 SIM/SIEM 的所有方面混合在一起,形成一个简单、强大且开源的解决方案。

    对于日志监控/警报:

    实时和可配置的警报

    OSSEC 允许客户配置他们希望收到警报的事件,从而让他们专注于提高关键事件的优先级,而不是任何系统上的常规噪音。与 smtp、sms 和 syslog 的集成允许客户通过将警报发送到电子邮件和手持设备(例如手机和寻呼机)来掌握警报。

    [...]

    网络上的每个操作系统、应用程序和设备都会生成日志(事件),让您了解正在发生的事情。OSSEC 收集、分析和关联这些日志,让您知道是否发生了问题(攻击、误用、错误等)。

    这是一篇关于 360° 安全性的 OSSEC 文章。


    专业的商业替代品:EventTracker(Prism Microssystems):

    EventTracker 是一个完整的安全信息和事件管理 (SIEM) 解决方案,将实时日志管理与强大的配置和变更管理结合在一个交钥匙软件包中。

    • 6
  2. Evan Anderson
    2009-07-31T18:31:14+08:002009-07-31T18:31:14+08:00

    这是我的另一个愚蠢的 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 = "[email protected]"
    Const EMAIL_RECIPIENT = "[email protected]"
    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
    

    如果您使用Non-Sucking Service Manager或 SRVANY 之类的工具来安装它,则可以将其作为 Windows 服务运行。使用 NSSM,命令行将是:

    nssm install SimpleEventLogMonitor %SystemRoot%\System32\cscript.exe "\"Pull_path_and_filename_of_script\""
    

    请务必替换您的电子邮件收件人、发件人和 SMTP 服务器名称。

    您可以使用“PushEventToMonitor”调用来定义要发出警报的事件。参数是:事件 ID、事件日志名称、源、类别、类型、用户和可以与日志消息匹配的正则表达式。我有一个匹配 TELNET 服务的启动/停止的示例,以及一个匹配脚本本身的启动(将事件记录到应用程序日志)的示例。

    这是初稿,因为我为客户写的那篇实际上“正在生产中”是写在他们的一角钱上并且“属于”他们的。因此,我重新编码了这个(实际上与客户使用的有很大不同),它很可能潜伏着愚蠢的错误。我今晚在我的一些系统上运行了一段时间,但没有发现问题。

    也许我最终会让这变得更好一点。如果它把它的配置从注册表中拉出来(这样它可以用组策略控制)并且如果它被打包成一个 MSI 以便于部署到服务器组,那就太好了。那好吧。

    • 4
  3. Peter Gfader
    2011-04-05T21:58:54+08:002011-04-05T21:58:54+08:00

    您可以使用 Windows 任务执行此操作,
    请参见此处http://www.vistax64.com/tutorials/67961-event-viewer-email-notification.html

    • 3
  4. SpaceManSpiff
    2009-07-31T04:36:57+08:002009-07-31T04:36:57+08:00

    活着的服务器可以为您做到这一点。该产品最多可免费监控 10 个事件。

    NT 事件日志监视器是一个免费插件,位于此处。非常易于使用和设置。

    • 1
  5. SirStan
    2009-07-31T04:07:43+08:002009-07-31T04:07:43+08:00

    GFI 的集中式事件日志管理工具 ( GFI EventsManager ) 可以做到这一点,但不是 FOSS。

    实时警报、SNMPv2 陷阱警报 包括

    最新版本的 GFI EventsManager™ 提高了网络上检测到的关键事件或入侵的警报级别。GFI EventsManager 允许您触发脚本等操作,或通过电子邮件、网络消息、通过电子邮件到 SMS 网关或服务发送的 SMS 通知向一个或多个人发送警报,现在包括 SNMPv2 陷阱。SNMP 警报的生成还将允许管理员将 GFI EventsManager 与预先存在的或通用的监控机制集成。

    • 0
  6. JeremyS
    2013-06-21T23:06:56+08:002013-06-21T23:06:56+08:00

    有关基于自定义事件过滤器发送电子邮件的方法,请参阅https://serverfault.com/a/517457/75770

    测试在 Server 2008 上工作,即使需要 SMTP 身份验证。

    • 0

相关问题

  • 您最喜欢的云计算提供商是什么?[关闭]

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 为什么添加新驱动器后我的磁盘驱动器访问速度如此之慢?

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

  • 最佳混合环境(OS X + Windows)备份?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve