Esta página describe cómo fusionar tus trazas de AWS Step Functions con trazas de AWS Lambda o trazas de Step Functions anidadas. Estas instrucciones suponen que ya instrumentaste estas AWS Step Functions y funciones Lambda para enviar trazas a Datadog.
Datadog recomienda utilizar JSONata para tus definiciones de Step Function a fin de obtener la más completa experiencia de rastreo de extremo a extremo. Esta estrategia garantiza que cualquier contexto anterior al Step Function se conservará y se transmitirá.
Fusionar trazas de Step Functions y trazas de Lambda descendentes
Con JSONata
Requisitos
Tiempo de ejecución
Requisito
Node.js
Biblioteca Lambda Datadog para la capa Node.js v116 o posterior
Python
Biblioteca Lambda Datadog para la capa Python v103 o posterior
Otro
Extensión de Datadog v75 o posterior
Tu definición de máquina de estado debe utilizar JSONata como lenguaje de consulta. Para habilitarlo, configura el campo QueryLanguage de nivel superior de tu definición como JSONata.
Configuración
En la tarea Lambda, configura Payload en el campo Arguments como se indica a continuación:
La expresión JSONata fusiona el contexto del servicio ascendente con el objeto del contexto Step Functions actual y la carga útil de entrada del estado de Lambda.
Alternativamente, si tienes la lógica empresarial definida en la carga útil, puedes sustituir $states.input al final de la expresión JSONata por el valor que quieras para la clave Payload.
Con JSONPath
Requisitos
Tiempo de ejecución
Requisito
Node.js
Biblioteca Lambda Datadog para la capa Node.js v112 o posterior
Python
Biblioteca Lambda Datadog para la capa Python v95 o posterior
Tu definición de máquina de estado utiliza JSONPath. Si se omite el campo de nivel superior QueryLanguage de tu definición, se utiliza por defecto JSONPath.
Asegúrate de que tienes desplegado el Datadog Lambda Forwarder, una función Lambda que envía logs de AWS a Datadog, y de que estás utilizando la v3.74.0 o posterior. Puede que necesites actualizar tu Forwarder.
Sustituye <DATADOG_SITE> por (asegúrate de haber seleccionado el SITIO correcto del lado derecho).
Sustituye <DATADOG_API_KEY_SECRET_ARN> por el ARN del secreto de AWS donde está almacenada la clave de API Datadog de forma segura. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). El permiso secretsmanager:GetSecretValue es obligatorio. Para realizar tests, puedes utilizar apiKey y configurar la clave de API Datadog en texto sin formato.
Sustituye <FORWARDER_ARN> por el ARN de tu Datadog Lambda Forwarder. Este paso configura la suscripción de flujos (streams) de logs del Forwarder. Asegúrate de que el nombre del grupo de logs de la Step Function comienza por /aws/vendedlogs/states/. Si no es así, debes configurarlo manualmente.
Si aún no lo hiciste, instala la [CLI Datadog][9] v2.18.0 o posterior.
npm install -g @datadog/datadog-ci
Asegúrate de que tienes desplegado el Datadog Lambda Forwarder, una función Lambda que envía logs de AWS a Datadog, y de que estás utilizando la v3.130.0 o posterior. Puede que necesites actualizar tu Forwarder.
Sustituye <STEP_FUNCTION_ARN> por el ARN de tu Step Function. Repite la marca --step-function para cada Step Function que desees instrumentar.
Sustituye <FORWARDER_ARN> por el ARN de tu Datadog Lambda Forwarder, como se indica arriba. Este paso configura la suscripción de flujos de logs del Forwarder. Asegúrate de que el nombre del grupo de logs de la Step Function comienza por “/aws/vendedlogs/states/”. Si no es así, debes configurarlo manualmente.
Sustituye <ENVIRONMENT> por la etiqueta del entorno que desees aplicar a tu Step Functions.
La función intrínsecaJsonMerge fusiona el objeto de contexto de Step Functions ($$) con la carga útil de entrada original de Lambda ($). Los campos de la carga útil original sobrescriben el objeto de contexto de Step Functions si tus claves son las mismas.
Ejemplo:
"Lambda Read From DynamoDB":{"Type":"Task","Resource":"arn:aws:states:::lambda:invoke","Parameters":{"Payload.$":"States.JsonMerge($$, $, false)","FunctionName":"${lambdaArn}"},"End":true}
Alternativamente, si tienes la lógica empresarial definida en la carga útil, también puedes utilizar el siguiente formato:
"Lambda Read From DynamoDB":{"Type":"Task","Resource":"arn:aws:states:::lambda:invoke","Parameters":{"Payload":{..."Execution.$":"$$.Execution","State.$":"$$.State","StateMachine.$":"$$.StateMachine"},"FunctionName":"${lambdaArn}"},"End":true}
Mediante servicios gestionados
Sigue estas instrucciones si tu Step Function invoca indirectamente una Lambda a través de EventBridge, SQS o SNS. Para rastrear con otro servicio AWS gestionado, ponte en contacto con el servicio de asistencia de Datadog para abrir una solicitud de función.
Requisitos
Tiempo de ejecución
Requisito
Python
Biblioteca Lambda Datadog para la capa Python v107 o posterior
Tu definición de máquina de estado debe utilizar JSONata como lenguaje de consulta. Para habilitarlo, configura el campo QueryLanguage de nivel superior de tu definición como JSONata.
La fusión de Step Functions con trazas de Lambda mediante servicios gestionados sólo es compatible con los tiempos de ejecución Python.
EventBridge
Si una regla EventBridge tiene una función Lambda como objetivo, edita tu tarea EventBridge PutEvents para configurar _datadog en el campo Detail de la siguiente manera:
Si una cola SQS tiene un activador Lambda, edita tu tarea SQS SendMessage para configurar _datadog en el campo MessageAttributes de la siguiente manera:
Si hay una suscripción Lambda en el tema, edita la tarea SNS Publish Task para configurar _datadog en el campo MessageAttributes de la siguiente manera:
"Step Functions StartExecution":{"Type":"Task","Resource":"arn:aws:states:::states:startExecution","Parameters":{"StateMachineArn":"${stateMachineArn}","Input":{"StatePayload":"Hello from Step Functions!","CONTEXT":{"Execution.$":"$$.Execution","State.$":"$$.State","StateMachine.$":"$$.StateMachine"}}},"End":true}
Fusionar trazas de Lambda con trazas de Step Functions descendentes
Sigue estas instrucciones si una función Lambda invoca directamente una Step Function utilizando StartExecution o StartSyncExecution.
Requisitos
Tiempo de ejecución
Requisito
Node.js
Biblioteca Lambda Datadog para la capa Node.js v112 o posterior odd-trace-js v3.58.0, v4.37.0, o v5.13.0 o posterior
Python
Biblioteca Lambda Datadog para la capa Python v99 o posterior odd-trace-py v2.13.0 o posterior
Java
dd-trace-java v1.47.0 o posterior
.NET
dd-trace-dotnet v3.11.0 o posterior
Configuración
Si se cumplen los requisitos de la capa o de la versión del rastreador, no es necesaria ninguna otra configuración.
Para garantizar la correcta fusión de las trazas, proporciona la entrada al comando Start Execution de Step Functions, incluso si la entrada es un objeto JSON vacío.