使用适用于 .NET 的 X-Ray 开发工具包跟踪 SQL 查询 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用适用于 .NET 的 X-Ray 开发工具包跟踪 SQL 查询

适用于 .NET 的 X-Ray 开发工具包为System.Data.SqlClient.SqlCommand,名为TraceableSqlCommand,您可以用来代替SqlCommand。您可以使用 TraceableSqlCommand 类初始化 SQL 命令。

使用同步和异步方法跟踪 SQL 查询

以下示例显示如何使用 TraceableSqlCommand 来同步和异步自动跟踪 SQL Server 查询。

Controller.cs - SQL 客户端分析(异步)

using Amazon; using Amazon.Util; using Amazon.XRay.Recorder.Core; using Amazon.XRay.Recorder.Handlers.SqlServer; private void QuerySql(int id) { var connectionString = ConfigurationManager.AppSettings["RDS_CONNECTION_STRING"]; using (var sqlConnection = new SqlConnection(connectionString)) using (var sqlCommand = new TraceableSqlCommand("SELECT " + id, sqlConnection)) { sqlCommand.Connection.Open(); sqlCommand.ExecuteNonQuery(); } }

您可以使用 ExecuteReaderAsync 方法异步执行查询。

Controller.cs-SQL 客户端分析(异步)

using Amazon; using Amazon.Util; using Amazon.XRay.Recorder.Core; using Amazon.XRay.Recorder.Handlers.SqlServer; private void QuerySql(int id) { var connectionString = ConfigurationManager.AppSettings["RDS_CONNECTION_STRING"]; using (var sqlConnection = new SqlConnection(connectionString)) using (var sqlCommand = new TraceableSqlCommand("SELECT " + id, sqlConnection)) { await sqlCommand.ExecuteReaderAsync(); } }

收集对 SQL Server 执行的 SQL 查询

您可以启用SqlCommand.CommandText作为 SQL 查询创建的子段的一部分。SqlCommand.CommandText显示为字段sanitized_query在子段 JSON 中。默认情况下,为了安全性,此功能处于禁用状态。

注意

如果要将敏感信息作为明文包含在 SQL 查询中,请勿启用收集功能。

您可以通过两种方式启用 SQL 查询的集合:

  • 设置CollectSqlQueries属性设置为true在您应用程序的全局配置内。

  • TraceableSqlCommand 实例中的 collectSqlQueries 参数设置为 true 以收集该实例中的调用。

启用全局 CollectSqlQueries 属性

以下示例显示如何为 .NET 和 .NET Core 启用 CollectSqlQueries 属性。

.NET

在 .NET 中您应用程序的全局配置内,要将 CollectSqlQueries 属性设置为 true,请修改您的 App.configWeb.config 文件的 appsettings,如图所示。

App.configOrWeb.config— 全局启用 SQL 查询的收集

<configuration> <appSettings> <add key="CollectSqlQueries" value="true"> </appSettings> </configuration>
.NET Core

要将设置为CollectSqlQueries属性设置为true在 .NET Core 中您应用程序的全局配置内,请修改您的appsettings.json文件,X-Ray 图所示。

appsettings.json— 全局启用 SQL 查询的收集

{ "XRay": { "CollectSqlQueries":"true" } }

启用 “收集 QlQuery” 参数

您可以在 TraceableSqlCommand 实例中将 collectSqlQueries 参数设置为 true,以收集使用该实例进行的 SQL Server 查询的 SQL 查询文本。将参数设置为false将禁用CollectSqlQuery功能TraceableSqlCommand实例。

注意

TraceableSqlCommand 实例中 collectSqlQueries 的值将覆盖 CollectSqlQueries 属性的全局配置中设置的值。

例 示例Controller.cs— 为实例启用 SQL 查询集合

using Amazon; using Amazon.Util; using Amazon.XRay.Recorder.Core; using Amazon.XRay.Recorder.Handlers.SqlServer; private void QuerySql(int id) { var connectionString = ConfigurationManager.AppSettings["RDS_CONNECTION_STRING"]; using (var sqlConnection = new SqlConnection(connectionString)) using (var command = new TraceableSqlCommand("SELECT " + id, sqlConnection, collectSqlQueries: true)) { command.ExecuteNonQuery(); } }