Los logs que se generan a partir de recursos administrados distintos de las funciones de AWS Lambda pueden ser útiles para identificar la causa raíz de los problemas de las aplicaciones serverless. Datadog te recomienda recopilar logs de los siguientes recursos administrados de AWS de tu entorno.
custom:datadog:# ... otros parámetros necesarios, como el sitio de Datadog y la clave de APIenableDDLogs:true
Transform:- AWS::Serverless-2016-10-31- Name:DatadogServerlessParameters:# ... otros parámetros necesarios, como el sitio de Datadog y la clave de APIenableDDLogs:true
constdatadog=newDatadog(this,"Datadog",{// ... otros parámetros necesarios, como el sitio de Datadog y la clave de API
enableDatadogLogs: true});datadog.addLambdaFunctions([<LAMBDA_FUNCTIONS>]);
Define la variable de entorno DD_SERVERLESS_LOGS_ENABLED como true en tus funciones de Lambda.
Si quieres dejar de recopilar logs con la función de Lamba del Datadog Forwarder, borra el filtro de suscripción del grupo de logs de CloudWatch de tu propia función de Lambda.
Si quieres dejar de recopilar logs con la extensión de Lambda para Datadog, sigue las instrucciones que se muestran a continuación en función de tu método de instalación:
custom:datadog:# ... otros parámetros necesarios, como el sitio de Datadog y la clave de APIenableDDLogs:false
Transform:- AWS::Serverless-2016-10-31- Name:DatadogServerlessParameters:# ... otros parámetros necesarios, como el sitio de Datadog y la clave de APIenableDDLogs:false
constdatadog=newDatadog(this,"Datadog",{// ... otros parámetros necesarios, como el sitio de Datadog y la clave de API
enableDatadogLogs: false});datadog.addLambdaFunctions([<LAMBDA_FUNCTIONS>]);
Define la variable de entorno DD_SERVERLESS_LOGS_ENABLED como false en tus funciones de Lambda.
Para excluir los logs START y END, define la variable de entorno DD_LOGS_CONFIG_PROCESSING_RULES como [{"type": "exclude_at_match", "name": "exclude_start_and_end_logs", "pattern": "(START|END) RequestId"}]. Otra posibilidad sería añadir un archivo datadog.yaml en el directorio raíz de tu proyecto con el siguiente contenido:
Si utilizas la extensión de Lambda para recopilar trazas (traces) y logs, Datadog añade automáticamente el ID de solicitud de AWS Lambda al tramo (span) aws.lambda en la etiqueta (tag) request_id. Además, los logs de Lambda para la misma solicitud se añaden en el atributo lambda.request_id. Las vistas de trazas y logs de Datadog se conectan mediante el uso del ID de solicitud de AWS Lambda.
Si utilizas la función de Lambda del Forwarder para recopilar trazas y logs, dd.trace_id se inserta automáticamente en los logs (habilitada por la variable de entorno DD_LOGS_INJECTION). Las vistas de trazas y logs de Datadog se conectan mediante el ID de traza de Datadog. Esta característica es compatible con la mayoría de aplicaciones que utilizan runtimes y loggers populares (consulta la compatibilidad por runtime).
Si utilizas un runtime o un logger personalizado no compatible, sigue estos pasos:
Cuando generas logs en JSON, es necesario obtener el ID de traza de Datadog mediante dd-trace y añadirlo a tus logs en el campo dd.trace_id:
{"message":"This is a log","dd":{"trace_id":"4887065908816661012"}// ... the rest of your log
}
Para generar logs de texto sin formato, tienes que hacer lo siguiente:
Obtén el ID de traza de Datadog mediante dd-trace y añádelo a tu log.
Clona el pipeline de logs de Lambda predeterminado, que es de solo lectura.
Habilita el pipeline clonado y deshabilita el predeterminado.
Actualiza las reglas del analizador Grok del pipeline clonado para analizar el ID de traza de Datadog en el atributo dd.trace_id. Por ejemplo, utiliza la regla my_rule \[%{word:level}\]\s+dd.trace_id=%{word:dd.trace_id}.* para los logs que tengan este aspecto [INFO] dd.trace_id=4887065908816661012 My log message.