Usando CloudWatch registros da Amazon com AWS Lambda - AWS Lambda

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando CloudWatch registros da Amazon com AWS Lambda

O AWS Lambda monitora automaticamente as funções do Lambda em seu nome para ajudar a solucionar falhas nas funções. Desde que a função de execução da sua função tenha as permissões necessárias, o Lambda captura os registros de todas as solicitações tratadas pela sua função e os envia para o Amazon Logs. CloudWatch

Você pode inserir instruções de registro em log no seu código para ajudá-lo a validar se o seu código está funcionando conforme o esperado. O Lambda se integra automaticamente aos CloudWatch Logs e envia todos os registros do seu código para um grupo de CloudWatch registros associado a uma função Lambda.

Por padrão, o Lambda envia logs a um grupo de logs denominado /aws/lambda/<function name>. Caso queira que a função envie logs para outro grupo, você precisará configurar isso usando o console do Lambda, a AWS Command Line Interface (AWS CLI) ou a API do Lambda. Para saber mais, consulte Configurando grupos de CloudWatch registros.

Você pode visualizar os registros das funções do Lambda usando o console Lambda, o CloudWatch console, o AWS Command Line Interface (AWS CLI) ou a API. CloudWatch

nota

Pode levar de 5 a 10 minutos para que os logs apareçam após uma invocação de função.

Pré-requisitos

Sua função de execução precisa de permissão para fazer upload de registros no CloudWatch Logs. Você pode adicionar permissões de CloudWatch registros usando a política AWSLambdaBasicExecutionRole AWS gerenciada fornecida pelo Lambda. Para adicionar essa política à sua função, execute o seguinte comando:

aws iam attach-role-policy --role-name your-role --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

Para ter mais informações, consulte Políticas gerenciadas da AWS para recursos do Lambda.

Definição de preço

Não há cobrança adicional pelo uso de registros Lambda; no entanto, cobranças de CloudWatch registros padrão se aplicam. Para obter mais informações, consulte CloudWatch os preços.

Configurar controles avançados de registro em log para a função do Lambda

Para dar mais controle sobre como os logs das funções são capturados, processados e consumidos, o Lambda oferece as seguintes opções de configuração de log:

  • Formato do log: selecione entre texto simples e formato JSON estruturado para os logs da sua função.

  • Nível de registro - para registros estruturados em JSON, escolha o nível de detalhe dos registros CloudWatch para os quais o Lambda envia, como ERROR, DEBUG ou INFO

  • Grupo de registros - escolha o grupo de CloudWatch registros para o qual sua função envia registros

Configurar logs em formato de texto simples e JSON

Capturar as saídas de log como pares de valores-chave JSON facilita a pesquisa e a filtragem ao depurar suas funções. Com os logs em formato JSON, você também pode adicionar tags e informações contextuais aos logs. Esse recurso ajuda a realizar análises automatizadas de grandes volumes de dados de log. A menos que o fluxo de trabalho de desenvolvimento dependa de ferramentas existentes que consumam logs do Lambda em texto simples, recomendamos que você selecione JSON para o formato de log.

Para todos os tempos de execução gerenciados pelo Lambda, você pode escolher se os registros do sistema da sua função são enviados para CloudWatch os Logs em texto simples não estruturado ou formato JSON. Os logs do sistema são os logs que o Lambda gera e, às vezes, são conhecidos como logs de eventos da plataforma.

Para runtimes compatíveis, quando você usa um dos métodos de registro em log integrado compatível, o Lambda também pode gerar os logs de aplicações da função (os logs gerados pelo código da função) no formato JSON estruturado. Quando você configura o formato de log da função para esses runtimes, a configuração escolhida se aplica aos logs do sistema e de aplicações.

Para runtimes compatíveis, se a função usar uma biblioteca ou um método de registro em log compatível, você não precisa fazer nenhuma alteração no código existente para que o Lambda capture registros em JSON estruturado.

nota

O uso de log no formato JSON adiciona metadados e codifica mensagens de log como objetos JSON contendo uma série de pares de valores-chave. Por causa disso, o tamanho das mensagens de log da função pode aumentar.

Runtimes e métodos de registro em log compatíveis

Atualmente, o Lambda é compatível com a opção de gerar logs de aplicações em JSON estruturado para os runtimes a seguir.

Runtime Versões compatíveis
Java Todos os runtimes do Java, exceto Java 8 no Amazon Linux 1
Node.js Node.js 16 e posterior
Python Python 3.7 e posterior

Para que o Lambda envie os registros do aplicativo da sua função para o CloudWatch formato JSON estruturado, sua função deve usar as seguintes ferramentas de registro integradas para gerar registros:

  • Java: o logger LambdaLogger ou Log4j2.

  • Node.js: os métodos do console console.trace, console.debug, console.log, console.info, console.error e console.warn.

  • Python: a biblioteca logging padrão do Python

Para obter mais informações sobre o uso de controles avançados de registro em log com runtimes compatíveis, consulte Registro em log da função do AWS Lambda em Java, Registro em log da função do AWS Lambda em Node.js e Registro em log da função do AWS Lambda em Python.

Para outros runtimes gerenciados do Lambda, ele atualmente só tem compatibilidade nativa com a captura de logs do sistema no formato JSON estruturado. No entanto, você ainda pode capturar logs de aplicações no formato JSON estruturado em qualquer runtime usando ferramentas de registro em log, como o Powertools para AWS Lambda, que gera logs no formato JSON.

Formatos de log padrão

Atualmente, o formato de log padrão para todos os runtimes do Lambda é texto simples.

Se você já usa bibliotecas de registro em log, como o Powertools para AWS Lambda, para gerar logs de funções no formato JSON estruturado, não precisará alterar o código se selecionar log no formato JSON. O Lambda não codifica duas vezes nenhum log que já esteja codificado em JSON. Então, os logs de aplicações da função continuarão sendo capturados como antes.

Formato JSON para logs do sistema

Quando você configura o formato de log da função como JSON, cada item de log do sistema (evento de plataforma) é capturado como um objeto JSON que contém pares de valores-chave com as seguintes chaves:

  • "time": o horário em que a mensagem de log foi gerada.

  • "type": o tipo de evento que está sendo registrado em log

  • "record": o conteúdo do log gerado

O formato do valor "record" varia de acordo com o tipo de evento que está sendo registrado em log. Para obter mais informações, consulte Tipos de objeto Event da API de telemetria. Para obter mais informações sobre os níveis de log atribuídos aos eventos de log do sistema, consulte Mapeamento de eventos no nível de log do sistema.

Para comparação, os dois exemplos a seguir mostram a mesma saída de log nos formatos de texto simples e JSON estruturado. Observe que, na maioria dos casos, os eventos de log do sistema contêm mais informações quando enviados no formato JSON do que quando enviados em texto simples.

exemplo texto simples:
2023-03-13 18:56:24.046000 fbe8c1 INIT_START Runtime Version: python:3.9.v18 Runtime Version ARN: arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0
exemplo JSON estruturado:
{ "time": "2023-03-13T18:56:24.046Z", "type": "platform.initStart", "record": { "initializationType": "on-demand", "phase": "init", "runtimeVersion": "python:3.9.v18", "runtimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0" } }
nota

API de Telemetria do Lambda sempre emite eventos de plataforma, como START e REPORT no formato JSON. Configurar o formato dos registros do sistema CloudWatch para os quais o Lambda envia não afeta o comportamento da API de telemetria do Lambda.

Formato JSON para logs de aplicações

Quando você configura o formato de log da função como JSON, as saídas de logs de aplicações gravadas usando bibliotecas e métodos de registro em log compatíveis são capturadas como um objeto JSON que contém pares de valores de chave com as chaves a seguir.

  • "timestamp": o horário em que a mensagem de log foi gerada.

  • "level": o nível de log atribuído à mensagem.

  • "message": o conteúdo da mensagem de log.

  • "requestId" (Python e Node.js) ou "AWSrequestId" (Java): o ID de solicitação exclusivo para a invocação da função

Dependendo do runtime e do método de registro em log que a função usa, esse objeto JSON também pode conter pares de chaves adicionais. Por exemplo, em Node.js, se a função usa métodos do console para registrar em log objetos de erro usando vários argumentos, o objeto JSON conterá pares adicionais de valores de chave com as chaves errorMessage, errorType e stackTrace. Para saber mais sobre logs formatados em JSON em diferentes runtimes do Lambda, consulte Registro em log da função do AWS Lambda em Python, Registro em log da função do AWS Lambda em Node.js e Registro em log da função do AWS Lambda em Java.

nota

A chave usada pelo Lambda para o valor do carimbo de data/hora é diferente para logs do sistema e de aplicações. Para logs do sistema, o Lambda usa a chave "time" para manter a consistência com a API de telemetria. Para logs de aplicações, o Lambda segue as convenções dos runtimes compatíveis e usa "timestamp".

Para comparação, os dois exemplos a seguir mostram a mesma saída de log nos formatos de texto simples e JSON estruturado.

exemplo texto simples:
2023-10-27T19:17:45.586Z 79b4f56e-95b1-4643-9700-2807f4e68189 INFO some log message
exemplo JSON estruturado:
{ "timestamp":"2023-10-27T19:17:45.586Z", "level":"INFO", "message":"some log message", "requestId":"79b4f56e-95b1-4643-9700-2807f4e68189" }

Configurar o formato de log da função

Para configurar o formato de log da função, você pode usar o console do Lambda ou a AWS Command Line Interface (AWS CLI). Você também pode configurar o formato de log de uma função usando os comandos CreateFunctione os comandos UpdateFunctionConfigurationda API Lambda, o AWS::Serverless::Functionrecurso AWS Serverless Application Model (AWS SAM) e o AWS CloudFormation AWS::Lambda::Functionrecurso.

Alterar o formato de registro da sua função não afeta os registros existentes armazenados em CloudWatch Registros. Somente os novos logs usarão o formato atualizado.

Se você alterar o formato de log da função para JSON e não definir o nível do log, o Lambda definirá automaticamente o nível do log da aplicação e do sistema da função como INFO. Isso significa que o Lambda envia somente saídas de log de nível INFO e inferior para Logs. CloudWatch Para saber mais sobre a filtragem em nível de log da aplicação e do sistema, consulte Filtragem em nível de log

nota

Em runtimes do Python, quando o formato de log da função é definido como texto sem formatação, a configuração padrão de nível de log é WARN. Isso significa que o Lambda envia apenas saídas de log de nível WARN e inferior para Logs. CloudWatch Alterar o formato de log da função para JSON altera esse comportamento padrão. Para saber mais sobre registro em log no Python, consulte Registro em log da função do AWS Lambda em Python.

Para funções do Node.js que emitem registros de formato métrico incorporado (EMF), alterar o formato de registro da função para JSON pode CloudWatch resultar na incapacidade de reconhecer suas métricas.

Importante

Se sua função usa Powertools for AWS Lambda (TypeScript) ou as bibliotecas cliente EMF de código aberto para emitir registros EMF, atualize suas bibliotecas Powertools e EMF para as versões mais recentes para garantir que possa CloudWatch continuar analisando seus registros corretamente. Se você mudar para logs em formato JSON, também recomendamos que você realize testes para garantir a compatibilidade com as métricas incorporadas da sua função. Para obter mais informações sobre as funções do node.js que emitem logs em EMF, consulte Usar bibliotecas cliente com logs de formato de métricas incorporadas (EMF) em JSON estruturado.

Configurar o formato em log da função (console)
  1. Abra a página Funções do console do Lambda.

  2. Escolha uma função.

  3. Na página de configuração da função, escolha Ferramentas de monitoramento e operações.

  4. No painel Configuração de registro em log, escolha Editar.

  5. Em Conteúdo do log, em Formato do log, selecione Texto ou JSON.

  6. Escolha Salvar.

Alterar o formato de log de uma função existente (AWS CLI)
  • Para alterar o formato de log de uma função existente, use o comando update-function-configuration. Defina a opção LogFormat em LoggingConfig como JSON ou Text.

    aws lambda update-function-configuration \ --function-name myFunction --logging-config LogFormat=JSON
Definir o formato do log ao criar uma função (AWS CLI)
  • Para configurar o formato do log ao criar uma nova função, use a opção --logging-config no comando create-function. Defina LogFormat como JSON ou Text. O exemplo de comando a seguir cria uma função usando o runtime do Node.js 18, que gera logs em JSON estruturado.

    Se você não especificar um formato de log ao criar uma função, o Lambda usará o formato de log padrão para a versão de runtime selecionada. Para obter informações sobre o formato do log, consulte Formatos de log padrão.

    aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --logging-config LogFormat=JSON

Filtragem em nível de log

O Lambda pode filtrar os registros da sua função para que somente registros de um determinado nível de detalhe ou inferior sejam enviados para CloudWatch o Logs. Você pode configurar a filtragem em nível de logs separadamente para os logs do sistema da função (logs gerados pelo Lambda) e os logs de aplicações (logs gerados pelo código da função).

Para Runtimes e métodos de registro em log compatíveis, você não precisa fazer nenhuma alteração no código da função do Lambda para filtrar logs de aplicações da função.

Para todos os outros runtimes e métodos de registro em log, o código da função deve gerar eventos de log para stdout ou stderr como objetos formatados em JSON que contenham um par de valores-chave com a chave "level". Por exemplo, o Lambda interpreta a saída a seguir stdout como um log de nível DEBUG.

print('{"level": "debug", "msg": "my debug log", "timestamp": "2023-11-02T16:51:31.587199Z"}')

Se o campo de valor "level" for inválido ou estiver ausente, o Lambda atribuirá à saída do log o nível INFO. Para que o Lambda use o campo de carimbo de data/hora, você precisa especificar a hora em um formato RFC 3339 válido de carimbo de data/hora. Se você não fornecer um carimbo de data/hora válido, o Lambda atribuirá ao log o nível INFO e adicionará um carimbo de data/hora.

Ao denominar a chave de carimbo de data/hora, siga as convenções do runtime que estiver usando. O Lambda é compatível com as convenções de nomenclatura mais comuns usadas pelos runtimes gerenciados. Por exemplo, em funções que usam o runtime do.NET, o Lambda reconhece a chave "Timestamp".

nota

Para usar a filtragem em nível de log, sua função precisar estar configurada para usar logs em formato JSON. O formato de log padrão para todos os runtimes gerenciados pelo Lambda atualmente é texto simples. Para saber como configurar logs em formato JSON para a função, consulte Configurar o formato de log da função.

Para logs de aplicações (logs gerados pelo código da função), você pode escolher entre os níveis de log a seguir.

Nível de log Uso padrão
TRACE (mais detalhes) As informações mais detalhadas usadas para rastrear o caminho da execução do código
DEBUG Informações detalhadas para depuração do sistema
INFO Mensagens que registram a operação normal da função
WARN Mensagens sobre possíveis erros que podem levar a um comportamento inesperado se não forem corrigidos
ERRO Mensagens sobre problemas que impedem que o código funcione conforme o esperado
FATAL (menos detalhes) Mensagens sobre erros graves que fazem a aplicação parar de funcionar

Quando você seleciona um nível de registro, o Lambda envia registros desse nível e inferiores para CloudWatch Logs. Por exemplo, se você definir o nível de log de aplicações de uma função como WARN, o Lambda não enviará saídas de log nos níveis INFO e DEBUG. O nível padrão de logs de aplicações para a filtragem de logs é INFO.

Quando o Lambda filtra os logs de aplicações da função, as mensagens de log sem nível receberão o nível INFO.

Para logs do sistema (logs gerados pelo serviço Lambda), você pode escolher entre os níveis de log a seguir.

Nível de log Uso
DEBUG (mais detalhes) Informações detalhadas para depuração do sistema
INFO Mensagens que registram a operação normal da função
WARN (menos detalhes) Mensagens sobre possíveis erros que podem levar a um comportamento inesperado se não forem corrigidos

Quando você seleciona um nível de log, o Lambda envia logs desse nível, e de níveis inferiores. Por exemplo, se você definir o nível de log do sistema de uma função como INFO, o Lambda não enviará saídas de log no nível DEBUG.

Por padrão, o Lambda define o nível de log do sistema como INFO. Com essa configuração, o Lambda envia "start" e "report" registra mensagens automaticamente para o. CloudWatch Para receber logs do sistema mais ou menos detalhados, altere o nível de log para DEBUG ou WARN. Para ver uma lista dos níveis de log para os quais o Lambda mapeia diferentes eventos de log do sistema, consulte Mapeamento de eventos no nível de log do sistema.

Configurar a filtragem em nível de log

Para configurar a filtragem em nível de log de aplicações e do sistema para a função, você pode usar o console do Lambda ou a AWS Command Line Interface (AWS CLI). Você também pode configurar o nível de log de uma função usando os comandos CreateFunctione os comandos UpdateFunctionConfigurationda API Lambda, o AWS::Serverless::Functionrecurso AWS Serverless Application Model (AWS SAM) e o AWS CloudFormation AWS::Lambda::Functionrecurso.

Observe que, se você definir o nível de log da função no código, essa definição terá precedência sobre qualquer outra configuração de nível de log que você definir. Por exemplo, se você usar o método logging setLevel() do Python para definir o nível de registro em log da sua função como INFO, essa definição terá precedência sobre uma configuração de WARN que você definir usando o console do Lambda.

Configurar o nível de log de aplicações ou do sistema de uma função existente (console)
  1. Abra a página Funções do console do Lambda.

  2. Escolha uma função.

  3. Na página de configuração da função, escolha Ferramentas de monitoramento e operações.

  4. No painel Configuração de registro em log, escolha Editar.

  5. Em Conteúdo do log, em Formato do log, certifique-se de que a opção JSON esteja selecionada.

  6. Use os botões de opção para selecionar o Nível de log da aplicação e o Nível de log do sistema desejados para a função.

  7. Escolha Salvar.

Configurar o nível de logs de aplicações ou do sistema de uma função existente (AWS CLI)
  • Para alterar o nível de logs de aplicações ou do sistema de uma função existente, use o comando update-function-configuration. Defina --system-log-level como DEBUG, INFO ou WARN. Defina --application-log-level como DEBUG, INFO, WARN, ERROR ou FATAL.

    aws lambda update-function-configuration \ --function-name myFunction --system-log-level WARN \ --application-log-level ERROR
Configurar a filtragem em nível de log ao criar uma função
  • Para configurar a filtragem em nível de log ao criar uma nova função, use as opções --system-log-level e --application-log-level no comando create-function. Defina --system-log-level como DEBUG, INFO ou WARN. Defina --application-log-level como DEBUG, INFO, WARN, WARN ou FATAL.

    aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --system-log-level WARN \ --application-log-level ERROR

Mapeamento de eventos no nível de log do sistema

Para eventos de log no nível do sistema gerados pelo Lambda, a tabela a seguir define o nível de log atribuído a cada evento. Para saber mais sobre os eventos listados na tabela, consulte Referência de esquema para Event da API de Telemetria do Lambda.

Nome do evento Condição Nível de log atribuído
initStart runtimeVersion está definida INFO
initStart runtimeVersion não está definida DEBUG
initRuntimeDone status=success DEBUG
initRuntimeDone status!=success WARN
initReport initializationType=snapstart INFO
initReport initializationType!=snapstart DEBUG
initReport status!=success WARN
restoreStart runtimeVersion está definida INFO
restoreStart runtimeVersion não está definida DEBUG
restoreRuntimeDone status=success DEBUG
restoreRuntimeDone status!=success WARN
restoreReport status=success INFO
restoreReport status!=success WARN
rápido - INFO
runtimeDone status=success DEBUG
runtimeDone status!=success WARN
relatório status=success INFO
relatório status!=success WARN
extensão state=success INFO
extensão state!=success WARN
logSubscription - INFO
telemetrySubscription - INFO
logsDropped - WARN
nota

API de Telemetria do Lambda sempre emite o conjunto completo de eventos da plataforma. Configurar o nível dos registros do sistema CloudWatch para os quais o Lambda envia não afeta o comportamento da API de telemetria do Lambda.

Filtragem em nível de log de aplicações com runtimes personalizados

Quando você configura a filtragem em nível de log de aplicações para a função, o Lambda define o nível de log de aplicações em segundo plano no runtime usando a variável de ambiente AWS_LAMBDA_LOG_LEVEL. O Lambda também define o formato de log da função usando a variável de ambiente AWS_LAMBDA_LOG_FORMAT. Você pode usar essas variáveis para integrar os controles avançados de registro em log do Lambda em um runtime personalizado.

Para definir as configurações de registro em log de uma função usando um runtime personalizado com o console, a AWS CLI e as APIs do Lambda, configure o runtime personalizado para verificar o valor dessas variáveis de ambiente. Depois disso, você pode configurar os loggers do runtime de acordo com o formato e os níveis de log selecionados.

Configurando grupos de CloudWatch registros

Por padrão, cria CloudWatch automaticamente um grupo de registros com o nome /aws/lambda/<function name> de sua função quando ela é invocada pela primeira vez. Para configurar a função para enviar logs a um grupo de logs existente ou para criar um novo grupo de logs para a função, você pode usar a AWS CLI ou o console do Lambda. Você também pode configurar grupos de registros personalizados usando os comandos UpdateFunctionConfigurationda API Lambda CreateFunctione o recurso AWS Serverless Application Model (AWS SAM) AWS: :Serverless: :Function.

Você pode configurar várias funções do Lambda para enviar registros para o mesmo grupo de CloudWatch registros. Por exemplo, é possível usar um único grupo de logs para armazenar os logs de todas as funções do Lambda que fizerem parte de uma aplicação específica. Quando você usa um grupo de logs personalizado para uma função do Lambda, os fluxos de log criados pelo Lambda incluem o nome e a versão da função. Isso garante que o mapeamento entre mensagens de log e funções seja preservado, mesmo se você usar o mesmo grupo de logs para várias funções.

O formato de nomenclatura do fluxo de log para grupos de registros personalizados segue esta convenção:

YYYY/MM/DD/<function_name>[<function_version>][<execution_environment_GUID>]

Observe que, ao configurar um grupo de registros personalizado, o nome selecionado para seu grupo de registros deve seguir as regras de nomenclatura de CloudWatch registros. Além disso, nomes de grupos de logs personalizados não devem começar com a string aws/. Se você criar um grupo de logs personalizado começando com aws/, o Lambda não conseguirá criar o grupo de logs. Como resultado disso, os registros da sua função não serão enviados para CloudWatch.

Alterar o grupo de logs de uma função (console)
  1. Abra a página Funções do console do Lambda.

  2. Escolha uma função.

  3. Na página de configuração da função, escolha Ferramentas de monitoramento e operações.

  4. No painel Configuração de registro em log, escolha Editar.

  5. No painel Grupo de registros, em Grupo de CloudWatch registros, escolha Personalizado.

  6. Em Grupo de registros personalizados, insira o nome do grupo de CloudWatch registros para o qual você deseja que sua função envie registros. Se você inserir o nome de um grupo de logs existente, sua função usará esse grupo. Se não existir nenhum grupo de logs com o nome inserido, o Lambda criará um novo grupo de logs para a função com esse nome.

Alterar o grupo de logs de uma função (AWS CLI)
  • Para alterar o grupo de logs de uma função existente, use o comando update-function-configuration. Se você especificar o nome de um grupo de logs existente, sua função usará esse grupo. Se não existir nenhum grupo de logs com o nome especificado, o Lambda criará um novo grupo de logs para a função com esse nome.

    aws lambda update-function-configuration \ --function-name myFunction --log-group myLogGroup
Especificar um grupo de logs personalizado ao criar uma função (AWS CLI)
  • Para especificar um grupo de logs personalizado ao criar uma nova função do Lambda usando a AWS CLI, use a opção --log-group. Se você especificar o nome de um grupo de logs existente, sua função usará esse grupo. Se não existir nenhum grupo de logs com o nome especificado, o Lambda criará um novo grupo de logs para a função com esse nome.

    O comando de exemplo a seguir cria uma função do Lambda para Node.js que envia logs para um grupo de logs denominado myLogGroup.

    aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --log-group myLogGroup

Permissões da função de execução

Para que sua função envie registros para o CloudWatch Logs, ela precisa ter a logs:PutLogEventspermissão. Quando você configura o grupo de logs da função usando o console do Lambda, se a função não tiver essa permissão, o Lambda a adiciona por padrão ao perfil de execução da função. Quando o Lambda adiciona essa permissão, ele concede à função permissão para enviar registros para qualquer grupo de registros de CloudWatch registros.

Para evitar que o Lambda atualize automaticamente o perfil de execução da função e o edite manualmente, expanda Permissões e desmarque Adicionar permissões necessárias.

Quando você configura o grupo de logs da função usando a AWS CLI, o Lambda não adiciona automaticamente a permissão logs:PutLogEvents. Adicione a permissão ao perfil de execução da função, caso isso ainda não tenha sido feito. Essa permissão está incluída na política AWSLambdaBasicExecutionRolegerenciada.

Acesso a logs com o console do Lambda

Para visualizar os logs usando o console do Lambda
  1. Abra a página Funções do console do Lambda.

  2. Escolha uma função.

  3. Escolha Monitor.

  4. Escolha Exibir logins CloudWatch.

Acesso a logs com a AWS CLI

O AWS CLI é uma ferramenta de código aberto que permite interagir com os serviços do AWS usando comandos no shell da linha de comando. Para executar as etapas desta seção, você deve ter o seguinte:

Você pode usar a AWS CLI para recuperar logs de uma invocação usando a opção de comando --log-type. A resposta contém um campo LogResult com até 4 KB de logs codificados em base64 obtidos da invocação.

exemplo recuperar um ID de log

O exemplo a seguir mostra como recuperar um ID de log do campo LogResult para uma função chamada my-function.

aws lambda invoke --function-name my-function out --log-type Tail

A seguinte saída deverá ser mostrada:

{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }
exemplo decodificar os logs

No mesmo prompt de comando, use o utilitário base64 para decodificar os logs. O exemplo a seguir mostra como recuperar logs codificados em base64 de my-function.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode

A opção cli-binary-format será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute aws configure set cli-binary-format raw-in-base64-out. Para obter mais informações, consulte A AWS CLI comporta opções de linha de comando globais no Guia do usuário da AWS Command Line Interface versão 2.

A seguinte saída deverá ser mostrada:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

O utilitário base64 está disponível no Linux, macOS e Ubuntu no Windows. Os usuários do macOS precisam usar base64 -D.

exemplo get-logs.sh script

No mesmo prompt de comando, use o script a seguir para fazer download dos últimos cinco eventos de log. O script usa sed para remover as aspas do arquivo de saída e fica inativo por 15 segundos para que os logs tenham tempo de ficar disponíveis. A saída inclui a resposta do Lambda, e a saída do comando get-log-events.

Copie o conteúdo do exemplo de código a seguir e salve no diretório de seu projeto do Lambda como get-logs.sh.

A opção cli-binary-format será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute aws configure set cli-binary-format raw-in-base64-out. Para obter mais informações, consulte A AWS CLI comporta opções de linha de comando globais no Guia do usuário da AWS Command Line Interface versão 2.

#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name stream1 --limit 5
exemplo macOS e Linux (somente)

No mesmo prompt de comando, os usuários do macOS e do Linux podem precisar executar o comando a seguir para garantir que o script seja executável.

chmod -R 755 get-logs.sh
exemplo recuperar os últimos cinco eventos de log

No mesmo prompt de comando, execute o script a seguir para obter os últimos cinco eventos de log.

./get-logs.sh

A seguinte saída deverá ser mostrada:

{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

Registro em log da função de runtime

Para depurar e validar que seu código está funcionando conforme o esperado, é possível gerar logs com a funcionalidade de registro em log padrão para sua linguagem de programação. O tempo de execução do Lambda carrega a saída de log da sua função para Logs. CloudWatch Para obter instruções específicas de linguagem, consulte os tópicos a seguir:

Próximas etapas