Información general

Para enviar tus logs de Python a Datadog, configura un registrador de Python para loguear un archivo en tu host y luego supervisa ese archivo con el Datadog Agent.

Configurar tu logger

Los logs de Python pueden ser complejos de manejar debido a los “tracebacks”. Los tracesbacks hacen que los logs se dividan en varias líneas, lo que dificulta su asociación con el evento de log original. Para solucionar este problema, Datadog recomienda encarecidamente el uso de un formateador JSON al realizar el registro, de modo que puedas:

  • Asegúrarte de que cada stack trace está envuelta en el log correcto.
  • Asegúrarte de que todos los atributos de un evento de log se extraen correctamente (gravedad, nombre del registrador, nombre del subproceso, etc.).

Consulta los ejemplos de configuración de las siguientes bibliotecas de registro:

*El registrador de Python tiene un parámetro extra para añadir atributos personalizados. Utiliza DJANGO_Datadog_LOGGER_EXTRA_INCLUDE para especificar una expresión regular que coincida con el nombre de los registradores para los que deseas añadir el parámetro extra.

Configurar el Datadog Agent

Una vez activada la recopilación de logs, configura la recopilación de logs personalizada para supervisar tus archivos de log y enviarlos a Datadog haciendo lo siguiente:

  1. Crea una carpeta python.d/ en el directorio de configuración del Agent conf.d/.
  2. Crea un archivo conf.yaml en el directorio conf.d/python.d/ con el siguiente contenido:
    init_config:
    
    instances:
    
    ##Log section
    logs:
    
      - type: file
        path: "<PATH_TO_PYTHON_LOG>.log"
        service: "<SERVICE_NAME>"
        source: python
        sourcecategory: sourcecode
        # For multiline logs, if they start by the date with the format yyyy-mm-dd uncomment the following processing rule
        #log_processing_rules:
        #  - type: multi_line
        #    name: new_log_start_with_date
        #    pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
    
  3. Reinicia el Agent.
  4. Ejecuta el subcomando de estado del Agent y busca python en la sección Checks para confirmar que los logs se han enviado correctamente a Datadog.

Si los logs están en formato JSON, Datadog parsea los mensajes del log de forma automática para extraer sus atributos. Utiliza el Log Explorer para ver tus logs y solucionar problemas relacionados.

Conectar tus servicios al conjunto de logs y trazas (traces)

Si tienes APM activado para esta aplicación, conecta tus logs y trazas añadiendo automáticamente los ID de traza (trace) y los ID de tramo (span), env, service y version a tus logs mediante las siguientes instrucciones de APM para Python.

Nota: Si el rastreador APM inyecta service en tus logs, este reemplazará al valor definido en la configuración del Agent.

Una vez hecho esto, el log debe tener el siguiente formato:

2019-01-07 15:20:15,972 DEBUG [flask.app] [app.py:100] [dd.trace_id=5688176451479556031 dd.span_id=4663104081780224235] - this is an example

Si los logs están en formato JSON, los valores de traza se extraen automáticamente si los valores están en el nivel superior o en los bloques de nivel superior extra o record.extra. A continuación, se muestran ejemplos de logs de JSON válidos en los que los valores de traza se analizan automáticamente.

{
  "message":"Hello from the private method",
  "dd.trace_id":"18287620314539322434",
  "dd.span_id":"8440638443344356350",
  "dd.env":"dev",
  "dd.service":"logs",
  "dd.version":"1.0.0"
}
{
  "message":"Hello from the private method",
  "extra":{
    "dd.trace_id":"18287620314539322434",
    "dd.span_id":"8440638443344356350",
    "dd.env":"dev",
    "dd.service":"logs",
    "dd.version":"1.0.0"
  }
}
{
"message":"Hello from the private method",
  "record":{
    "extra":{
      "dd.trace_id":"1734396609740561719",
      "dd.span_id":"17877262712156101004",
      "dd.env":"dev",
      "dd.service":"logs",
      "dd.version":"1.0.0"
    }
  }
}

Leer más