> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Instrumentação SQL

## Configuração

Para instrumentar o uso de SQL, você precisará importar os pacotes oficiais de instrumentação do OpenTelemetry:

<CodeGroup>
  ```go Go theme={null}
  import(
    "github.com/XSAM/otelsql"
    semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
  )
  ```
</CodeGroup>

Sua conexão com o banco de dados precisa ser aberta usando o pacote `otelsql`. Também é importante consultar o banco usando a função `QueryContext` para passar o contexto atual, de forma que os spans sejam corretamente aninhados e estruturados. O exemplo abaixo mostra como instrumentar queries em um banco MySQL no contexto de uma requisição web.

Para mais informações sobre uso e suporte a drivers SQL, dê uma olhada no [repositório do pacote](https://github.com/XSAM/otelsql).

<CodeGroup>
  ```go Go theme={null}
  func mysqlQuery(w http.ResponseWriter, r *http.Request) {
  	ctx := r.Context()

  	db, err := otelsql.Open(
  		"mysql",
  		"root:password@tcp(0.0.0.0:3306)/mydb",
  		otelsql.WithAttributes(semconv.DBSystemMySQL),
  	)
  	if err != nil {
  		panic(err)
  	}
  	defer db.Close()

  	rows, err := db.QueryContext(ctx, "select * from mysql.user")
  	if err != nil {
  		panic(err)
  	}
  	defer rows.Close()
  }
  ```
</CodeGroup>
