El generador de perfiles se incluye en las bibliotecas de rastreo de Datadog. Si ya estás utilizando APM para recopilar trazas (traces) para tu aplicación, puedes omitir la instalación de biblioteca e ir directamente a habilitar el generador de perfiles.

Requisitos

Para obtener un resumen de las versiones mínimas y recomendadas del tiempo de ejecución y del rastreador en todos los lenguajes, consulta Versiones de lenguaje y rastreadores compatibles.

Datadog Profiler requiere Go 1.19+.

Para Hotspots de código y Perfiles de endpoint, utiliza dd-trace-go versión 1.37.0+.

Continuous Profiler no es compatible con las plataformas serverless, como AWS Lambda.

Instalación

Para empezar a crear perfiles de aplicaciones:

  1. Asegúrare de que Datadog Agent v6+ está instalado y en funcionamiento. Datadog recomienda utilizar Datadog Agent v7+.

  2. Obtén dd-trace-go utilizando el comando:

    go get gopkg.in/DataDog/dd-trace-go.v1/profiler
    

    Nota: El generador de perfiles está disponible en la biblioteca dd-trace-go para las versiones 1.23.0+.

  3. Importa el generador de perfiles al inicio de tu aplicación:

    import "gopkg.in/DataDog/dd-trace-go.v1/profiler"
    
  4. Añade el siguiente fragmento para iniciar el generador de perfiles:

    err := profiler.Start(
        profiler.WithService("<SERVICE_NAME>"),
        profiler.WithEnv("<ENVIRONMENT>"),
        profiler.WithVersion("<APPLICATION_VERSION>"),
        profiler.WithTags("<KEY1>:<VALUE1>", "<KEY2>:<VALUE2>"),
        profiler.WithProfileTypes(
          profiler.CPUProfile,
          profiler.HeapProfile,
          // The profiles below are disabled by default to keep overhead
          // low, but can be enabled as needed.
    
          // profiler.BlockProfile,
          // profiler.MutexProfile,
          // profiler.GoroutineProfile,
        ),
    )
    if err != nil {
        log.Fatal(err)
    }
    defer profiler.Stop()
    
  5. Opcional: activa la función de línea de tiempo (fase beta), consulta requisitos previos.

  6. Opcional: configura la integración de código fuente para conectar tus datos de perfiles con tus repositorios Git.

  7. Después de uno o dos minutos, visualizarás tus perfiles en la página Datadog APM > Generador de perfiles.

Nota: Por defecto, solo están habilitados los perfiles CPU y Heap. Utiliza profiler.WithProfileTypes para habilitar tipos de perfil adicionales.

Configuración

Puedes configurar los parámetros del generador de perfiles en el código con estas funciones:

FunciónTipoDescripción
WithServiceCadenaEl nombre del servicio de Datadog, por ejemplo, my-web-app.
WithEnvCadenaEl nombre de entorno de Datadog, por ejemplo, production.
WithVersionCadenaLa versión de tu aplicación.
WithTagsLista de cadenasUna lista de etiquetas (tags) para aplicar a un perfil cargado. Las etiquetas deben tener el formato <KEY>:<VALUE>.

También puedes establecer la configuración del generador de perfiles utilizando las variables de entorno:

Variable de entornoTipoDescripción
DD_ENVCadenaEl nombre de entorno, por ejemplo, production.
DD_SERVICECadenaEl nombre de servicio, por ejemplo, web-backend.
DD_VERSIONCadenaLa versión de tu servicio.
DD_TAGSCadenaLas etiquetas para aplicar a un perfil cargado. Debe ser un lista de <key>:<value> separados por comas como: layer:api,team:intake.

Mostrar las llamadas a la función C en los perfiles de CPU

Por defecto, el perfil de la CPU de Go solo muestra información detallada del código Go. Si tu programa llama a código C, el tiempo de ejecución del código C se refleja en el perfil, pero los stacks de llamadas solo muestran las llamadas a la función Go.

Para añadir información detallada de llamadas a la función C a los perfiles de CPU, puedes optar por utilizar la biblioteca como ianlancetaylor/cgosymbolizer. Para utilizar esta biblioteca:

  1. Descarga el paquete dle sitio:

    go get github.com/ianlancetaylor/cgosymbolizer@latest
    
  2. Añade la siguiente importación en cualquier parte de tu programa:

    import _ "github.com/ianlancetaylor/cgosymbolizer"
    

Nota: Esta biblioteca se considera experimental. Puede causar bloqueos (poco frecuentes) en programas que utilicen excepciones C++, o que utilicen bibliotecas como tcmalloc, que también recopilan stacks de llamadas.

Ahorra hasta un 14% de CPU en producción con PGO

A partir de Go 1.21, el compilador Go admite la Optimización Guiada por Perfil (PGO). La PGO permite optimizaciones adicionales en el código identificado como caliente por los perfiles de CPU de las cargas de trabajo de producción. Es compatible con el Datadog Go Continuous Profiler y puede utilizarse para compilaciones de producción.

Sigue esta guía para configurarlo.

¿No sabes qué hacer a continuación?

La guía Empezando con el generador de perfiles toma un ejemplo de servicio con un problema de rendimiento y te muestra cómo utilizar Continuous Profiler para comprender y solucionar el problema.

Referencias adicionales