Rastreo de consultas SQL con el SDK de X-Ray para .NET - AWS X-Ray

Rastreo de consultas SQL con el SDK de X-Ray para .NET

nota

Aviso de fin de soporte: el 25 de febrero de 2027, AWS X-Ray dejará de ofrecer soporte para los AWS X-Ray SDK y daemon. Después del 25 de febrero de 2027, ya no recibirá actualizaciones ni versiones. Para obtener más información sobre la cronología del soporte, consulte Cronología del fin del soporte de X-Ray SDK y daemon. Recomendamos migrar a OpenTelemetry. Para obtener más información sobre la migración a OpenTelemetry, consulte Migración de la instrumentación de X-Ray a la instrumentación de OpenTelemetry.

El SDK de X-Ray para .NET proporciona una clase de encapsulamiento System.Data.SqlClient.SqlCommand denominada TraceableSqlCommand que puede utilizar en lugar de SqlCommand. Puede inicializar un comando SQL con la clase TraceableSqlCommand.

Seguimiento de consultas SQL con métodos síncronos y asíncronos

Los siguientes ejemplos muestran cómo utilizar TraceableSqlCommand para rastrear automáticamente las consultas de SQL Server de forma síncrona y asíncrona.

ejemplo Controller.cs: instrumentación de cliente de SQL (síncrono)
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(); } }

Puede ejecutar la consulta de forma asíncrona utilizando el método ExecuteReaderAsync.

ejemplo Controller.cs: instrumentación de clientes de SQL (asíncronos)
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(); } }

Recopilación de consultas SQL realizadas a SQL Server

Puede habilitar la captura de SqlCommand.CommandText como parte del subsegmento creado por la consulta SQL. SqlCommand.CommandText aparece como el campo sanitized_query en el JSON del subsegmento. De forma predeterminada, esta característica está deshabilitada por motivos de seguridad.

nota

No habilite la característica de recopilación si está incluyendo información confidencial como texto sin cifrar en sus consultas SQL.

Puede habilitar la recopilación de consultas SQL de dos formas:

  • Establezca la propiedad CollectSqlQueries en true en la configuración global de su aplicación.

  • Establezca el parámetro collectSqlQueries de la instancia TraceableSqlCommand en true para recopilar llamadas dentro de la instancia.

Habilitar la propiedad CollectSqlQueries global

Los siguientes ejemplos muestran cómo habilitar la propiedad CollectSqlQueries para .NET y .NET Core.

.NET

Para establecer la propiedad CollectSqlQueries en true en la configuración global de su aplicación en .NET, modifique el appsettings de su archivo App.config o Web.config, tal y como se muestra.

ejemplo App.config o bien Web.config: habilitación global de la recopilación de consultas SQL
<configuration> <appSettings> <add key="CollectSqlQueries" value="true"> </appSettings> </configuration>
.NET Core

Para establecer la propiedad CollectSqlQueries en true en la configuración global de su aplicación en .NET Core, modifique el archivo appsettings.json en la clave de X-Ray, tal y como se muestra.

ejemplo appsettings.json: habilitación global de la recopilación de consultas SQL
{ "XRay": { "CollectSqlQueries":"true" } }

Habilitación del parámetro collectSqlQueries

Puede establecer el parámetro collectSqlQueries en la instancia TraceableSqlCommand en true para recopilar el texto de consulta SQL para las consultas de SQL Server realizadas con esa instancia. Si se establece el parámetro en false se deshabilita la característica CollectSqlQuery para la instancia TraceableSqlCommand.

nota

El valor de collectSqlQueries en la instancia TraceableSqlCommand anula el valor establecido en la configuración global de la propiedad CollectSqlQueries.

ejemplo Ejemplo Controller.cs: habilitación de la recopilación de consultas SQL para la instancia
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(); } }