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

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

使用适用于 .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 显示为子分段 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,请在 X-Ray 键下修改您的 appsettings.json 文件,如图所示。

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