El rastreador de Go requiere Go v1.18 o superiores y el Datadog Agent v5.21.1 o anteriores. Para ver la lista completa de versiones de Go y de compatibilidad de marcos de Datadog (incluidas las versiones heredadas y de mantenimiento), consulta la página de requisitos de compatibilidad.
Hay dos maneras de instrumentar tu aplicación de Go:
Instrumentación del tiempo de compilación:
Asegura la máxima cobertura de tu instrumentación de rastreo.
No requiere modificaciones del código fuente, por lo que es ideal para la integración a nivel de CI/CD.
Instrumentación manual:
Utiliza dd-trace-go junto con nuestros paquetes de integración para generar automáticamente tramos (spans) sobre bibliotecas de tu elección. Esta opción:
Te ofrece un control total sobre qué partes de tu aplicación se rastrean.
Requiere modificar el código fuente de la aplicación.
Consulta a continuación las instrucciones de la sección correspondiente a tu preferencia:
Orchestrion añade automáticamente Instrumentación a las aplicaciones Go durante la compilación, eliminando la necesidad de realizar cambios en el código. Proporciona una amplia cobertura de rastreo y habilita funciones de seguridad exclusivas:
Amplia cobertura de rastreo:
Instrumenta tu código y todas las dependencias, incluida la biblioteca estándar de Go
Instrumenta el código durante la compilación, lo que evita lagunas en la cobertura de rastreo debidas a errores manuales pasados por alto en la instrumentación manual.
Función Exploit Prevention (Prevención de exploits) exclusiva de Application Security Management. La Prevención de exploits es una implementación de Runtime Application Self-Protection (RASP) e incluye métodos RASP como la inclusión de archivos locales (LFI).
# Make sure to include the quotes as shown below, as these are required for# the Go toolchain to parse GOFLAGS properly!exportGOFLAGS="${GOFLAGS} '-toolexec=orchestrion toolexec'"go build .
go run .
go test ./...
Las aplicaciones instrumentadas por orchestrion admiten el etiquetado unificado de servicios (UST). Puedes configurar etiquetas (tags) del UST para tus trazas (traces) al configurar la variable de entorno correspondiente en el entorno de tiempo de ejecución de tu aplicación:
El nombre de la operación (span.name) se determina automáticamente utilizando la siguiente precedencia:
Una etiqueta span.name:customOperationName explícita especificada como argumento directivo
El nombre declarado de la función (esto no se aplica a las expresiones literales de función, que son anónimas)
El valor de la primer etiqueta proporcionada a la lista de argumentos directivos
example.go
//dd:span tag-name:spanName other-tag:bar span.name:operationName
functracedFunction(){// Esta función se representará como un tramo denominado "operationName"
}//dd:span tag-name:spanName other-tag:bar
funcotherTracedFunction(){// Esta función se representará como un tramo denominado "otherTracedFunction"
}//dd:span tag-name:spanName other-tag:bar
tracedFunction:=func(){// Esta función se representará como un tramo denominado "spanName"
}
Si la función anotada devuelve un resultado error, cualquier error devuelto por la función se adjuntará automáticamente al tramo de traza correspondiente:
example.go
//dd:span
funcfailableFunction()(any,error){// Este tramo tendrá información del error adjunta automáticamente.
returnnil,errors.ErrUnsupported}
Puedes utilizar la directiva //orchestrion:ignore para evitar que orchestrion realice cualquier modificación en el código anotado.
Esto se puede utilizar para evitar que se aplique la instrumentación del lado de quien llama a localizaciones específicas:
example.go
import"database/sql"// La instrumentación del lado de quien llama normalmente ocurre dentro de esta función...
funcnormal(){// La siguiente asignación NO será modificada para añadir ninguna instrumentación del lado de quien llama
// ya que está excluida por la directiva orchestrion:ignore:
//orchestrion:ignore
db,err:=sql.Open("driver-name","database=example")// ...
}// La instrumentación del lado de quien llama NO ocurrirá en la siguiente función
// ya que está anotada con orchestrion:ignore.
//orchestrion:ignore
funcexcluded(){// La siguiente asignación NO se modificará para añadir ninguna instrumentación
// del lado de quien llama, ya que el contexto circundante está excluido por una directiva
// orchestrion:ignore:
db,err:=sql.Open("driver-name","database=example")// ...
}
Parte de la instrumentación realizada por orchestrion se lleva a cabo del lado del receptor de la llamada (o del lado de biblioteca), lo que significa que la integración se añade directamente dentro de la propia dependencia. En estos casos, no es posible excluir localmente este tipo de integraciones.
Puedes utilizar la biblioteca de rastreo en tu aplicación creada con Orchestrion. Esto es útil para instrumentar marcos aún no compatibles por Orchestrion. Sin embargo, ten en cuenta que esto puede resultar en tramos de traza duplicados en el futuro a medida que se amplíe la compatibilidad de Orchestrion. Revisa las notas de la versión cuando actualices tu dependencia de orchestrion para mantenerte informado sobre las nuevas características y ajusta tu instrumentación manual según sea necesario.
Tu aplicación creada con Orchestrion incluye la instrumentación del perfilador continuo.
Para activar el perfilador, establece la variable de entorno DD_PROFILING_ENABLED=true en el tiempo de ejecución.
Activa las integraciones de Go para generar tramos. Datadog tiene una serie de paquetes conectables que proporcionan soporte “predefinido” para instrumentar una serie de bibliotecas y marcos. En la página Requisitos de compatibilidad se puede encontrar una lista de estos paquetes. Importa estos paquetes a tu aplicación y sigue las instrucciones de configuración que aparecen junto a cada integración.