使用適用於 .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

若要設置CollectSqlQueries屬性設置為true在 .NET Core 中您應用程式全域組態,請修改您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(); } }