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

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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 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 Web.config o App.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(); } }