使用 X-Ray SDK for .NET 跟踪 SQL 查询 - AWS X-Ray
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 X-Ray SDK for .NET 跟踪 SQL 查询

X-Ray SDK for .NET为 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 显示为子分段 JSON 中的字段 sanitized_query。默认情况下,出于安全考虑,此功能处于禁用状态。

注意

如果要在 SQL 查询中将敏感信息以明文形式包括在内,请勿启用收集功能。

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

  • 在您应用程序的全局配置中,将 CollectSqlQueries 属性设置为 true

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

全局启用 CollectSqlQueries 属性

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

.NET

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

App.configWeb.config – 全局启用 SQL 查询收集

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

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

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

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

启用 collectSqlQueries 参数

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

注意

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(); } }