SIOS SANless clusters

SIOS SANless clusters High-availability Machine Learning monitoring

  • Home
  • 产品
    • SIOS DataKeeper for Windows
    • SIOS Protection Suite for Linux
  • 新闻与活动
  • 服务器集群简单化
  • 成功案例
  • 联系我们
  • English
  • 中文 (中国)
  • 中文 (台灣)
  • 한국어
  • Bahasa Indonesia
  • ไทย

特定Windows服务启动或停止时触发电子邮件警报

11月 18, 2018 by Jason Aw Leave a Comment

如何在Windows Server 2016上启动或停止特定Windows服务时触发电子邮件警报

循序渐进:如何在Windows Server 2016上启动或停止特定Windows服务时触发电子邮件警报

与我上一篇文章的不同之处在于,我向您展示了如何根据Windows事件日志中记录的特定Windows EventID发送电子邮件警报,这次我将分享如何在特定Windows服务启动或停止时触发电子邮件警报。它适用于大多数活动。虽然请注意,如果您希望在特定Windows服务启动或停止时收到通知,这并不理想。当Windows服务启动或停止时,Windows系统日志中会记录源“服务控制管理器”中的EventID 7036。现在,我们可以设置一个触发器,以便在记录EventID时发送电子邮件,就像我在上一篇文章中所描述的那样。 但是,您可能不希望在每个Windows服务启动或停止时收到电子邮件。为了更具体一点,我们必须在设置触发器时编辑与Windows事件过滤器关联的XML数据。这是为了更深入地了解事件属性并对EventData进行过滤,该事件仅在您在Windows事件的“详细信息”选项卡上查看XML视图时显示。这项工作在Windows Server 2016上得到了验证,但我怀疑它也可以在Windows Server 2012 R2和Windows Server 2019上运行。如果您在任何其他平台上工作,请发表评论并告知我们您是否需要更改任何内容。

第1步 – 编写Powershell脚本

您需要做的第一件事是编写一个Powershell脚本,在运行时可以发送电子邮件。您需要该电子邮件才能在特定Windows服务启动或停止时触发电子邮件警报。有很多方法可以完成这项任务。我即将向您展示只是一种方式,但您可以随意尝试并使用适合您环境的方法。在我的实验室中,我没有运行自己的SMTP服务器,因此我必须编写一个可以利用我的Gmail帐户的脚本。您将在我的Powershell脚本中看到对SMTP服务器进行身份验证的电子邮件帐户的密码是纯文本格式。如果您担心某人可能有权访问您的脚本并发现您的密码,那么您将需要加密您的凭据。Gmail需要和SSL连接,因此您的密码应该是安全的,就像任何其他电子邮件客户端一样。下面是一个Powershell脚本示例,当与Task Scheduler结合使用时,它会在Windows事件日志中记录任何指定的事件时自动发送电子邮件警报。在我的环境中,我将此脚本保存到C: Alerts ServiceAlert.ps1

$ filter =“* [System [EventID = 7036] and EventData [Data ='SIOS DataKeeper']]”
$ A = Get-WinEvent -LogName系统-MaxEvents 1 -FilterXPath $ filter
$ Message = $ A.Message
$ EventID = $ A.Id
$ MachineName = $ A.MachineName
$ Source = $ A.ProviderName


$ EmailFrom =“sios@medfordband.com”
$ EmailTo =“sios@medfordband.com”
$ Subject =“来自$ MachineName的警报”
$ Body =“EventID:$ EventID`nSource:$ Source`nMachineName:$ MachineName`n $ Message”
$ SMTPServer =“smtp.gmail.com”
$ SMTPClient = New-Object Net.Mail.SmtpClient($ SmtpServer,587)
$ SMTPClient.EnableSsl = $ true
$ SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“sios@medfordband.com”,
 “MySMTPP @ 55w0rd”);
$ SMTPClient.Send($ EmailFrom,$ EmailTo,$ Subject,$ Body)

从Powershell脚本生成的电子邮件示例如下所示。服务警报电邮 您可能已注意到此Powershell脚本使用Get-WinEvent cmdlet根据LogName,EventID和EventDataspecified获取最新的事件日志条目。然后它解析该事件并将EventID,Source,MachineName和Message分配给将用于撰写电子邮件的变量。您将看到指定的LogName,EventID和EventData与您在步骤2中设置计划任务时指定的内容相同。虽然EventID,LogName可能对您来说很熟悉,但EventData可能并不那么熟悉。要查看与特定事件关联的EventData,您需要在事件查看器中打开事件,查看“详细信息”选项卡,然后选择“XML视图”。从XML视图中,您可以看到事件中包含的所有数据。在XML的底部附近,您将看到一个名为<EventData>的数据数组。在那里,您将找到存储为参数的其他事件数据。如下所示,在“param1”中,我们将找到停止或启动的服务名称。事件数据

第2步 – 设置计划任务

在任务计划程序中创建一个任务,如以下屏幕截图所示。

  1. 创建任创建任务务确保将任务设置为“运行”,无论用户是否已登录。服务 - 一般
  2.  在“触发器”选项卡上,选择“新建”以创建将启动“在事件上”任务的触发器。在我的示例中,我将创建一个事件,触发任何时候DataKeeper(extmirr)将重要事件记录到系统日志。创建任务3 创建一个自定义事件和新事件过滤器,如下所示..创建任务 - 触发器.对于我的触发器,您可以开始设置一个监视7036的触发器,正如我在上一篇文章中所描述的那样。但是,过滤器GUI界面不允许我们指定存储在EventData的Param1中的服务名称,如前所述。为了监控我们感兴趣的特定服务,我们需要直接编辑XML,如下所示。服务 - XML 如果您只是直接跳到追逐,请随意复制我的XML,并将“SIOS DataKeeper”替换为存储在您要监控的事件的param1中的事件数据。
    <QueryList>
    <Query Id =“0”Path =“System”>
    <Select Path =“System”> * [System [(Level = 4或Level = 0)和(EventID = 7036)]] 
    和* [EventData [Data [1] ='SIOS DataKeeper']] </ Select>
    </查询>
    </ QueryList>
  3. 配置事件触发器后,您将需要配置事件运行时发生的操作。在我们的例子中,我们将运行我们在步骤1中创建的Powershell脚本。行动 - 2服务 - 任务
  4. 默认的Condition参数应该足够了。条件 - 1
  5. 最后,在“设置”选项卡上,确保允许按需运行任务,并在任务已在运行时“排队新实例”。

    2018-10-28_00-17-27

步骤3(如有必要) – 修复Microsoft -Windows – Distributedcom事件ID:10016错误

理论上,如果您正确地执行了所有操作,则只要您正在监视的某个事件记录在事件日志中,您就应该立即开始接收电子邮件。  但是,我在我的一台服务器上遇到了一个奇怪的权限问题,我必须在一切工作之前解决这个问题。我不确定你是否会遇到这个问题,但以防这里是修复。在我的情况下,当我手动触发事件,或者我直接运行Powershell脚本时,一切都按预期工作,我收到了一封电子邮件。但是,如果正在监视的某个EventID被记录到事件日志中,则不会导致发送电子邮件。我唯一的线索是每当我期望任务触发器检测到记录的事件时,我的系统事件日志中记录的事件ID:10016。

日志名称:系统
来源:Microsoft-Windows-DistributedCOM
日期:10/27/2018 5:59:47 PM
事件ID:10016
任务类别:无
等级:错误
关键词:经典
用户:DATAKEEPER  dave
电脑:sql1.datakeeper.local
描述:
特定于应用程序的权限设置不授予“本地激活”权限 
对于具有CLSID的COM Server应用程序 
{D63B10C5-BB46-4990-A94F-E40B9D520160}
和APPID 
{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}
给用户DATAKEEPER  dave SID(S-1-5-21-25339xxxxx-208xxx580-6xxx06984-500)来自 
地址LocalHost(使用LRPC) 
在应用程序容器中运行不可用SID(不可用)。
可以使用组件服务管理工具修改此安全权限。

此错误的许多Google搜索结果都表明该错误是良性的,并包含有关如何抑制错误而非修复错误的说明。但是,我非常确定此错误是导致我当前无法从受监视的事件日志条目触发的计划事件发送电子邮件警报的原因。我需要解决它。经过多次搜索,我偶然发现了这个新闻组的讨论。  Marc Whittlesey的回应使我指出了正确的方向。这是他写的……

在转到组件服务中的DCOM配置之前,您必须设置2个注册表项:CLSID密钥和APPID密钥。

我建议你按照一些步骤解决问题:

1。 按Windows + R键并键入regedit,然后按Enter键。2。 转到HKEY_Classes_Root CLSID * CLSID *。3。 右键单击它然后选择权限。4。 单击“高级”并将所有者更改为管理员。同时单击将显示在所有者行下方的框。5。 适用完全控制。6。 关闭选项卡,然后转到HKEY_LocalMachine Software Classes AppID * APPID *。7。 右键单击它然后选择权限。8。 单击“高级”并将所有者更改为管理员。9。 单击将显示在所有者行下方的框。10。 单击“应用”并向管理员授予完全控制权。11。 关闭所有选项卡,然后转到管理工具。12。 开放组件服务。13。 单击“计算机”,单击“我的电脑”,然后单击“DCOM”。14。 查找错误查看器上显示的相应服务。15。 右键单击它,然后单击属性。16。 单击安全选项卡,然后单击添加用户,添加系统,然后应用 17。 勾选激活本地框。因此,请在此处使用相关密钥,DCOM配置应该可以访问灰色区域:CLSID {D63B10C5-BB46-4990-A94F-E40B9D520160} APPID {9CA88EE3-ACB7-47C8-AFC4-AB702511C276}

我几乎可以逐字逐句地遵循步骤1-15。然而,当我到达第16步时,我真的无法确切地说出他想要我做什么。起初我将DATAKEEPER dave用户帐户完全控制授予RuntimeBroker。但这并没有解决问题。最后我只是在所有三个权限上选择了“使用默认值”并修复了问题。RuntimeBroker 我不确定这是怎么发生的,为什么会发生这种情况,但我想我最好把它全部写下去以防它再次发生,因为我花了一段时间来弄清楚它。

步骤4-自动部署

如果需要在多个系统上启用相同的警报,只需将任务导出到XML文件并将其导入其他系统即可。导出[/ caption] [captio特定Windows服务启动或停止时的电子邮件警报n id =“attachment_2346”align =“alignnone”width =“391”]导入[/ caption]甚至更好,在文件共享中提供XML文件后,通过Powershell脚本自动执行构建过程中的导入,如以下示例所示。

PS C:> Register-ScheduledTask -Xml(get-content'\ myfileshare  tasks  DataKeeperAlerts.xml' 
| out-string)-TaskName“DataKeeper Service Alerts”-User datakeeper  dave 
-Password MyDomainP @ 55W0rd -Force

最后,特定Windows服务启动或停止时的电子邮件警报

希望我提供的内容能为您提供开始接收警报通知电子邮件所需的一切,无论您使用哪种Windows服务让您夜不能寐。以上是关于配置电子邮件警报的系列文章。在本系列中,我介绍了基于Perfmon计数器,事件日志条目以及本文Windows服务启动和停止事件的配置警报。当然,您可以扩展这些文章中描述的Powershell脚本,而不仅仅是发送电子邮件。许多警报或意外服务中断通常需要一些补救措施。为什么不编写恢复步骤的脚本,让触发的任务为您解决问题?我个人建议您投资SCOM,SolarWinds或其他一些企业管理系统,但如果这不在您工作的卡片中,那么这些文章可以帮助您。要了解有关特定Windows服务启动或停止时的电子邮件警报的更多提示,请与我们联系转发,并获得Clusteringformeremortals.com的许可

Filed Under: 服务器集群简单化 Tagged With: 特定Windows服务启动或停止时的电子邮件警报

将SQL Server 2008和2008 R2群集移至Azure以获得扩展支持

11月 16, 2018 by Jason Aw Leave a Comment

将SQL Server 2008和2008 R2群集移至Azure以获得扩展支持

将SQL Server 2008和2008 R2群集移至Azure以获得扩展支持

今年早些时候,如果将SQL Server 2008和2008 R2群集迁移到Azure,Microsoft将宣布扩展支持。 有关所有详细信息,请查看https://www.microsoft.com/en-us/sql-server/sql-server-2008。 如果您选择不搬家,您的延期支持将于2019年7月9日结束。将SQL Server 2008和2008 R2群集移至Azure以获得扩展支持 如果您仍在运行SQL Server 2008 R2,可能是因为您从未升级过您的应用程序。因此不支持更新版本的SQL。或许,你决定不修复没有破坏的东西。无论这些原因如何,如果您迁移到Azure,您刚刚为自己购买了三年的支持。现在,使用Azure Site Recovery将工作负载迁移到Azure是一个很好的文档化过程。对于SQL Server的独立实例,该过程应该是非常无缝的。但是那些SQL Server的集群实例呢?当你搬到Azure时,你肯定不想放弃可用性。Azure的一部分优点是它们拥有您梦寐以求的基础设施。但是,用户有责任配置其应用程序以充分利用基础结构,以确保您的部署具有高可用性。对于SQL Server 2008和2008 R2,高可用性通常意味着Windows Server 2008 R2或Windows Server 2012 R2上的SQL Server故障转移群集。如果您是Azure的新手,您将很快发现没有支持共享存储群集的本机选项。相反,您需要查看SANLess集群解决方案,例如SIOS DataKeeper。Microsoft在其文档中列出了SIOS DataKeeper作为SQL Server故障转移群集的HA解决方案。

将SQL Server 2008和2008 R2群集移至Azure以获得扩展支持
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-high-availability-dr

入门

让我们开始将SQL Server 2008和2008 R2集群迁移到Azure以获得扩展支持。以下是您需要采取的高级步骤。

  • 使用DataKeeper卷资源替换现有内部部署SQL Server群集中的物理磁盘资源。如果使用MSDTC,请对MSDTC资源执行相同操作。
  • 删除您的磁盘见证并将其替换为文件共享见证。
  • 使用Azure Site Recovery将群集节点复制到Azure中,确保每个复制节点位于Azure中的不同故障域或不同可用区中
  • 在Azure中恢复复制群集节点
  • 将文件共享见证替换为Azure中托管的文件共享
  • 在Azure中配置内部负载均衡器以进行客户端重定向。这包括在本地节点上运行Powershell脚本以更新SQL Cluster IP资源以侦听ILB探测
  • 假设在此迁移过程中更改了SQL Server群集实例的IP地址和子网,您还需要对群集IP地址和DataKeeper作业端点进行一些清理以反映新的IP地址

我知道我遗漏了很多细节。但是,如果您发现自己处于不得不将SQL Server升级到Azure或任何云计算的位置,我很乐意与您联系以回答您可能遇到的任何问题。请记住,相同的步骤适用于您计划迁移到Azure的任何SQL版本。如果您需要将SQL Server 2008和2008 R2 Clusters移至Azure,请与我们联系。经Clusteringformeremortals.com许可转载

Filed Under: 服务器集群简单化 Tagged With: SQL Server 2008

用于灾难恢复的Azure站点恢复

11月 11, 2018 by Jason Aw Leave a Comment

通过基于云的灾难恢复,Azure Site Recovery确保应用程序可用性

#IGNITE2018会话:通过基于云的灾难恢复,Azure Site Recovery确保应用程序可用性

我是Azure Site Recovery for Disaster Recovery的忠实粉丝所以,我很高兴参加Rochak Mittal和Ashish Gangwar今天举办的Ignite会议。

通过基于云的灾难恢复,Azure Site Recovery确保应用程序可用性

#IGNITE2018会话:通过基于云的灾难恢复,Azure Site Recovery确保应用程序可用性

我是Azure Site Recovery for Disaster Recovery的忠实粉丝所以,我很高兴参加今天由Rochak Mittal和Ashish Gangwar BRK3304呈现的Ignite会议 – 在Azure上构建关键任务,高性能SAP工作负载此会议关于确保应用程序可用性基于云的灾难恢复,Azure Site Recovery提供了特别丰富的信息。在其中一个体系结构幻灯片中,他们展示了如何通过Azure Site Recovery(ASR)保护整个SAP部署,并在几分钟内发生灾难时恢复。使用Azure恢复计划可以让您明确控制恢复。它包括创建对资源的依赖关系以及在VM中调用脚本以帮助促进完全恢复。好像昨天。但它早在2014年5月,当时我第一次开始协助微软为Azure中的SAP ASCS提供HA解决方案。该解决方案涉及使用DataKeeper为ASCS构建SANless集群解决方案。它仍然是今天唯一的HA解决方案,它也可以与ASR一起用于灾难恢复配置,例如Ignite的演示中所示。 Azure中的共享磁盘与SIOS DataKeeper [/ caption]想知道如何通过基于云的灾难恢复,Azure Site Recovery确保应用程序可用性,让我们来看看知道,我们很乐意提供帮助。经Clusteringformeremortals.com许可转载

Filed Under: 服务器集群简单化

如何从Windows性能监视器触发电子邮件警报

11月 10, 2018 by Jason Aw Leave a Comment

从Windows性能监视器触发电子邮件警报

循序渐进:如何从Windows性能监视器触发电子邮件警报

循序渐进:如何从Windows性能监视器触发电子邮件警报

从Windows性能监视器触发电子邮件警报

循序渐进:如何从Windows性能监视器触发电子邮件警报

Windows性能计数器警报可以配置为通过使用用户定义的数据收集器集在任何性能监视器(Perfmon)计数器上触发。但是,如果您希望在触发警报时通过电子邮件收到通知,则必须使用Perfmon,任务计划程序和好的'Powershell'的组合。按照以下步骤从Windows性能监视器触发电子邮件警报。

第1步 – 编写Powershell脚本

您需要做的第一件事是编写一个Powershell脚本,在运行时可以发送电子邮件。在研究这个问题时,我发现了很多方法来完成这项任务。 我要向您展示的只是一种方式,但您可以随意尝试并使用适合您环境的方法。在我的实验室中,我没有运行自己的SMTP服务器。我编写了一个可以利用我的Gmail帐户的脚本。您将在我的Powershell脚本中看到,对SMTP服务器进行身份验证的电子邮件帐户的密码是纯文本格式。如果您担心某人可能有权访问您的脚本并发现您的密码,那么您将需要加密您的凭据。Gmail需要和SSL连接。您的密码应该是安全的,就像任何其他电子邮件客户端一样。以下是与Task Scheduler和Perfmon结合使用时Powershell脚本的示例。它们可以在满足任何用户定义的性能计数器阈值条件时自动发送电子邮件警报。在我的环境中,我将其设置为C: Alerts Alerts.ps1

$ counter = $ Args [0]
$ dtandtime = $ Args [1]
$ ctr_value = $ Args [2]
$ threshold = $ Args [3]
$ value = $ Args [4]
$文件名= “$ ENV:计算机名”
$ EmailFrom =“sios@medfordband.com”
$ EmailTo =“dave@medfordband.com”
$ Subject =“来自$ FileName的警报”
$ Body =“数据和警报时间:$ dtandtime`nPerfmon计数器:$ ctr_value`nThreshold值:$ threshold`n当前值:$ value”
$ SMTPServer =“smtp.gmail.com”
$ SMTPClient = New-Object Net.Mail.SmtpClient($ SmtpServer,587)
$ SMTPClient.EnableSsl = $ true
$ SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“sios@medfordband.com”,“ChangeMe123”);
$ SMTPClient.Send($ EmailFrom,$ EmailTo,$ Subject,$ Body)

从Powershell脚本生成的电子邮件示例如下所示。如何从Windows性能监视器触发电子邮件警报 你可能已经注意到这个Powershell脚本有四个参数。它还将它们分配给输出中使用的变量。它将计算机名称保存到变量中,该变量用作输出的一部分。通过这样做,该脚本可用于在任何Perfmon警报计数器和任何服务器上发送电子邮件,而无需额外的自定义。

第2步 – 设置计划任务

在任务计划程序中,我们将在以下屏幕截图中显示创建新任务。如何从Windows性能监视器触发电子邮件警报 为任务命名,您需要记住它以进行下一步。如何从Windows性能监视器触发电子邮件警报 请注意,没有触发器。此任务实际上将通过我们将在步骤3中设置的Perfmon计数器警报触发。如何从Windows性能监视器触发电子邮件警报 您想在“操作”选项卡上定义新操作。操作将是启动程序并使用以下输入。请根据您的具体环境进行调整。程序脚本:C: Windows System32 WindowsPowerShell v1.0 powershell.exe添加参数:-File C: Alerts Alerts.ps1 $(Arg0) 如何从Windows性能监视器触发电子邮件警报 如何从Windows性能监视器触发电子邮件警报 如何从Windows性能监视器触发电子邮件警报 如何从Windows性能监视器触发电子邮件警报

第3步 – 创建性能计数器

创建新的数据收如何从Windows性能监视器触发电子邮件警报如何从Windows性能监视器触发电子邮件警报如何从Windows性能监视器触发电子邮件警报集器集添加要监视的性能计数器并设置警报阈值。如何从Windows性能监视器触发电子邮件警报 如何从Windows性能监视器触发电子邮件警报 创建数据收集器集后,请进入其属性,并确保为每个性能计数器正确设置警报阈值和样本间隔。请记住,如果您每10秒采样一次,那么只要性能计数器超过您设置的阈值,您就应该每隔10秒收到一封电子邮件。如何从Windows性能监视器触发电子邮件警报 如果选择在应用程序事件日志中记录条目,则不希望在正常的应用程序事件日志中看到任何条目。它将写入应用程序和服务日志目录中的Microsoft-Windows-Diagnosis-PLA / Operational日志。如何从Windows性能监视器触发电子邮件警报 然后最后我们必须设置一个警报任务,它将触发我们在步骤2中创建的计划任务(EmailAlert)。您会看到我们还传递了一些Powershell脚本使用的Task参数,以自定义具有与Alert相关的确切错误条件的电子邮件。如何从Windows性能监视器触发电子邮件警报 正确配置Data Collector后,您将需要启动它。如何从Windows性能监视器触发电子邮件警报 如果您正确配置了所有内容,则应在满足警报阈值时开始查看电子邮件。如果它似乎不起作用,请检查以下内容……

  • 手动运行Powershell脚本以确保其有效。您可能需要手动设置一些变量以用于测试目的。在我的情况下,需要稍微调整以使Powershell脚本正常工作,所以从此开始。
  • 检查任务历史记录以确保警报计数器正在触发任务。如何从Windows性能监视器触发电子邮件警报
  • 手动运行任务,看它是否触发Powershell。

步骤4 – 将性能计数器设置为自动运行

如果您认为已全部设置为从Windows性能监视器触发电子邮件警报,则还有一个步骤。每当您重新启动服务器时,Perfmon Counter Alert都不会自动启动。为了在重新启动后继续运行,您必须在命令提示符下运行以下命令。注意下面脚本中引用的“警报”是我的用户定义的数据收集器集的名称。

schtasks / create / tn Alerts / sc onstart / tr“logman start Alerts”/ ru system

有一些边缘情况,您可能需要创建另一个触发器来启动Data Collector集。例如,SIOS DataKeeper Perfmon计数器仅从镜像源收集数据。如果您尝试在目标服务器上启动数据收集集,您将看到它无法启动。但是,如果您的群集进行故障转移,则旧目标现在将成为镜像的源,因此您需要开始监视该新源上的DataKeeper计数器。您可以创建一个群集通用脚本资源,在故障转移时启动数据收集器集,但这是另一个主题。确保计数器在新源上运行的更简单方法是设置由EventID触发的计划任务,该事件ID指示服务器正在成为镜像源。在这种情况下,我在两个系统上设置触发器,以便每次发生EventID 23时,Trigger运行Logman以启动数据收集器集。每次发生故障转移时,新系统成为源时会记录事件ID 23,因此数据收集器集将自动开始。如何从Windows性能监视器触发电子邮件警报如何从Windows性能监视器触发电子邮件警报 就是这样,如果您关心的任何Perfmon计数器开始失控,您现在可以直接从您的服务器接收电子邮件警报。

您是否喜欢阅读如何从Windows性能监视器触发电子邮件警报?请点击这里了解更多。经Clusteringformeremortals.com许可转载

Filed Under: 服务器集群简单化

如何使用Windows Server 2016从Windows事件触发电子邮件警报

11月 9, 2018 by Jason Aw Leave a Comment

使用Windows Server 2016从Windows事件触发电子邮件警报

循序渐进:如何使用Windows Server 2016从包含事件详细信息的Windows事件触发电子邮件警报

介绍

从Windows事件触发电子邮件警报使用Windows Server 2016只需要几个步骤。指定触发该任务时将发生的操作。由于Microsoft已决定弃用“发送电子邮件”选项,因此我们唯一的选择是启动程序。在我们的例子中,该程序将是一个Powershell脚本,用于收集事件日志信息并对其进行解析。这样,我们就可以发送包含重要日志事件详细信息的电子邮件。此工作已在Windows Server 2016上得到验证。但我怀疑它应该适用于Windows Server 2012 R2和Windows Server 2019。如果您在任何其他平台上工作,请发表评论,如果您需要更改任何内容,请告诉我们。

步骤1-编写Powershell脚本

首先要做的是写一个Powershell脚本,运行时可以发送电子邮件。在研究这个问题时,我发现了很多方法来完成这项任务,所以我要向您展示的只是一种方式,但您可以随意尝试并使用适合您环境的方法。在我的实验室中,我没有运行自己的SMTP服务器,因此我必须编写一个可以利用我的Gmail帐户的脚本。您将在我的Powershell脚本中看到,对SMTP服务器进行身份验证的电子邮件帐户的密码是纯文本格式。如果您担心某人可能有权访问您的脚本并发现您的密码,请加密您的凭据。Gmail需要和SSL连接。 您的密码应该是安全的,就像任何其他电子邮件客户端一样。我有一个Powershell脚本的例子。与任务计划程序一起使用时,它将在Windows事件日志中记录任何指定的事件时自动发送电子邮件警报。在我的环境中,我将此脚本保存到C: Alerts DataKeeper.ps1

$ EventId = 16,20,23,150,219,220

$ A = Get-WinEvent -MaxEvents 1 -FilterHashTable @ {Logname =“System”; ID = $ EventId}
$ Message = $ A.Message
$ EventID = $ A.Id
$ MachineName = $ A.MachineName
$ Source = $ A.ProviderName


$ EmailFrom =“sios@medfordband.com”
$ EmailTo =“sios@medfordband.com”
$ Subject =“来自$ MachineName的警报”
$ Body =“EventID:$ EventID`nSource:$ Source`nMachineName:$ MachineName`nMessage:$ Message”
$ SMTPServer =“smtp.gmail.com”
$ SMTPClient = New-Object Net.Mail.SmtpClient($ SmtpServer,587)
$ SMTPClient.EnableSsl = $ true
$ SMTPClient.Credentials = New-Object System.Net.NetworkCredential
(“sios@medfordband.com”,“mySMTPP @ 55w0rd”);
$ SMTPClient.Send($ EmailFrom,$ EmailTo,$ Subject,$ Body)

从Powershell脚本生成的电子邮件示例如下所示。使用Windows Server 2016从Windows事件触发电子邮件警报 您可能已经注意到,此Powershell脚本使用Get-WinEvent cmdlet根据指定的LogName,Source和eventID获取最新的Event Log条目。然后它解析事件并将EventID,Source,MachineName和Message分配给将用于撰写电子邮件的变量。您将看到指定的LogName,Source和eventID与您在步骤2中设置计划任务时指定的ID相同。

第2步 – 设置计划任务

在任务计划程序中创建一个任务,如以下屏幕截图所示。

  1. 创建任使用Windows Server 2016从Windows事件触发电子邮件警报务确保将任务设置为“运行”,无论用户是否已登录。使用Windows Server 2016从Windows事件触发电子邮件警报
  2.  在“触发器”选项卡上,选择“新建”以创建将启动“在事件上”任务的触发器。在我的示例中,我将创建一个事件,触发任何时候DataKeeper(extmirr)将重要事件记录到系统日志。使用Windows Server 2016从Windows事件触发电子邮件警报 创建一个自定义事件和新事件过滤器,如下所示…对于我的触发器,使用Windows Server 2016从Windows事件触发电子邮件警报我触发通常受监控的SIOS DataKeeper(ExtMirr)EventIDs 16,20,23,150,219,220。您需要设置事件以触发要监视的特定事件。如果要通知来自不同日志或来源的事件,可以将多个触发器放在同一个任务中。
    使用Windows Server 2016从Windows事件触发电子邮件警报
    创建一个新的事件过滤器

     

  3. 配置事件触发器后,您将需要配置事件运行时发生的操作。在我们的例子中,我们将运行我们在步骤1中创建的Powershell脚本。使用Windows Server 2016从Windows事件触发电子邮件警报使用Windows Server 2016从Windows事件触发电子邮件警报
  4. 默认的Condition参数应该足够了。使用Windows Server 2016从Windows事件触发电子邮件警报
  5. 最后,在“设置”选项卡上,确保允许按需运行任务,并在任务已在运行时“排队新实例”。

    使用Windows Server 2016从Windows事件触发电子邮件警报

步骤3(如有必要) – 修复Microsoft Windows DistributedCOM事件ID:10016错误

理论上,如果您正确地执行了所有操作,您应该能够使用Windows Server 2016从Windows事件触发电子邮件警报。但是,我在我的一台服务器上遇到了一个奇怪的权限问题。这是我解决问题的方法。希望它也会对你有所帮助。在我手动触发事件的情况下,或者如果我直接运行Powershell脚本,一切都按预期工作,我会收到一封电子邮件。但是,如果正在监视的某个EventID被记录到事件日志中,则不会导致发送电子邮件。我唯一的线索是事件ID:10016。每次我希望任务触发器检测到记录的事件时,它都记录在我的系统事件日志中。

日志名称:系统
来源:Microsoft-Windows-DistributedCOM
日期:10/27/2018 5:59:47 PM
事件ID:10016
任务类别:无
等级:错误
关键词:经典
用户:DATAKEEPER  dave
电脑:sql1.datakeeper.local
描述:
特定于应用程序的权限设置不授予“本地激活”权限 
对于具有CLSID的COM Server应用程序 
{D63B10C5-BB46-4990-A94F-E40B9D520160}
和APPID 
{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}
给用户DATAKEEPER  dave SID(S-1-5-21-25339xxxxx-208xxx580-6xxx06984-500) 
来自地址LocalHost 
(使用LRPC)在应用程序容器中运行不可用SID(不可用)。
可以使用组件服务管理工具修改此安全权限。

许多针对该错误的Google搜索结果表明该错误是良性的。它包含有关如何抑制错误而不是修复错误的说明。但是,我很确定这个错误是我目前失败的原因。如果我没有正确解决问题,使用Windows Server 2016从Windows事件触发电子邮件警报将很困难。经过多次搜索,我偶然发现了这个新闻组的讨论。  Marc Whittlesey的回应使我指出了正确的方向。这是他写的……

在转到组件服务中的DCOM配置之前,您必须设置2个注册表项:CLSID密钥和APPID密钥。

我建议你按照一些步骤解决问题:

1。 按Windows + R键并键入regedit,然后按Enter键。2。 转到HKEY_Classes_Root CLSID * CLSID *。3。 右键单击它然后选择权限。4。 单击“高级”并将所有者更改为管理员。同时单击将显示在所有者行下方的框。5。 适用完全控制。6。 关闭选项卡,然后转到HKEY_LocalMachine Software Classes AppID * APPID *。7。 右键单击它然后选择权限。8。 单击“高级”并将所有者更改为管理员。9。 单击将显示在所有者行下方的框。10。 单击“应用”并向管理员授予完全控制权。11。 关闭所有选项卡,然后转到管理工具。12。 开放组件服务。13。 单击“计算机”,单击“我的电脑”,然后单击“DCOM”。14。 查找错误查看器上显示的相应服务。15。 右键单击它,然后单击属性。16。 单击安全选项卡,然后单击添加用户,添加系统,然后应用 17。 勾选激活本地框。因此,请在此处使用相关密钥,DCOM配置应该可以访问灰色区域:CLSID {D63B10C5-BB46-4990-A94F-E40B9D520160} APPID {9CA88EE3-ACB7-47C8-AFC4-AB702511C276}

我几乎可以逐字逐句地遵循步骤1-15。然而,当我到达第16步时,我真的无法确切地说出他希望我做什么。起初我将DATAKEEPER dave用户帐户完全控制权授予了RuntimeBroker,但这并没有解决问题。最后我只是在所有三个权限上选择了“使用默认值”并修复了问题。使用Windows Server 2016从Windows事件触发电子邮件警报 我不确定这是怎么发生的。我想我最好把它全部写下去,以防它再次发生,因为我花了一段时间来弄清楚它。

第4步 – 自动部署

如果需要在多个系统上启用相同的警报,请将任务导出到XML文件并将其导入其他系统。使用Windows Server 2016从Windows事件触发电子邮件警报使用Windows Server 2016从Windows事件触发电子邮件警报 或者甚至更好。 在文件共享上提供XML文件后,通过Powershell脚本自动执行导入作为构建过程的一部分,如以下示例所示。

PS C:> Register-ScheduledTask -Xml(get-content 
'\ myfileshare  tasks  DataKeeperAlerts.xml'|出弦) 
-TaskName“DataKeeperAlerts” - 用户数据管理员 dave 
-Password MyDomainP @ 55W0rd -Force

使用Windows Server 2016从Windows事件触发电子邮件警报

在我的下一篇文章中,我将向您展示如何在指定的服务启动或停止时收到通知。当然,您只需从Service Control Monitor监视EventID 7036即可。但是,只要任何服务开始或停止,这都会通知您。我们需要深入挖掘,以确保只有在我们关心的服务开始或停止时才会收到通知。如果您对我们的操作方法文章感兴趣,例如使用Windows Server 2016从Windows事件触发电子邮件警报,请单击此处。从Clusteringformeremortals.com转载

Filed Under: 服务器集群简单化

  • « Previous Page
  • 1
  • …
  • 70
  • 71
  • 72
  • 73
  • 74
  • …
  • 100
  • Next Page »

最近的帖子

  • 在 Nutanix 环境中选择高可用性解决方案的 10 个注意事项
  • 我的服务器是一次性的吗?高可用性软件如何融入云最佳实践
  • 灾难频发世界的数据恢复策略
  • DataKeeper 和棒球:灾难恢复的战略举措
  • SQL Server 停机风险预算

最热门的帖子

加入我们的邮件列表

Copyright © 2025 · Enterprise Pro Theme on Genesis Framework · WordPress · Log in