使用亚马逊 CloudWatch 监控适用于 SQL Server 的亚马逊 RDS 定制版

适用于 SQL Server 的 Amazon RDS 自定义 是一项托管数据库服务,适用于需要自定义底层操作系统和数据库环境的应用程序。Amazon RDS Custom 允许您访问和自定义数据库服务器主机和操作系统,例如,通过应用特殊补丁和更改数据库软件设置以支持需要特权访问的第三方应用程序。它支持依赖于特定配置的应用程序以及需要在企业、电子商务和内容管理系统中进行自定义的第三方应用程序,例如 Microsoft SharePoint。

使用适用于 SQL Server 的 Amazon RDS Custom,您可以启用需要更高权限的功能,例如 SQL 公共语言运行时 (CLR),安装特定的驱动程序以启用异构链接服务器,或者每个实例拥有超过 100 个数据库。

监控是维护 Amazon RDS Custom for SQL Server 的可靠性、可用性和性能的重要组成部分。但是,在撰写本文时,适用于 SQL Server 的亚马逊 RDS Custom 没有托管 亚马逊 CloudWatch 监控功能 。在这篇文章中,我们将讨论如何使用 CloudWatch 控制面板来监控适用于 SQL Server 的 Amazon RDS Custom,以及如何使用 CloudWatch 警报进行主动监控。此外,我们还提供了一些与指标相关的警报示例,并演示了提高监控功能的设置过程。

解决方案概述

下图说明了解决方案架构。

此解决方案使您能够监控 RDS 自定义环境中的以下指标:

  • 主机指标 — 数据 和二进制卷的 CPU 利用率、FreeableMemory 和 FreeStorageSpace
Infrastructure / Host
Console Name Description Units
Free Space [D] Drive The amount of available storage space in the data volume MB
Free Space [C] Drive The amount of available storage space in the binary volume MB
CPU Utilization The percentage of CPU Utilization Percent
Memory Available Mbytes The amount of available random-access memory Mbytes
  • 工作负载指标 — ReadiOps、WriteIOps、读取吞吐量、写入吞吐量和数据库连接
Workload Metrics
Console Name Description Units
Read IOPS The average number of disk read I/O operations per second Count/Second
Write IOPS The average number of disk write I/O operations per second Count/Second
Write Throughput The average number of bytes written to disk per second Kib/s
Read Throughput The average number of bytes read from disk per second Kib/s
User Connections The number of client network connections to the database instance via SQL Server Listener 1433 port Count
Logical Connections The number of logical connections to the system Count
Connection Reset/sec Total number of logins started from the connection pool Count
Buffer Cache Hit Ratio Indicates the percentage of pages found in the buffer cache without having to read from disk. The ratio is the total number of cache hits divided by the total number of cache lookups over the last few thousand-page accesses Percent
  • 性能指标 -平均读取延迟、平均写入延迟和平均队列长度
Performance Metrics
Console Name Description Units
Avg Read Latency The average amount of time taken per disk Read I/O operation Milliseconds
Avg Write Latency The average amount of time taken per disk Write I/O operation Milliseconds
Avg Queue Length The number of outstanding I/O (read/write requests) waiting to access the disk Count

高级实施步骤如下:

  1. 设置 RDS 自定义实例。
  2. 为 RD S 实例角色分配 亚马逊云科技 身份和访问管理 (IAM) 权限。
  3. 连接到 RDS 实例。
  4. 使用自动脚本配置 CloudWatch 资源。
  5. 运行负载测试以填充指标。
  6. 创建用于监控的 CloudWatch 警报。

先决条件

要继续阅读这篇文章,您应该熟悉以下 亚马逊云科技 服务:

  • Amazon CloudWatch
  • 亚马逊云科技 命令行接口 (亚马逊云科技 CLI)
  • 亚马逊弹性计算云 (亚马逊 EC2)
  • 适用于 SQL 服务器的亚马逊 RDS 自定义

设置 RDS 自定义实例

有关创建适用于 SQL Server 的 RDS 自定义实例的说明,请参阅 创建和连接适用于 SQL Server 的 Amazon RDS 自定义数据库实例

为 RDS 实例角色分配 IAM 权限

创建 RDS 实例时,您会附加一个 IAM 角色来决定该实例可以连接的服务。为了让代理成功发布指标,我们需要向附加到 RDS 实例的 IAM 角色提供相应的权限。

为此,请导航到附加到 RDS 实例的 IAM 角色并添加 CloudWatchAgentServerPolicy 策略。有关说明,请参阅 添加和删除 IAM 身份权限

有关 CloudWatch 代理所需的 IAM 权限的更多信息,请参阅 创建用于 CloudWatch 代理的 IAM 角色和用户

连接到 RDS 实例

要使用适用于 SQL Server 的 RDS 自定义实例 RDP,请完成以下步骤:

  1. 在 Amazon EC2 控制台上, 在导航窗格中选择 实例
  2. 选择作为适用于 SQL Server 的 Amazon RDS 自定义的一部分创建的 EC2 实例,然后选择 连接

  1. 在 “会 话管理器 ” 选项卡上,选择 “ 连接 ” 。

A WS Systems Manager 会话管理器 窗口打开。

  1. 输入以下命令将防火墙配置为允许 RDP 连接到 RDS 自定义主机:
Set-NetFirewallRule -DisplayName "Remote Desktop - User Mode (TCP-In)" -Direction Inbound -LocalAddress Any -Profile Any

  1. 返回 Amazon EC2 控制台并选择 RDP 客户端 选项卡输入 RDP 连接详细信息。
  2. 对于 “ 连接类型 ” ,选择 “ 使用 RDP 客户端 连接 ”。
  3. 您可以下载远程桌面文件,也可以使用 EC2 实例的公有或私有 DNS 名称、用户名和密码手动创建 RDP 连接。

对于密码,获取密钥对并使用它来解密密码。

还要确保与 RDS 自定义实例关联的安全组具有允许您的 IP 地址进入 RDP 端口 3389 的入站规则。

  1. 使用微软远程桌面 RDP 到 RDP 自定义主机。

配置 CloudWatch

您可以使用以下 自动化脚本 来配置和启动 CloudWatch 代理,还可以创建 CloudWatch 控制面板。但是在运行脚本之前,你需要完成一些配置先决条件。

安装 亚马逊云科技 CLI,验证 IAM 权限,并将数据加载到 EC2 实例

完成以下必备步骤:

  1. 在 PowerShell 上运行以下命令,在亚马逊 RDS Custom for SQL Server 的基础主机(EC2 实例)上安装 亚马逊云科技 CLI:
"C:\> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi"
  1. 确保连接到 Amazon RDS Custom for SQL Server 的底层主机(EC2 实例)的 IAM 角色具有以下权限:
    • CloudWatch put-das hboard — 自动化脚本需要此权限才能创建控制面板
    • Amazon EC2 描述卷 — 需要此权限才能获取自动化脚本的卷信息以创建对卷的监控。
  2. 通过在 PowerShell 上运行以下命令,验证 IAM 角色是否具有成功运行自动化脚本所需的权限:
- aws ec2 describe-volumes

- Get-EC2InstanceMetadata -Category InstanceId

如果这两个命令都成功运行,我们可以确认所有权限都设置正确。

  1. 从 A WS GitHub 存储库下载 cw-agent.json 文件并将其复制到 RDS 自定义 EC2 实例上的 C:\ 驱动器。
  2. 仪表板配置.json 文件从 亚马逊云科技 GitHub 存储库下载并复制到 RDS 自定义 EC2 实例上的 C:\ 驱动器。
  3. cw_agent_config_Automation.ps1 文件从 亚马逊云科技 GitHub 存储库复制到 RDS 自定义 EC2 实例上的 C:\ 驱动器。

运行脚本

要运行.ps1 脚本,请以管理员身份打开 PowerShell 终端并运行以下命令:

& "C:\CW_agent_config_automation.ps1"

脚本将提示输入 CloudWatch 控制面板名称;提供名称并 按 Enter

自动化会配置 CloudWatch 代理、启动 CloudWatch 代理并创建 RDS 自定义控制面板。您可以使用 CloudWatch 控制台确认仪表板的创建。

请注意,如果修改 EC2 实例类或检测到运行状况不佳的 EC2 主机,Amazon RDS 会替换底层 EC2 实例。此操作会删除 CloudWatch 配置文件(cw-agent.json、dashboardconfig.json、cw_agent_config_Automation.ps1)和已执行的 CloudWatch 配置。

要在 Amazon RDS Custom 中 保存配置文件,请参阅使用自定义引擎版本 (CEV) 在 Amazon RDS Custom for SQL Server 中保留您的操作系统级自定义 。 在将 Amazon RDS Custom 设置为在保留 CloudWatch 配置文件的情况下使用 CEV 后,如果更换主机,用户可以通过运行 PowerShell 脚本 (cw_Agent_config_Automation.ps1) 来重新启动自定义控制面板。

该帖子的 CloudWatch 代理已配置为从 Windows 性能计数器 发送五个指标。您可以 自定义配置文件 以添加更多指标。如果您确实修改了配置文件,则还需要修改仪表板以显示新的指标。

运行负载测试以填充指标

如果您的 RDS Custom for SQL Server 数据库正在运行任何工作负载,则您应该会看到 CloudWatch 指标正在您创建的 CloudWatch 控制面板上填充。

对于没有运行任何工作负载的新 RDS Custom for SQL Server 实例,你可以使用 Microsoft OStress 实用程序在多线程和迭代中运行查询以生成工作负载。oStress 实用程序是适用于 SQL Server 的微软 RML 实用程序的一部分,可以从 SQL Server 的 RML 实用程序 中下载。

要使用 oStress 实用程序执行负载测试,请在命令提示符下运行以下命令:

Ostress -dDatabase_name -U user -P password -Q “your_query” -n5 -r20 -q

使用以下参数:

  • -U — 您的 SQL Server 数据库的主用户;默认为管理员
  • -P — 您的主用户的密码
  • -n — 在压力模式下处理每个输入查询的连接数
  • -r — 每个连接运行其输入文件或查询的迭代次数
  • -q — 安静模式;抑制所有查询输出
  • -d — 数据库名称
  • -Q — 要处理的单批查询

您可以通过增加 oStress 参数 -n 和 - r 的值来增加每个连接的连接数 和迭代次数, 从而生成高负载。

为了便于将所有实例级别、容量级别和 SQL 指标汇总到一个地方,我们创建了一个 CloudWatch 控制面板,使您能够从单一管理平台监控 RDS 自定义数据库。以下屏幕截图显示了我们的仪表板示例。

创建云监视警报

您可以创建用于监视单个 CloudWatch 指标的 CloudWatch 警报。警报根据指标值或表达式在多个时间段内相对于阈值执行一项或多项操作。在本节中,我们创建了一个警报,向 亚马逊简单通知服务 (Amazon SNS) 主题发送通知,允许您执行纠正措施。

  1. 创建 SNS 主题:
aws sns create-topic --name <Name of the SNS topic>
  1. 订阅主题并指定通知端点的电子邮件协议和电子邮件地址:
aws sns subscribe --topic-arn < ARN of the SNS topic created > --protocol email --notification-endpoint <Email ID>

这些指标将发送到三个命名空间:亚马逊云科技/EC2、亚马逊云科技/EBS 和 RdsCustom。

  1. 您可以使用以下查询来识别各个命名空间中的可用指标:
aws cloudwatch list-metrics --namespace "RDSCustom"
  1. 选择任意指标并使用以下代码创建 CloudWatch 警报。注意命名空间、维度和指标名称。

以下是根据 CPU 利用率指标创建的 CloudWatch 警报的示例:

aws cloudwatch put-metric-alarm --alarm-name cpu_monitor --alarm-description "Test Alarm when CPU exceeds 60 percent" --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 70 --comparison-operator GreaterThanThreshold --dimensions "Name=InstanceId,Value=i-0b41b57c3a8015ed9" --evaluation-periods 2 --alarm-actions arn:aws:sns:us-west-2:223611864468:test --unit Percent

请注意,EC2 实例 ID 用于创建前面的警报。如果 EC2 实例被替换(例如,在扩展实例类时),它将更改 EC2 实例 ID。您需要使用新的 EC2 实例 ID 重新创建警报。

以下屏幕截图显示了通过 Amazon SNS 发送的示例电子邮件。

清理

为避免产生意外费用,请删除不再需要的 亚马逊云科技 资源。

结论

在这篇文章中,我们讨论了如何将 CloudWatch 与 RDS Custom for SQL Server 环境集成。这使您可以监控 RDS 自定义数据库实例的运行状况并观察基础设施和数据库工作负载的变化。您可以监控特定时间段内的指标,并设置 CloudWatch 警报以接收通知。您可以根据指标值相对于您设置的阈值执行一项或多项操作。

我们欢迎您的反馈。如果您有任何问题或建议,请将其留在评论部分。


作者简介


Arnab Saha
是亚马逊网络服务的高级数据库专家解决方案架构师。Arnab 专门研究亚马逊 RDS、Amazon Aurora、亚马逊云科技 DMS 和亚马逊 Elastic Block Store。他为客户提供指导和技术援助,从而使他们能够在 亚马逊云科技 Cloud 中构建可扩展、高度可用和安全的解决方案。

Nanda Chinnappa 是亚马逊网络服务部的 亚马逊云科技 专业服务云基础设施架构师。Nanda专门研究基础设施自动化、云迁移、灾难恢复和数据库,其中包括Amazon RDS和Amazon Aurora。他通过执行云计算计划帮助亚马逊云科技客户采用亚马逊云科技云并实现其业务成果。

Sid Joshi 是亚马逊网络服务的解决方案架构师。他与 亚马逊云科技 客户合作,提供有关云采用、迁移和策略的指导。他对技术充满热情,喜欢在网络和可观测性领域进行构建和试验。


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