将 Windows 故障转移群集日志导出到 CloudWatch

在这篇深入的博客文章中,我们将逐步介绍如何 使用 Amazon CloudWatch 代理 捕获 Windows 故障转移群集事件查看器日志 以及如何使用 亚马逊简单通知服务 (Amazon SNS) 发送警报。

简介

Windows 事件查看器日志是监控 Windows 系统和对其进行故障排除的关键方面。但是,手动查看这些日志可能很耗时且容易出错。通过使用 Amazon CloudWatch 代理和 Amazon SNS,您可以自动捕获和分析事件查看器日志,并在发生关键系统事件时接收近乎实时的警报。

另请看一 看 Amazon CloudWatch 应用程序洞察 ,它为许多企业工作负载提供集中监控、自动异常检测和切实可行的见解,包括 SQL Server Always On 可用性组 (AOAG) 和故障转移集群实例 (SQL FCI)。

解决方案概述

Figure 1. Solution overview
图 1。解决方案概述

该解决方案包括以下步骤:

  1. 创建 Windows 服务器故障转移群集 (WSFC)。
  2. 使用亚马逊 CloudWatch 代理将事件查看器 WSFC 日志发布到亚马逊 CloudWatch。
  3. 根据 Windows 故障转移事件创建筛选模式和亚马逊 CloudWatch 警报。
  4. 如果发生故障转移/错误事件,请使用 Amazon SNS 发送电子邮件。

先决条件

在开始之前,请完成以下任务:

  • 使用可用的 Windows AMI 启动至少两个 Windows 服务器实例。
  • 这篇博客文章中使用的示例配置包括:

    • Windows Server 2019 — 版本 1809 SQL Server 2022 开发者版 —
    • (RTM) — 16.0.1000.6
    • 亚马逊云科技 Managed 微软 AD PowerShell 5.1.17763.3770 awspowerShell 模
    • 块 —
    4.1.326
  • 在节点之间配置 Windows 服务器故障转移群集(主动/被动)。
  • 安装和配置 亚马逊云科技 命令行接口 (亚马逊云科技 CLI )。
  • 创建具有亚马逊 CloudWatch Logs 和 Amazon S NS 权限的 亚马逊云科技 身份和访问管理 ( IAM) 角色
  • 创建用于警报的 Amazon SNS 主题。

草率排练

步骤 1:在 Windows 实例上安装亚马逊 CloudWatch 代理

第一步是在 Windows 实例上安装亚马逊 CloudWatch 代理。Amazon CloudWatch 代理是一款轻量级数据收集代理,可以从 亚马逊弹性计算云 (Amazon EC2) 实例和本地服务器收集日志、指标和定制数据。

安装亚马逊 CloudWatch 代理 ,请执行以下步骤:

  1. 使用本地管理员权限登录 Windows 实例。
  2. 使用以下 PowerShell 脚本从 亚马逊云科技 网站下载亚马逊 CloudWatch 代理安装程序:in
    voke-WebRequest https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi
    -outfile $env: userProfile\ Desktop\ SSMAgent_latest.msi
  3. 通过运行以下 PowerShell 脚本来安装代理以启动静默安装:
    Start-Process $env: UserProfile\ Desk
    top\ SSMAgent_latest.msi /qr
  4. 在所有 Windows 服务器群集节点上重复步骤 1-3。

步骤 2:在 Windows 实例上配置亚马逊 CloudWatch 代理

安装亚马逊 CloudWatch 代理后,下一步是在 Windows 实例上配置亚马逊 CloudWatch 代理。

要配置亚马逊 CloudWatch 代理,请执行以下步骤:

  1. 使用@@
    1. 本地管理员权限登录 Windows 实例。
    2. 创建 Amazon Cloud Watch 代理配置文件,并在配置 期间指定 系统 、微软-Windows-FailoverClustering/Diagnistics 和 Microsoft-Windows-Failover Clustering/Operation Windows 事件日志名称。
    3. 你的 C:\Program Files\ Amazon\ AmazonCloudWatchAgent\ config.j
      son 
       文件应该是这样的:
      
      
      
      {“日志”:{“logs_collect_levels”:{“event_format”:“文本”,“错误”,“关键”],“事件名称”:“系统”,“log_group_levels””:“系统”,“log_stream_name”:“{instance_id}”,“保留天数”:60},{“事件格式”:“文本”,“事件级别”:[“信息”,“警告”,“错误”,“关键”],“事件名称”:”
    4. 微软-Windows-FailoverClustering/Operational”、“log_group_name”:“微软-Windows-FailoverClustering/Operational”、“log_stream_name”:“{instance_id}”、“retention_in_days”:60}]}}} 使用管理员权限运行以下 PowerShell 脚本,在 Windows 实例上启动 Amazon CloudWatch 代理:设置位置 'C:\Program Files\ 亚马逊\ AmazoncloudWatchAgent' 和 “C:\Program Files\ Amazon\

      AmazoncloudWatchAgent\ amazon-cloudwatch-agent-ctl.ps1"-a fetch-config-m ec2-s-c 文件:config.json 你应该收到与图 2:图 2 中显示的结果相似。
      Output of PowerShell script to start Amazon CloudWatch agent
      用于启动亚马逊 CloudWatch 代理的 PowerShell 脚本的输出。

    5. 运行以下 PowerShell 脚本来检查亚马逊 CloudWatch 代理服务状态。
      & $env: Programfiles\ Amazon\ AmazoncloudwatchAgent\ amazon-cloudwatch-agent-ctl.ps1-m ec2-a 状态你应该收到与图 3:图 3 中显示的结果相似。
      Output of PowerShell script to check the Amazon CloudWatch agent status
      用于检查亚马逊 CloudWatch 代理状态的 PowerShell 脚本的输出。
    6. 在所有群集节点上重复步骤 1-5。

服务启动后,它会将日志传输到亚马逊 CloudWatch Logs。Amazon CloudWatch Logs 可能需要几分钟才能包含初始数据。

要找到新创建的日志组,请导航到集群运行所在区域的 Amazon CloudWatch 控制台 ,如图 4 所示:

Amazon CloudWatch log groups

图 4。亚马逊 CloudWatch 日志组

Microsoft-Windows-FailoverClustering/Operational 日志组包含一个群集节点的每个实例 ID 的组,如图 5 所示:

Log streams for each Amazon EC2 instance id

图 5。每个亚马逊 EC2 实例 ID 的日志流。

第 3 步:创建筛选模式和亚马逊 CloudWatch 警报

您可以为要监控的特定错误创建过滤器。让我们创建一个过滤器来捕获故障转移事件。故障转移事件将在事件查看器中记录以下事件(FailoverClustering/Operational):

Log Name: Microsoft-Windows-FailoverClustering/Operational Event ID: 1641 Level: Information Description: Clustered role '<role name>' is moving from cluster node '<PreviousNodeName>' to cluster node '<DestinationNodeName>'.

现在,对群集资源执行故障转移测试。来自事件查看器的错误应该出在 Microsoft-Windows-FailoverCluster ing/Operation 日志组中,如图 6 所示:

Performing a failover on Windows Failover Cluster resource

图 6。对 Windows 故障转移群集资源执行故障转移。

故障转移事件记录在 应用程序和 服务日志/Microsoft/Windows/FailoverClustering/ 操作系统和操作系统下,如图 7 所示:

Event Viewer showing the log for failover operation

图 7。显示故障转移操作日志的事件查看器。

  1. 在 Amazon Cloud Watch 控制台的日志下,选择 日志组/Microsoft-Windows-FailoverClustering/Operational,选择搜索日志组,如图 8 所 示:
    Selecting logs group to create an Amazon CloudWatch filter
    图 8。选择日志组来创建 Amazon CloudWatch 过滤器。
  2. 搜索 “[1641]” ,即故障转移后在事件查看器中列出的 EventID。控制台列出了匹配的故障转移事件。要创建过滤器,请选择 创建指标筛选器 ,如图 9:
    Creating a metric filter for the failover event ID
    图 9 所示。为故障转移事件 ID 创建指标筛选器。
  3. 在 “ 创建指标筛选器 ” 下 ,执行以下操作: 在 “
    1. 筛选器名称 ” 中 ,输入 故障转移。
    2. 对于 指标命名空间 ,关闭 新 建 并选择 CWAgent。
    3. 指标名称 中,输入 故障转移。
    4. 对于 指标值 ,输入 1。
    5. 对于 单位 ,选择 计数。
    6. 选择 “ 创建 ” 。
      图 10 显示了您的筛选器详细信息:
      Metric filter details
      图 10。指标筛选器详情。
  4. 返回 CloudWatch/Log Groups/Microsoft-Windows-FailoverClustering/ O 您刚刚创建的过滤器将列在 “ 指标过滤器 ” 下 。
  5. 创建故障转移过滤器后,我们现在可以创建警报。选择 故障转移 过滤器并选择 创建警报 ,如图 11:
    Creating an Amazon CloudWatch alarm
    图 11 所示。创建亚马逊 CloudWatch 警报。
  6. 在 “ 指定指标和条件 ” 页中,执行以下操作:在
    1. 指标名称 中 ,输入 故障转移
    2. 对于 统计数据 ,选择 最小值
    3. 对于时 ,选择警报的时间,例如 1 分钟 ,如图 12:
      Specifying metrics for the alarm
      图 12 所示。为警报指定指标。
    4. 条件 部分中,对于 阈值类型 ,选择 静态
    5. 对于 “ 无论何时进行故障转移 ” ,选择 更高 > 阈值
    6. 于 Th an,输入 0
    7. 选择 “ 下一步 ” ,如图 13:
      Specifying conditions for the alarm
      图 13 所示。为警报指定条件。
    8. 通知 部分中,对于 警报状态触发器 ,选择 进入警报
    9. 要向 以下 SNS 主题 发送通知
      1. 请 选择:选择现有的 Amazon SNS 主题, 然后选择一个主题;
      2. 或者选择 “ 创建新主题 ”,使用您想要接收提醒的电子邮件地址创建 Amazon SNS 主题,如图 14 所示。
        Selecting the notification method for the alarm
        选择警报的通知方法。
    10. 选择 “ 下一步 ” 。
  7. 名称和描述 部分中,输入警报 的 名称 描述
  8. 选择 “ 下一步 ” ,如图 15:
    Specifying the alarm name and description
    图 15 所示。指定警报名称和描述。
  9. 在 “ 预览并创建 ” 部分中,查看您的警报配置,然后选择 创建警报

完成上述步骤后,您可以测试警报工作流程以确保其按预期运行。要测试工作流程,请在集群上执行故障转移并检查您的电子邮件收件箱。您将收到一封电子邮件,如图 16 中的示例:
Notification email after a failover on WSFC role

图 16。在 WSFC 角色上进行故障转移后的通知电子邮件。

监控其他故障转移群集事件

现在您知道如何创建过滤器和警报,您可以根据需要创建任意数量的过滤器。以下是 Windows 故障转移群集环境中需要监控的建议事件列表:

Event Viewer EventID Level Message
System 1205 ERROR The Cluster service failed to bring clustered role ‘<Role name>’ completely online or offline
System 1069 ERROR Cluster resource ‘<Resource name>’ of type ‘<Resource type>’ in clustered role ‘<Role name>’ failed
System 1254 ERROR Clustered role ‘<Role name>’ has exceeded its failover threshold.
System 1641 ERROR Clustered role ‘<Role name>’ is moving from cluster node ‘<Node name> ‘ to cluster node ‘<Node name> ‘.
System 7034 ERROR The SQL Server (MSSQLSERVER) service terminated unexpectedly.
System 1045 WARNING No matching network interface found for resource ‘<resource name>’ IP address ‘<IP address>’
Microsoft-Windows-FailoverClustering/Operational 1204 INFORMATION The Cluster service successfully brought the clustered role ‘<Role name’ offline.
Microsoft-Windows-FailoverClustering/Operational 1637 INFORMATION Cluster resource ‘<Resource name>’ in clustered role ‘<Role name>’ has transitioned from state online to state ProcessingFailure.
Microsoft-Windows-FailoverClustering/Operational 1674 INFORMATION Group ‘<Group name>’ has transitioned from state ‘<Current state>’ to state ‘<New state>’.

清理

要清除亚马逊 CloudWatch 警报并阻止事件查看器流式传输到亚马逊 CloudWatch,请按照以下步骤操作:

  1. 停止直播事件查看器(在所有集群节点上重复此过程):
    & $env: ProgramFiles\ Amazon\ AmazonCloudwatchAgent\ amazon-cloud watch-agent-ctl.ps1-m ec2-a 停止
  2. 卸载亚马逊 CloudWatch 代理(在所有集群节点上重复此过程):
    $app = get-WmiObject-Class Win32_Product-Filter “名称 = 'Amazon CloudWatch Agent '” $App.Unin stall ()
  3. 移除故障转移指标筛选器。你可以使用 亚马逊云科技 管理控制台或以下 PowerShell 脚本移除 Amaon CloudWatch 指标筛选条件:
    get-cwlmetricFilter-filternamePrefix “故障转移” | Remove-cwlmet ricFilter
  4. 移除日志组流。你可以使用 亚马逊云科技 管理控制台或以下 PowerShell 脚本删除亚马逊 CloudWatch 日志组流
    :get-cwllogGroup |?{$_.loggroupName-eq “系统”-或 $_.loggroupName-eq “微软-Windows-FailoverClustering/Operational”} | foreach-Object {$logroupName $logroupName $_logstreamName $_.logstre amName $_. logstreamName}}
  5. 如果需要,您也可以删除 Amazon CloudWatch 日志组(确保除了本博客中使用的日志以外没有其他日志)。你可以使用 亚马逊云科技 管理控制台或以下 PowerShell 脚本删除亚马逊 CloudWatch 日志组
    :get-cwllogGroup |?{$_.loggroupName-eq “系统”-或 $_.loggroupName-eq “微软-Windows-Failoverclustering/Operational”} | Remove- cwllogGroup

结论

在这篇博客文章中,我们提供了有关如何使用亚马逊 CloudWatch 代理捕获 Windows 事件查看器日志、如何基于 EventID 创建指标以及使用 Amazon SNS 发送警报的分步说明。通过自动化、捕获和分析日志,以及在发生关键系统事件时接收近乎实时的警报,您可以节省时间并降低人为错误的风险。


与任何其他云提供商相比,亚马逊云科技 提供的服务和这些服务中的功能要多得多,这使得将现有应用程序迁移到云端并构建几乎可以想象的任何东西变得更快、更容易、更具成本效益。为你的 Microsoft 应用程序提供所需的基础架构,以推动你想要的业务成果。访问我们的. NET 上的 亚马逊云科技 亚马逊云科技 数据库 博客,为你的 Microsoft 工作负载提供更多指导和选项。 联系我们 ,立即开始您的迁移和现代化之旅。

Marcelo Fernandes

马塞洛·费尔南德斯

马塞洛·费尔南德斯是 亚马逊云科技 专业服务团队的首席数据库架构师,在数据库领域拥有超过 21 年的经验。在他的整个职业生涯中,Marcelo 一直致力于帮助客户应对与数据库相关的挑战,包括迁移、设计和性能优化。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。