Usar o CloudWatch Logs para registrar em log o histórico de execução no Step Functions - AWS Step Functions

Usar o CloudWatch Logs para registrar em log o histórico de execução no Step Functions

Os Fluxos de trabalho Padrão registram o histórico de execuções no AWS Step Functions, embora você possa opcionalmente configurar o registro em log no Amazon CloudWatch Logs.

Ao contrário dos fluxos de trabalho padrão, os fluxos de trabalho expressos não registram o histórico de execuções no AWS Step Functions. Para ver o histórico de execução e os resultados de um Fluxo de trabalho expressoo, é necessário configurar o registro em log para o Amazon CloudWatch Logs. A publicação de logs não bloqueia nem diminui as execuções.

Garantias de entrega de logs

Os Amazon CloudWatch Logs são entregues com base em melhor esforço. A integridade e pontualidade das entradas de log não são garantidas. Se você precisar de um histórico de fluxo de trabalho garantido em fluxos de trabalho expressos, recomendamos implementar etapas de fluxo de trabalho para registrar dados em um serviço de armazenamento de dados apropriado, como o Amazon DynamoDB. Como alternativa, você pode considerar usar fluxos de trabalho padrão para garantir o histórico de execução.

Informações sobre preços

Quando você configura o registro em log, as cobranças do CloudWatch Logs serão aplicadas e você será cobrado de acordo com a taxa de logs vendidos. Para obter mais informações, consulte Logs vendidos na guia Logs na Definição de preço do CloudWatch.

Configurar registro em log da

Quando você criar um fluxo de trabalho padrão usando o console do Step Functions, essa máquina de estado não será configurada para enviar logs ao CloudWatch Logs. Quando você criar um fluxo de trabalho expresso usando o console do Step Functions, essa máquina de estado será configurada por padrão para enviar logs ao CloudWatch Logs.

Para fluxos de trabalho expressoos, o Step Functions pode criar um perfil com a política do AWS Identity and Access Management (IAM) necessária para o CloudWatch Logs. Se você criar um Fluxo de trabalho Padrão ou um Fluxo de trabalho expressoo usando a API, a CLI ou o CloudFormation, o Step Functions não ativará o registro em log por padrão, e você precisará garantir que o perfil tenha as permissões necessárias.

Para cada execução iniciada no console, o Step Functions fornece um link para o CloudWatch Logs, configurado com o filtro correto para buscar eventos de log específicos para essa execução.

Também é possível configurar chaves do AWS KMS gerenciadas pelo cliente para criptografar os logs. Consulte Criptografia de dados em repouso para examinar detalhes e configurações de permissão.

Para configurar o log, você pode transmitir o parâmetro LoggingConfiguration ao usar CreateStateMachine ou UpdateStateMachine. É possível analisar ainda mais os dados no CloudWatch Logs usando o CloudWatch Logs Insights. Para obter mais informações, consulte Analisar os dados de log com o CloudWatch Logs Insights.

Payloads do CloudWatch Logs

Eventos do histórico de execução podem conter propriedades de entrada ou saída nas definições. Se a entrada ou saída de escape enviada ao CloudWatch Logs exceder 248 KiB, ela será truncada como resultado das cotas do CloudWatch Logs.

Políticas do IAM para registro em log no CloudWatch Logs

Você também precisará configurar o perfil do IAM de execução da máquina de estado para ter a permissão adequada para registrar no CloudWatch Logs, conforme mostrado no exemplo a seguir.

Exemplo de política do IAM

O exemplo a seguir é de uma política que você pode utilizar para configurar as permissões. Conforme mostrado no exemplo a seguir, é necessário especificar * no campo Resource. As ações de API do CloudWatch, como CreateLogDelivery e DescribeLogGroups, não aceitam os tipos de recurso definidos pelo Amazon CloudWatch Logs. Para obter mais informações, consulte Ações definidas pelo Amazon CloudWatch Logs.

  • Para obter informações sobre recursos CloudWatch, consulte Recursos e operações do CloudWatch Logs no Guia do usuário do Amazon CloudWatch.

  • Para obter informações sobre as permissões que você precisa para configurar o envio de logs para o CloudWatch Logs, consulte Permissões de usuário na seção intitulada Logs enviados para o CloudWatch Logs

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:CreateLogStream", "logs:GetLogDelivery", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:ListLogDeliveries", "logs:PutLogEvents", "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": "*" } ] }

Níveis de log para eventos de execução do Step Functions

Os níveis de log variam entre ALL, ERROR, FATAL e OFF. Todos os tipos de evento são registrados em log para ALL, nenhum tipo de evento é registrado em log quando definido como OFF. Para ERROR e FATAL, consulte a tabela a seguir.

Para obter mais informações sobre os dados de execução exibidos para as execuções do Fluxo de trabalho expressoo com base nesses Níveis de log, consulte Diferenças na experiência do console padrão e expresso.

Tipo de evento ALL ERROR FATAL OFF

ChoiceStateEntered

Registrado em log Não registrado em log Não registrado em log Não registrado em log

ChoiceStateExited

Registrado em log Não registrado em log Não registrado em log Não registrado em log

ExecutionAborted

Registrado em log Registrado em log Registrado em log Não registrado em log

ExecutionFailed

Registrado em log Registrado em log Registrado em log Não registrado em log

ExecutionStarted

Registrado em log Não registrado em log Não registrado em log Não registrado em log

ExecutionSucceeded

Registrado em log Não registrado em log Não registrado em log Não registrado em log

ExecutionTimedOut

Registrado em log Registrado em log Registrado em log Não registrado em log

FailStateEntered

Registrado em log Registrado em log Não registrado em log Não registrado em log

LambdaFunctionFailed

Registrado em log Registrado em log Não registrado em log Não registrado em log
LambdaFunctionScheduled Registrado em log Não registrado em log Não registrado em log Não registrado em log

LambdaFunctionScheduleFailed

Registrado em log Registrado em log Não registrado em log Não registrado em log

LambdaFunctionStarted

Registrado em log Não registrado em log Não registrado em log Não registrado em log

LambdaFunctionStartFailed

Registrado em log Registrado em log Não registrado em log Não registrado em log

LambdaFunctionSucceeded

Registrado em log Não registrado em log Não registrado em log Não registrado em log

LambdaFunctionTimedOut

Registrado em log Registrado em log Não registrado em log Não registrado em log

MapIterationAborted

Registrado em log Registrado em log Não registrado em log Não registrado em log

MapIterationFailed

Registrado em log Registrado em log Não registrado em log Não registrado em log

MapIterationStarted

Registrado em log Não registrado em log Não registrado em log Não registrado em log

MapIterationSucceeded

Registrado em log Não registrado em log Não registrado em log Não registrado em log

MapRunAborted

Registrado em log Registrado em log Não registrado em log Não registrado em log

MapRunFailed

Registrado em log Registrado em log Não registrado em log Não registrado em log

MapStateAborted

Registrado em log Registrado em log Não registrado em log Não registrado em log

MapStateEntered

Registrado em log Não registrado em log Não registrado em log Não registrado em log

MapStateExited

Registrado em log Não registrado em log Não registrado em log Não registrado em log

MapStateFailed

Registrado em log Registrado em log Não registrado em log Não registrado em log

MapStateStarted

Registrado em log Não registrado em log Não registrado em log Não registrado em log

MapStateSucceeded

Registrado em log Não registrado em log Não registrado em log Não registrado em log

ParallelStateAborted

Registrado em log Registrado em log Não registrado em log Não registrado em log

ParallelStateEntered

Registrado em log Não registrado em log Não registrado em log Não registrado em log

ParallelStateExited

Registrado em log Não registrado em log Não registrado em log Não registrado em log
ParallelStateFailed Registrado em log Registrado em log Não registrado em log Não registrado em log

ParallelStateStarted

Registrado em log Não registrado em log Não registrado em log Não registrado em log

ParallelStateSucceeded

Registrado em log Não registrado em log Não registrado em log Não registrado em log

PassStateEntered

Registrado em log Não registrado em log Não registrado em log Não registrado em log

PassStateExited

Registrado em log Não registrado em log Não registrado em log Não registrado em log

SucceedStateEntered

Registrado em log Não registrado em log Não registrado em log Não registrado em log

SucceedStateExited

Registrado em log Não registrado em log Não registrado em log Não registrado em log

TaskFailed

Registrado em log Registrado em log Não registrado em log Não registrado em log

TaskScheduled

Registrado em log Não registrado em log Não registrado em log Não registrado em log
TaskStarted Registrado em log Não registrado em log Não registrado em log Não registrado em log

TaskStartFailed

Registrado em log Registrado em log Não registrado em log Não registrado em log

TaskStateAborted

Registrado em log Registrado em log Não registrado em log Não registrado em log

TaskStateEntered

Registrado em log Não registrado em log Não registrado em log Não registrado em log
TaskStateExited Registrado em log Não registrado em log Não registrado em log Não registrado em log
TaskSubmitFailed Registrado em log Registrado em log Não registrado em log Não registrado em log
TaskSubmitted Registrado em log Não registrado em log Não registrado em log Não registrado em log
TaskSucceeded Registrado em log Não registrado em log Não registrado em log Não registrado em log
TaskTimedOut Registrado em log Registrado em log Não registrado em log Não registrado em log
WaitStateAborted Registrado em log Registrado em log Não registrado em log Não registrado em log
WaitStateEntered Registrado em log Não registrado em log Não registrado em log Não registrado em log
WaitStateExited Registrado em log Não registrado em log Não registrado em log Não registrado em log

Solucionar problemas de registro em log no CloudWatch Logs

Se a máquina de estado não puder enviar logs ao CloudWatch Logs ou se você receber o erro “AccessDeniedException : The state machine IAM Role is not authorized to access the Log Destination“, tente as seguintes etapas:

  1. Verifique se o perfil de execução da máquina de estado tem permissão para registrar e log no CloudWatch Logs.

    Ao chamar os endpoints de API CreateStateMachine ou UpdateStateMachine, assegure-se de que o perfil do IAM especificado no parâmetro roleArn forneça as permissões necessárias, mostradas no exemplo anterior de política do IAM.

  2. Verifique se a política de recursos do CloudWatch Logs não excede o limite de 5.120 caracteres.

    Se a política exceder o limite de caracteres, inclua nos nomes dos grupos de logs o prefixo /aws/vendedlogs/states para conceder permissões às máquinas de estado e evitar o limite.

    Quando você cria um grupo de logs no console do Step Functions, os nomes de grupos de logs sugeridos já têm o prefixo /aws/vendedlogs/states. Para ter mais informações sobre práticas recomendadas de registro em log, consulte Evitar limites de tamanho de política de recursos do CloudWatch.

  3. Verifique se o número de políticas de recursos de log do CloudWatch Logs na conta é inferior a dez.

    O CloudWatch Logs tem uma cota de dez políticas de recursos por região, por conta. Se você tentar habilitar o registro em log em uma máquina de estado que já tem dez políticas de recursos, ela não será criada nem atualizada e você receberá um erro. Para obter mais informações sobre cotas de registro em log, consulte Cotas do CloudWatch Logs

    Para verificar o problema, verifique o número de políticas de recursos usando o comando da CLI:

    aws logs describe-resource-policies

    Para resolver o problema, modifique suas políticas de recursos existentes.

    Primeiro, faça backup das políticas existentes. Em seguida, combine ações ou recursos semelhantes em uma nova política e use o seguinte comando da CLI para criar uma fonte de entrega na conta:

    aws logs put-delivery-source

    Após fazer backup e atualizar as políticas, remova todas as políticas não utilizadas com o seguinte comando:

    aws logs delete-resource-policy --policy-name <PolicyNameToBeDeleted>