Rastrear consultas SQL com o X-Ray SDK para .NET - AWS X-Ray

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Rastrear consultas SQL com o X-Ray SDK para .NET

O SDK fornece uma classe wrapper para System.Data.SqlClient.SqlCommand, denominada TraceableSqlCommand, que você pode usar em vez de SqlCommand. É possível inicializar um comando SQL com a classe TraceableSqlCommand.

Rastrear consultas SQL com métodos síncronos e assíncronos

Os exemplos a seguir mostram como usar o TraceableSqlCommand para rastrear automaticamente consultas do SQL Server de forma síncrona e assíncrona.

exemplo Controller.cs – Instrumentação de cliente 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(); } }

É possível executar a consulta de forma assíncrona usando o método ExecuteReaderAsync.

exemplo Controller.cs – instrumentação de cliente SQL (assí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)) { await sqlCommand.ExecuteReaderAsync(); } }

Coletar consultas SQL feitas ao SQL Server

É possível habilitar a captura de SqlCommand.CommandText como parte do subsegmento criado pela consulta SQL. O SqlCommand.CommandText aparece como o campo sanitized_query no subsegmento JSON. Por padrão, esse recurso está desabilitado para segurança.

nota

Não habilite o recurso de coleta se você estiver incluindo informações confidenciais como texto simples em suas consultas SQL.

É possível habilitar a coleção de consultas SQL de duas maneiras:

  • Defina a propriedade CollectSqlQueries como true na configuração global do aplicativo.

  • Defina o parâmetro collectSqlQueries na instância TraceableSqlCommand como true para coletar chamadas dentro da instância.

Habilitar a propriedade global CollectSqlQueries

Os exemplos a seguir mostram como habilitar a propriedade CollectSqlQueries para .NET e .NET Core.

.NET

Para definir a propriedade CollectSqlQueries como true na configuração global do seu aplicativo em .NET, modifique o appsettings do arquivo Web.config ou App.config, conforme mostrado.

exemplo App.config ou Web.config: habilitar a coleta de consultas SQL globalmente
<configuration> <appSettings> <add key="CollectSqlQueries" value="true"> </appSettings> </configuration>
.NET Core

Para definir a propriedade CollectSqlQueries como true na configuração global da aplicação no .NET Core, modifique o arquivo appsettings.json na chave do X-Ray, conforme mostrado.

exemplo appsettings.json: habilitar a coleta de consultas SQL globalmente
{ "XRay": { "CollectSqlQueries":"true" } }

Habilitar o parâmetro collectSqlQueries

É possível definir o parâmetro collectSqlQueries na instância TraceableSqlCommand como true para coletar o texto da consulta SQL para consultas do SQL Server feitas usando essa instância. Definir o parâmetro como false desabilita o recurso CollectSqlQuery para a instância TraceableSqlCommand.

nota

O valor de collectSqlQueries na instância TraceableSqlCommand substitui o valor definido na configuração global da propriedade CollectSqlQueries.

exemplo Exemplo de Controller.cs: habilitar a coleta de consultas SQL para a instância
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(); } }