Instalar la monitorización serverless para AWS Step Functions
Requisitos
- La duración total de la ejecución de Step Function debe ser inferior a 90 minutos para las trazas (traces) completas.
- Las trazas de Lambda vinculadas son compatibles con los tiempos de ejecución de Node.js (capa v112+) y Python (capa v95+).
Cómo funciona
La monitorización de AWS Step Functions de Datadog recopila logs y métricas de integración de AWS y utiliza logs ingeridos de AWS Step Functions para generar métricas y trazas mejoradas para tus ejecuciones de Step Function.
Configuración
Para los desarrolladores que utilicen el Marco serverless para desplegar aplicaciones serverless, utiliza el complemento del marco serverless de Datadog.
Si aún no lo has hecho, instala el Complemento del marco serverless de Datadog v5.40.0+:
serverless plugin install --name serverless-plugin-datadog
Asegúrate de que hayas desplegado el Datadog Lambda Forwarder, una función Lambda que envía logs de AWS a Datadog y de que estés utilizando v3.74.0+. Puede que necesites actualizar tu Forwarder.
Toma nota del ARN de tu Forwarder.
Añade lo siguiente a tu serverless.yml
:
custom:
datadog:
site: <DATADOG_SITE>
apiKeySecretArn: <DATADOG_API_KEY_SECRET_ARN>
forwarderArn: <FORWARDER_ARN>
enableStepFunctionsTracing: true
propagateUpstreamTrace : true
- 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 hayas almacenado la clave de la API de 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 agilizar el test, puedes utilizar apiKey
y configurar la clave de la API de Datadog en texto sin formato. - Sustituye
<FORWARDER_ARN>
por el ARN de tu Datadog Lambda Forwarder, como se ha indicado anteriormente. propagateUpstreamTrace
: Opcional. Configúralo en true
para inyectar el contexto de Step Function en las invocaciones Lambda y Step Function posteriores.
Para configuraciones adicionales, consulta Complemento del marco serverless de Datadog - Parámetros de configuración.
Para los tiempos de ejecución Node.js y Python, configura mergeStepFunctionAndLambdaTraces:true
en tu archivo serverless.yaml
. Esto vincula tus trazas de Step Function con trazas Lambda. Si no has instrumentado tus funciones Lambda para enviar trazas, puedes seguir los pasos para añadir la capa Lambda para tu tiempo de ejecución preferido.
Si aún no lo has hecho, instala Datadog CLI v2.18.0+.
npm install -g @datadog/datadog-ci
Asegúrate de que hayas desplegado el Datadog Lambda Forwarder, una función Lambda que envía logs de AWS a Datadog y de que estés utilizando v3.74.0+. Puede que necesites actualizar tu Forwarder.
Toma nota del ARN de tu Forwarder.
Instrumenta tu Step Function.
datadog-ci stepfunctions instrument \
--step-function <STEP_FUNCTION_ARN> \
--forwarder <FORWARDER_ARN> \
--env <ENVIRONMENT> \
--propagate-upstream-trace
- 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 ha indicado anteriormente. - Sustituye
<ENVIRONMENT>
por la etiqueta (tag) del entorno que desees aplicar a tu Step Functions. --propagate-upstream-trace
es opcional y actualiza las definiciones de tu Step Function para inyectar el contexto de Step Function en cualquier invocación de Step Function o Lambda posterior.
Para obtener más información sobre el comando datadog-ci stepfunctions
, consulta la documentación de Datadog CLI.
Para los tiempos de ejecución de Node.js y Python, añade la marca --merge-step-function-and-lambda-traces
en tu comando de Datadog-ci. Esto vincula las trazas de tu Step Function con las trazas de Lambda. Si aún no has instrumentado tus funciones Lambda para enviar trazas, puedes seguir los pasos para añadir la capa Lambda para tu tiempo de ejecución preferido.
Habilita todos los registros para tu Step Function. En tu consola AWS, abre tu máquina de estado. Haz clic en Edit (Editar) y busca la sección Registro. Allí, configura Nivel de log en ALL
y activa la casilla Incluir datos de ejecución.
Asegúrate de que hayas desplegado el Datadog Lambda Forwarder, una función Lambda que envía logs de AWS a Datadog y de que estés utilizando v3.74.0+. Puede que necesites actualizar tu Forwarder.
Toma nota del ARN de tu Forwarder.
Suscribe los logs de CloudWatch al Datadog Lambda Forwarder. Para ello, tienes dos opciones:
Integración de Datadog-AWS (recomendada)
- Asegúrate de que hayas configurado la Integración de Datadog-AWS.
- En Datadog, abre el cuadro de integración de AWS y ve la pestaña Configuración.
- A la izquierda, selecciona la cuenta de AWS en la que se ejecuta tu Step Function. Abre la pestaña Recopilación de logs.
- En la sección Autosuscripción de logs, en Autosuscribir Forwarder Lambda Functions, introduce el ARN de tu Datadog Lambda Forwarder, como se ha indicado anteriormente. Haz clic en Add (Añadir).
- Activar Logs de CloudWatch de Step Functions. Los cambios tardan 15 minutos en surtir efecto.
Nota: Para la autosuscripción de logs, es necesario que tu Lambda Forwarder y Step Function estén en la misma región.
Manual
- Asegúrate de que el nombre de tu grupo de logs tenga el prefijo
/aws/vendedlogs/states
. - Abre tu consola AWS y ve a tu Datadog Lambda Forwarder. En la sección Información general sobre funciones, haz clic en Añadir desencadenador.
- En Añadir desencadenador, en la sección Configuración de desencadenador, utiliza el desplegable Seleccionar una fuente para seleccionar
CloudWatch Logs
. - En Grupo de logs, selecciona el grupo de logs para tu máquina de estados. Por ejemplo,
/aws/vendedlogs/states/my-state-machine
. - Introduce un nombre para el filtro. Puedes elegir llamarlo “filtro vacío” y dejar en blanco la casilla Patrón de filtro.
Si utilizas un método instrumentación diferente, como Serverless Framework o Datadog-ci, la activación de la autosuscripción puede crear logs duplicados. Elige un método de configuración para evitar este comportamiento..
Activa métricas mejoradas en tu Step Function añadiendo una etiqueta (tag) DD_ENHANCED_METRICS
. Configura el valor en true
.
Activa el rastreo en tu Step Function añadiendo una etiqueta DD_TRACE_ENABLED
. Configura el valor en true
.
Configura etiquetas. Abre tu consola de AWS y ve a tu máquina de estados de Step Functions. Abre la sección Etiquetas y añade etiquetas env:<ENV_NAME>
y service:<SERVICE_NAME>
. La etiqueta env
es necesaria para ver trazas (traces) en Datadog y por defecto es dev
. La etiqueta service
por defecto es el nombre de la máquina de estados.
Para los tiempos de ejecución de Node.js y Python, puedes vincular tus trazas de Step Function a tus trazas de Lambda. En Lambda Task, configura la clave Parameters
con lo siguiente:
"Parameters": {
"Payload.$": "States.JsonMerge($$, $, false)",
...
}
La JsonMerge
intrínseca función 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
}
Como alternativa, si tienes una lógica de negocio definida en la carga útil, también podrías utilizar lo siguiente:
"Lambda Read From DynamoDB": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload": {
...
"Execution.$": "$$.Execution",
"State.$": "$$.State",
"StateMachine.$": "$$.StateMachine"
},
"FunctionName": "${lambdaArn}"
},
"End": true
}
Si aún no has instrumentado tus funciones Lambda para enviar trazas, puedes seguir los pasos para añadir la capa Lambda para tu tiempo de ejecución preferido.
Consulta tus métricas, logs y trazas de Step Function en Datadog
Después de haber invocado tu máquina de estados, ve a la Aplicación serverless en Datadog. Buscaservice:<YOUR_STATE_MACHINE_NAME>
para ver las métricas, logs y trazas relevantes asociados con esa máquina de estados. Si configuras la etiqueta service
en tu máquina de estados en un valor personalizado, busca service:<CUSTOM_VALUE>
.
Si no puedes ver tus trazas, consulta Solucionar problemas.