Rastreo de consultas SQL con el SDK de X-Ray para .NET
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
entrue
en la configuración global de su aplicación. -
Establezca el parámetro
collectSqlQueries
de la instanciaTraceableSqlCommand
entrue
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.
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();
}
}