Filtragem em nível de log - AWS Lambda

Filtragem em nível de log

O Lambda pode filtrar os logs da função para que somente logs de um determinado nível de detalhes, ou de um nível inferior, sejam enviados para o CloudWatch 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": "2024-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.

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 log, o Lambda envia logs desse nível, e de níveis inferiores, para o 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 automaticamente as mensagens de log "start" e "report" 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 CreateFunction e UpdateFunctionConfiguration da API do Lambda, o recurso AWS::Serverless::Function do AWS Serverless Application Model (AWS SAM) e o recurso AWS::Lambda::Function do AWS CloudFormation.

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. Use --logging-config para definir SystemLogLevel como um destes: DEBUG, INFO ou WARN. Defina ApplicationLogLevel como DEBUG, INFO, WARN, ERROR ou FATAL.

    aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogFormat=JSON,ApplicationLogLevel=ERROR,SystemLogLevel=WARN
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 função, use --logging-config para definir as chaves SystemLogLevel e ApplicationLogLevel no comando create-function. Defina SystemLogLevel como DEBUG, INFO ou WARN. Defina ApplicationLogLevel como DEBUG, INFO, WARN, ERROR ou FATAL.

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

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!=on-demand INFO
initReport initializationType=on-demand 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

Acessar dados de telemetria em tempo real para extensões usando a API Telemetria sempre emite o conjunto completo de eventos da plataforma. Configurar o nível dos logs do sistema enviados pelo Lambda para o CloudWatch 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.