教程:使用 SQL Server 为 .NET 应用程序设置监控 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

教程:使用 SQL Server 为 .NET 应用程序设置监控

本教程演示如何配置 CloudWatch Application Insights 以监控示例解决方案,然后模拟问题场景以测试解决方案。在此示例中,部署了在后端使用 SQL Server 的负载均衡 Web 应用程序。Web 应用程序和 SQL Server 托管在单独的 EC2 实例上。

使用案例场景

在这种场景下,在后端使用 SQL Server 的 .NET 应用程序在 Amazon EC2 实例上运行。部署配置了两个负载均衡的 EC2 实例,托管 Barley Adventure Works 应用程序。这两个实例都访问托管在单独的 EC2 实例上的 SQL Server。监控通过 CloudWatch Application Insights 设置,可快速识别、隔离和解决应用程序问题。


                    解决方案组件图

Prerequisites

要完成本教程中的步骤,您必须使用 Amazon 账户。

如果您还没有 Amazon Web Services 账户,请完成以下步骤创建一个。

注册 Amazon Web Services 账户

  1. 打开 https://portal.aws.amazon.com/billing/signup

  2. 按照屏幕上的说明进行操作。

    在注册时,您将接到一通电话,要求您使用电话键盘输入一个验证码。

为示例场景部署资源

提供了一个 CloudFormation 模板,用于自动执行测试的部署场景。该模板部署以下实例:

  • 托管 Microsoft SQL Server 数据库的 EC2 实例。

  • 两个负载均衡的 EC2 实例。每个负载均衡实例托管 Barley Adventure Works Web 应用程序。

模板部署大约需要 10 分钟完成。

部署 CloudFormation 堆栈的步骤

  1. 访问 https://console.aws.amazon.com/cloudformation,在 Amazon CloudFormation 登录页面上依次选择 Create Stack(创建堆栈)、With new resources (standard)(使用新资源(标准)),在位于美国东部(弗吉尼亚北部)的账户中启动 CloudFormation 堆栈。此模板仅在 us-east-1 区域中可用。

  2. 选择 Create Stack(创建堆栈)页面上的 Template is ready(模板准备就绪)

  3. Specify template(指定模板)下,选择 Amazon S3 URL 并输入以下 S3 URL 路径: https://application-insights-demo-resources.s3.amazonaws.com.cn/SampleApp.yml。选择 Next (下一步)

    注意

    此 CloudFormation 模板也可以在 aws-samples GitHub 存储库中找到,位置如下:https://github.com/aws-samples/application-insights-sample-application/blob/master/SampleApp.yml

  4. Specify Stack details(指定堆栈详细信息)页面上,输入堆栈名称,如 ApplicationInsightsTest

  5. 审核 Parameters(参数)下的默认参数并根据自己的偏好修改值。输入 SQLServer 的密码。输入现有 EC2 密钥对 或在 EC2 控制台中创建新的 EC2 密钥对。选择 Next (下一步)

  6. Configure stack options(配置堆栈选项)页面的 Tags(标签)下,您可以选择添加标签以帮助您标识堆栈。选择 Next (下一步)

  7. Review(审核)页面上审核并确认设置。选中确认模板将创建 Amazon Identity and Access Management (IAM) 资源的复选框。

  8. 选择 Create stack(创建堆栈)以部署堆栈。

  9. 在 Cloud Formation 堆栈页面的 Events(事件)选项卡中监控堆栈部署的状态。当堆栈成功部署后,请继续到下一部分。

使用 Amazon CloudWatch Application Insights 设置监控

本部分演示如何从 CloudFormation 模板部署的资源中创建资源组,以及如何将资源组添加到 CloudWatch Application Insights 以进行监控。

创建资源组

  1. 导航到 Amazon Resource Groups 控制台,然后选择 Create resource group(创建资源组)

  2. Create query-based group(创建基于查询的组)页面的 Group type(组类型)下,选择 CloudFormation stack based(基于 CloudFormation 堆栈)

  3. Group criteria(分组标准)下,从下拉列表中选择您在上一部分中创建的 CloudFormation 堆栈 (ApplicationInsightsTest)。保留资源类型为 All supported resource types(所有支持的资源类型)

  4. Group details(组详细信息)下,输入 Group name(组名称)(如 application-insights-resource-group)以及资源组的描述(可选)。然后选择 Create group(创建组)

在 CloudWatch Application Insights 上设置资源组监控

  1. 导航到 Amazon CloudWatch 控制台,然后选择左侧导航窗格中 Insights 下的 Application Insights

  2. 选择 View application(查看应用程序)旁边的 Application Insights

  3. Applications monitored(已监控应用程序)页面上,选择 Add an application(添加应用程序)

  4. Resource Group select(资源组选择)下,选择在上一过程中创建的资源组 (application-insights-resource-group),然后选择 Add application(添加应用程序)

  5. Overview(概览)页面上,刷新浏览器以显示资源组中的应用程序组件。

  6. 选择 Application Load Balancer group(Application Load Balancer 组),然后选择 Manage monitoring(管理监控)

  7. Manage monitoring(管理监控)页面上,选择 Enable monitoring(启用监控)

  8. 选择保存

  9. 若要启用对 SQL Server 实例的监控,请在 Application components(应用程序组件)部分选择 SQL Server EC2 实例,然后重复上述步骤,从 Manage monitoring(管理监控)页面启用监控。

    为 SQL Server 实例监控以下指标:

    • CPU 利用率

    • StatusCheckFailed

    • Memory % Committed Bytes in Use

    • Memory Available Mbytes

    • Network Interface Bytes Total/sec

    • Paging File % Usage

    • Physical Disk % Disk Time

    • Processor % Processor Time

    • SQLServer:Buffer Manager cache hit ratio

    • SQLServer:Buffer Manager life expectancy

    • SQLServer:General Statistics Processes blocked

    • SQLServer:General Statistics User Connections

    • SQLServer:Locks Number of Deadlocks/sec

    • SQLServer:SQL Statistics Batch Requests/sec

    • System Processor Queue Length

    为附加到 SQL Server 实例的卷监控以下指标:

    • VolumeReadBytes

    • VolumeWriteBytes

    • VolumeReadOps

    • VolumeWriteOps

    • VolumeTotalReadTime

    • VolumeTotalWriteTime

    • VolumeIdleTime

    • VolumeQueueLength

    • VolumeThroughputPercentage

    • VolumeConsumedReadWriteOps

    • BurstBalance

  10. 当同时为负载均衡器和 SQL Server 实例启用监控时,它们所属的资源组将在资源组 Overview(概览)页面上显示 Enabled(已启用)状态。

模拟问题场景并查看洞察

本节说明如何创建 SQL 登录失败、SQL 内存压力事件和 HTTP 500 错误,以便您可以在 CloudWatch Application Insights 控制面板上查看错误详细信息。

模拟 SQL 登录失败

要模拟 SQL 登录失败并从 CloudWatch 控制面板查看问题,请执行以下步骤。

  1. 使用您在创建 CloudFormation 堆栈时选择的密钥对登录到为 SQL Server 实例(M4 实例类型)配置的 EC2 实例。

  2. Start(启动)菜单中,启动 SQL Management Studio。

  3. 输入用户名和不正确的密码,然后选择 Connect(连接)。此时将显示一条消息,指示登录失败。再重复几次此步骤。

  4. 在 CloudWatch Application Insights Problems detected(检测到的问题)页面(CloudWatch 控制台登陆页面的底部)中,该错误应显示在问题摘要下方,显示为 SQL: Login Failure(SQL:登录失败)。要查看有关问题的更多详细信息,请选择问题链接。

模拟高内存压力

要模拟可能导致 Web 服务器和负载均衡器上的应用程序性能下降和超时错误的高内存压力事件,请执行以下步骤。

  1. 从 SQL 服务器实例启动 SQL Management Studio,并使用 Windows 管理员账户登录。

  2. 右键单击数据库服务器,选择 Properties(属性),然后选择 Memory(内存)

  3. Server memory options(服务器内存选项)下,将 Maximum server memory(最大服务器内存)减小到 256KB。

  4. 在新的查询窗口中,运行以下 SQL 查询:

    SELECT COUNT(*) FROM [AdventureWorks2016].[Sales].[Customer]

    此时将显示一条消息,指示没有足够的内存来运行该查询。

  5. 在 CloudWatch Application Insights Problems detected(检测到的问题)页面(CloudWatch 控制台登陆页面的底部)中,该错误应显示在问题摘要下方,显示为 SQL: Memory Pressure(SQL:内存压力)。要查看有关问题的更多详细信息,请选择问题链接。

模拟 HTTP 500 错误

针对 Web 应用程序未处理 HTTP 请求发起的 HTTP 请求会导致 HTTP 500 错误。要模拟 HTTP 500 错误,请执行以下步骤。

  1. 在 Amazon Web Services Management Console 中,导航到 Amazon CloudFormation 控制台。

  2. 选择您之前启动的 AppInsightsTest CloudFormation 堆栈的 Output(输出)选项卡。

  3. 在 Web 浏览器中打开显示在 Value(值)下的 URL,以打开 AdventureWorks 应用程序。

  4. 使用 barleyapp/SalesOrderDetails/edit/5 在前面提到的 URL 后添加后缀,导航到 Barley Adventure Works Web 应用程序的客户详细信息页面。

  5. 多次刷新编译的 URL 请求。您的 URL 应该如下所示: http://<YourURL>.us-east-1.elb.amazonaws.com.cn/barleyapp/SalesOrderDetails/edit/5

    将显示一条错误消息,指示找不到该文件或目录。

  6. 在 CloudWatch Application Insights Problems detected(检测到的问题)页面(CloudWatch 控制台登陆页面的底部)中,该错误应显示在问题摘要下方,显示为 ALBP: Backend 5XX errors(ALB:后端 5XX 错误)。要查看有关问题的更多详细信息,请选择问题链接。