Tracciamento delle query SQL con l'SDK X-Ray per .NET - AWS X-Ray

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tracciamento delle query SQL con l'SDK X-Ray per .NET

X-Ray SDK for .NET fornisce una classe wrapper perSystem.Data.SqlClient.SqlCommand, denominatoTraceableSqlCommand, che puoi utilizzare al posto diSqlCommand. Puoi inizializzare un comando SQL con la classe TraceableSqlCommand.

Tracciamento di query SQL con metodi sincroni e asincroni

I seguenti esempi mostrano come utilizzare TraceableSqlCommand per tracciare automaticamente query SQL Server in modo sincrono e asincrono.

Esempio Controller.cs - Analisi client SQL (sincrono)
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(); } }

Puoi eseguire la query in modo asincrono utilizzando il metodo ExecuteReaderAsync.

Esempio Controller.cs - Analisi client SQL (Asincrono)
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(); } }

Raccolta di query SQL effettuate su SQL Server

Puoi abilitare l'acquisizione di SqlCommand.CommandText come parte del sottosegmento creato dalla query SQL. SqlCommand.CommandText viene visualizzato come il campo sanitized_query nel sottosegmento JSON. Per impostazione predefinita, questa caratteristica è disabilitata per motivi di sicurezza.

Nota

Non abilitare la caratteristica di raccolta se si includono informazioni sensibili come testo in chiaro nelle query SQL.

Puoi abilitare la raccolta di query SQL in due modi:

  • Imposta la proprietà CollectSqlQueries su true nella configurazione globale dell'applicazione.

  • Imposta il parametro collectSqlQueries nell'istanza TraceableSqlCommand su true per raccogliere le chiamate all'interno dell'istanza.

Abilitazione della proprietà CollectSqlQueries globale

I seguenti esempi mostrano come abilitare la proprietà CollectSqlQueries per .NET e .NET Core.

.NET

Per impostare la proprietà CollectSqlQueries su true nella configurazione globale dell'applicazione in .NET, modifica la appsettings del file Web.config o App.config, come mostrato.

Esempio App.configOWeb.config— Abilitazione della raccolta di query SQL a livello globale
<configuration> <appSettings> <add key="CollectSqlQueries" value="true"> </appSettings> </configuration>
.NET Core

Per impostare ilCollectSqlQueriesproprietà atruenella configurazione globale dell'applicazione in .NET Core, modifica laappsettings.jsonfile sotto il tasto X-Ray, come mostrato.

Esempio appsettings.json— Abilitazione della raccolta di query SQL a livello globale
{ "XRay": { "CollectSqlQueries":"true" } }

Abilitazione del parametro collectSqlQueries

Puoi impostare il parametro collectSqlQueries nell'istanza TraceableSqlCommand su per true per raccogliere il testo della query SQL per le query SQL Server eseguite utilizzando tale istanza. L'impostazione del parametro su false disabilita la caratteristica CollectSqlQuery per l'istanza TraceableSqlCommand.

Nota

Il valore di collectSqlQueries nell'istanza TraceableSqlCommand sostituisce il valore impostato nella configurazione globale della proprietà CollectSqlQueries.

EsempioController.cs— Abilitazione della raccolta di query SQL per l'istanza
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(); } }