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
CollectSqlQueriesentrueen la configuración global de su aplicación. -
Establezca el parámetro
collectSqlQueriesde la instanciaTraceableSqlCommandentruepara 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.
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();
}
}