Visualizar as invocações da função do Lambda usando o AWS X-Ray
Você pode usar o AWS X-Ray para visualizar os componentes do aplicativo, identificar gargalos de performance e solucionar problemas de solicitações que resultaram em um erro. Suas funções do Lambda enviam dados de rastreamento para o X-Ray, e o X-Ray processa os dados para gerar um mapa de serviço e resumos de rastreamento pesquisáveis.
Se você tiver habilitado o rastreamento do X-Ray em um serviço que invoca sua função, o Lambda enviará rastreamentos para o X-Ray automaticamente. O serviço upstream, como Amazon API Gateway, ou uma aplicação hospedada no Amazon EC2 que é instrumentada com o X-Ray SDK, analisa solicitações de entrada e adiciona um cabeçalho de rastreamento que informa ao Lambda para enviar rastreamentos ou não. Os rastreamentos de produtores de mensagens upstream, como o Amazon SQS, são vinculados automaticamente aos rastreamentos de funções do Lambda downstream, o que cria uma visão completa de toda a aplicação. Para obter mais informações, consulte Tracing event-driven applications (Rastreamento de aplicações orientadas a eventos) no Guia do desenvolvedor do AWS X-Ray.
nota
Atualmente, o rastreamento do X-Ray não oferece suporte a funções do Lambda com o Amazon Managed Streaming for Apache Kafka (Amazon MSK), Apache Kafka autogerenciado, Amazon MQ com ActiveMQ e RabbitMQ ou mapeamentos da origem do evento do Amazon DocumentDB.
Para alternar o rastreamento ativo na sua função do Lambda usando o console, siga as etapas abaixo:
Para ativar o rastreamento ativo
Abra a página Funções
do console do Lambda. -
Escolha uma função.
Escolha Configuration (Configuração) e depois Monitoring and operations tools (Ferramentas de monitoramento e operações).
Selecione a opção Editar.
-
Em X-Ray, ative a opção Active tracing (Rastreamento ativo).
-
Escolha Salvar.
Sua função precisa de permissão para carregar dados de rastreamento no X-Ray. Quando você ativa o rastreamento ativo no console do Lambda, o Lambda adiciona as permissões necessárias à função de execução da função. Caso contrário, adicione a política AWSXRayDaemonWriteAccess
O X-Ray não rastreia todas as solicitações para sua aplicação. O X-Ray aplica um algoritmo de amostragem para garantir que o rastreamento seja eficiente, enquanto ainda fornece uma amostra representativa das solicitações. A taxa de amostragem é uma solicitação por segundo e 5% de solicitações adicionais. Você não pode configurar a taxa de amostragem do X-Ray para suas funções.
Noções básicas sobre rastreamentos do X-Ray
No X-Ray, um rastreamento registra informações sobre uma solicitação que é processada por um ou mais serviços. O Lambda registra dois segmentos por rastreamento, o que cria dois nós no gráfico de serviços. A imagem a seguir destaca esses dois nós:
O primeiro nó à esquerda representa o serviço do Lambda, que recebe a solicitação de invocação. O segundo nó representa a sua função do Lambda específica.
O segmento registrado para o serviço Lambda, AWS::Lambda
, abrange todas as etapas necessárias para preparar o ambiente de execução do Lambda. Isso inclui agendar o microVM, criar ou descongelar um ambiente de execução com os recursos que você configurou e baixar o código e todas as camadas da função .
O segmento AWS::Lambda::Function
é para o trabalho realizado pela função.
nota
A AWS atualmente está implementando alterações no serviço Lambda. Devido a essas alterações, você pode ver pequenas diferenças entre a estrutura e o conteúdo das mensagens de log do sistema e os segmentos de rastreamento emitidos por diferentes funções do Lambda na sua Conta da AWS.
Essa alteração afeta os subsegmentos do segmento da função. Os parágrafos a seguir descrevem o formato antigo e formato novo desses subsegmentos.
Essas alterações serão implementadas durante as próximas semanas, e todas as funções em todas as Regiões da AWS, exceto nas regiões China e GovCloud, passarão a usar o novo formato de mensagens de log e segmentos de rastreamento.
Estrutura de segmentos do Lambda AWS X-Ray no estilo antigo
A estrutura do X-Ray no estilo antigo para o segmento AWS::Lambda
é assim:
Nesse formato, o segmento da função tem subsegmentos para Initialization
, Invocation
e Overhead
. Somente para Lambda SnapStart, existe também um subsegmento Restore
(não mostrado nesse diagrama).
O subsegmento Initialization
representa a fase inicial do ciclo de vida do ambiente de execução do Lambda. Durante essa fase, Lambda inicializa as extensões, inicializa o runtime e executa o código de inicialização da função.
O subsegmento Invocation
representa a fase de chamada em que o Lambda chama o manipulador de função. Isso começa com o registro do runtime e da extensão e termina quando o runtime está pronto para enviar a resposta.
(Lambda SnapStart apenas) O subsegmento Restore
mostra o tempo necessário para o Lambda restaurar um snapshot, carregar o runtime (JVM) e executar todos os hooks de runtime afterRestore
existentes. O processo de restauração de snapshots pode incluir o tempo gasto em atividades fora da MicroVM. Esse tempo é relatado no subsegmento Restore
. Você não é cobrado pelo tempo gasto fora da microVM para restaurar um snapshot.
O subsegmento Overhead
representa a fase que ocorre entre o momento em que o runtime envia a resposta e o sinal para a próxima chamada. Durante esse período, o runtime termina todas as tarefas relacionadas a uma chamada e se prepara para congelar o sandbox.
Importante
Você pode usar o SDK do X-Ray para estender o subsegmento Invocation
com subsegmentos adicionais para anotações, metadados e chamadas downstream. Não é possível acessar o segmento de função diretamente nem registrar trabalhos feitos fora do escopo de chamada do manipulador.
Para obter mais informações sobre as fases do ambiente de execução do Lambda, consulte Entender o ciclo de vida do ambiente de execução do Lambda.
Um exemplo de rastreamento usando a estrutura de X-Ray no estilo antigo é mostrado no diagrama a seguir.
Observe os dois segmentos do exemplo. Ambos têm o nome my-function, mas um tem a origem AWS::Lambda
e o outro, a origem AWS::Lambda::Function
. Se o segmento AWS::Lambda
mostrar um erro, o serviço Lambda teve um problema. Se o segmento AWS::Lambda::Function
mostrar um erro, sua função teve um problema.
nota
Ocasionalmente, é possível notar um grande intervalo entre as fases de inicialização e de invocação da função em seus rastreamentos do X-Ray. Para as funções que usam a simultaneidade provisionada, isso ocorre pelo Lambda inicializar as instâncias de função com bastante antecedência à invocação. Para as funções que usam a simultaneidade não reservada (sob demanda), o Lambda pode inicializar proativamente uma instância de função, mesmo que não haja invocação. Visualmente, ambos os casos apresentam um intervalo de tempo entre as fases de inicialização e de invocação.
Estrutura de segmentos AWS X-Ray do Lambda no estilo novo
A estrutura do X-Ray no estilo novo para o segmento AWS::Lambda
é assim:
Nesse novo formato, o subsegmento Init
representa a fase de inicialização do ciclo de vida do ambiente de execução do Lambda.
Não há segmento de invocação no novo formato. Em vez disso, os subsegmentos dos clientes são anexados diretamente ao segmento AWS::Lambda::Function
. Esse segmento contém as seguintes métricas como anotações:
-
aws.responseLatency
: o tempo necessário para a função ser executada -
aws.responseDuration
: o tempo necessário para transferir a resposta para o cliente -
aws.runtimeOverhead
: o tempo adicional de que o runtime precisou para ser concluído -
aws.extensionOverhead
: o tempo adicional de que as extensões precisaram para serem concluídas
Um exemplo de rastreamento usando a estrutura de X-Ray no estilo novo é mostrado no diagrama a seguir.
Observe os dois segmentos do exemplo. Ambos têm o nome my-function, mas um tem a origem AWS::Lambda
e o outro, a origem AWS::Lambda::Function
. Se o segmento AWS::Lambda
mostrar um erro, o serviço Lambda teve um problema. Se o segmento AWS::Lambda::Function
mostrar um erro, sua função teve um problema.
Consulte os tópicos a seguir para obter uma introdução específica de uma linguagem ao rastreamento no Lambda:
Para obter uma lista completa de serviços que oferecem suporte à instrumentação ativa, consulte Serviços da AWS compatíveis no Guia do desenvolvedor do AWS X-Ray.
Permissões da função de execução
O Lambda precisa das permissões a seguir para enviar dados de rastreamento para o X-Ray. Adicione-as à função de execução da sua função.
Essas permissões estão incluídas na política gerenciada AWSXRayDaemonWriteAccess
O daemon do AWS X-Ray
Em vez de enviar dados de rastreamento diretamente para a API do X-Ray, o X-Ray SDK usa um processo do daemon. O daemon do AWS X-Ray é uma aplicação que é executada no ambiente do Lambda e escuta o tráfego UDP que contém segmentos e subsegmentos. Ele armazena em buffer os dados recebidos e os grava no X-Ray em lotes, reduzindo a sobrecarga de processamento e memória necessária para rastrear invocações.
O runtime do Lambda permite ao daemon até 3% da memória configurada da sua função ou 16 MB, o que for maior. Se sua função ficar sem memória durante a invocação, o runtime encerrará o processo do daemon primeiro para liberar memória.
O processo do daemon é totalmente gerenciado pelo Lambda e não pode ser configurado pelo usuário. Todos os segmentos gerados por invocações de função são registrados na mesma conta que a função do Lambda. O daemon não pode ser configurado para redirecioná-los para nenhuma outra conta.
Para obter mais informações, consulte The X-Ray daemon no Guia do desenvolvedor do X-Ray.
Habilitar o rastreamento ativo com a API do Lambda
Para gerenciar a configuração de rastreamento com a AWS CLI ou com o AWS SDK, use as seguintes operações de API:
O exemplo de comando da AWS CLI a seguir habilita o rastreamento ativo em uma função chamada my-function.
aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active
O modo de rastreamento faz parte da configuração específica da versão quando você publica uma versão da função. Não é possível alterar o modo de rastreamento em uma versão publicada.
Habilitar o rastreamento ativo com o AWS CloudFormation
Para ativar o rastreamento ativo em um recurso AWS::Lambda::Function
em um modelo do AWS CloudFormation, use a propriedade TracingConfig
.
exemplo function-inline.yml : configuração de rastreamento
Resources: function: Type: AWS::Lambda::Function Properties:
TracingConfig: Mode: Active
...
Para um recurso do AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function
, use a propriedade Tracing
.
exemplo template.yml : configuração de rastreamento
Resources: function: Type: AWS::Serverless::Function Properties:
Tracing: Active
...