Registro em log da função do AWS Lambda em Go - 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á.

Registro em log da função do AWS Lambda em Go

AWS Lambdamonitora automaticamente as funções do Lambda em seu nome e envia registros para a Amazon. CloudWatch Sua função Lambda vem com um grupo de CloudWatch registros de registros e um fluxo de registros para cada instância de sua função. O ambiente do runtime do Lambda envia detalhes sobre cada invocação à transmissão de logs e transmite os logs e outras saídas do código de sua função. Para ter mais informações, consulte Usando CloudWatch registros da Amazon com AWS Lambda.

Esta página descreve como produzir uma saída de log a partir do código da sua função Lambda ou acessar registros usando o AWS Command Line Interface console Lambda ou o console. CloudWatch

Criar uma função que retorna logs

Para gerar os logs do código de função, você pode usar métodos no pacote fmt ou qualquer biblioteca de logs que grave em stdout ou em stderr. O exemplo a seguir usa o pacote de logs.

exemplo main.go: registro em log
func handleRequest(ctx context.Context, event events.SQSEvent) (string, error) { // event eventJson, _ := json.MarshalIndent(event, "", " ") log.Printf("EVENT: %s", eventJson) // environment variables log.Printf("REGION: %s", os.Getenv("AWS_REGION")) log.Println("ALL ENV VARS:") for _, element := range os.Environ() { log.Println(element) }
exemplo formato do log
START RequestId: dbda340c-xmpl-4031-8810-11bb609b4c71 Version: $LATEST 2020/03/27 03:40:05 EVENT: { "Records": [ { "messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78", "receiptHandle": "MessageReceiptHandle", "body": "Hello from SQS!", "md5OfBody": "7b27xmplb47ff90a553787216d55d91d", "md5OfMessageAttributes": "", "attributes": { "ApproximateFirstReceiveTimestamp": "1523232000001", "ApproximateReceiveCount": "1", "SenderId": "123456789012", "SentTimestamp": "1523232000000" }, ... 2020/03/27 03:40:05 AWS_LAMBDA_LOG_STREAM_NAME=2020/03/27/[$LATEST]569cxmplc3c34c7489e6a97ad08b4419 2020/03/27 03:40:05 AWS_LAMBDA_FUNCTION_NAME=blank-go-function-9DV3XMPL6XBC 2020/03/27 03:40:05 AWS_LAMBDA_FUNCTION_MEMORY_SIZE=128 2020/03/27 03:40:05 AWS_LAMBDA_FUNCTION_VERSION=$LATEST 2020/03/27 03:40:05 AWS_EXECUTION_ENV=AWS_Lambda_go1.x END RequestId: dbda340c-xmpl-4031-8810-11bb609b4c71 REPORT RequestId: dbda340c-xmpl-4031-8810-11bb609b4c71 Duration: 38.66 ms Billed Duration: 39 ms Memory Size: 128 MB Max Memory Used: 54 MB Init Duration: 203.69 ms XRAY TraceId: 1-5e7d7595-212fxmpl9ee07c4884191322 SegmentId: 42ffxmpl0645f474 Sampled: true

O runtime do Go registra em log as linhas START, END e REPORT para cada invocação. A linha do relatório fornece os detalhes a seguir.

RELATAR campos de dados de linha
  • RequestId— O ID exclusivo da solicitação para a invocação.

  • Duração: a quantidade de tempo que o método de manipulador da função gastou processando o evento.

  • Duração faturada: a quantia de tempo faturada para a invocação.

  • Tamanho da memória: a quantidade de memória alocada para a função.

  • Memória máxima utilizada: a quantidade de memória utilizada pela função.

  • Duração inicial: para a primeira solicitação atendida, a quantidade de tempo que o runtime levou para carregar a função e executar o código fora do método do handler.

  • XRAY TraceId — Para solicitações rastreadas, o ID de AWS X-Rayrastreamento.

  • SegmentId— Para solicitações rastreadas, o ID do segmento X-Ray.

  • Amostragem: para solicitações rastreadas, o resultado da amostragem.

Usar o console do Lambda

Você pode usar o console do Lambda para exibir a saída do log depois de invocar uma função do Lambda.

Se seu código puder ser testado no editor de Código incorporado, você encontrará logs nos resultados de execução. Ao usar o recurso de teste do console para invocar uma função, você encontrará Saída de log na seção Detalhes.

Usando o CloudWatch console

Você pode usar o CloudWatch console da Amazon para visualizar os registros de todas as invocações da função Lambda.

Para ver os registros no CloudWatch console
  1. Abra a página Grupos de registros no CloudWatch console.

  2. Escolha o grupo de registros para sua função (/aws/lambda/ your-function-name).

  3. Escolha um stream de logs.

Cada fluxo de log corresponde a uma instância da sua função. Uma transmissão de logs é exibida quando você atualiza sua função do Lambda e quando mais instâncias são criadas para lidar com várias invocações simultâneas. Para localizar logs de uma invocação específica, recomendamos intrumentar sua função com AWS X-Ray. O X-Ray registra detalhes sobre a solicitação e o stream de logs no rastreamento.

Para usar uma aplicação de exemplo que correlaciona os logs e os rastreamentos com o X-Ray, consulte Aplicativo de exemplo de processador de erros para o AWS Lambda.

Usar a AWS Command Line Interface (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" }

Excluir logs

Os grupos de logs não são excluídos automaticamente excluídos quando você exclui uma função. Para evitar armazenar logs indefinidamente, exclua o grupo de logs ouConfigurar um período de retençãoapós o qual os logs são excluídos automaticamente.