Registrar em log e monitorar funções do Lambda em Go
O AWS Lambda monitora automaticamente as funções do Lambda em seu nome e envia logs para o Amazon CloudWatch. Sua função do Lambda vem com um grupo de logs do CloudWatch Logs e uma transmissão de logs 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 Usar os logs do CloudWatch Logs com o Lambda.
Esta página descreve como produzir saída em log usando o código de função do Lambda e como acessar os logs usando a AWS Command Line Interface, o console do Lambda ou o console do CloudWatch.
Seções
Criar uma função que retorna logs
Para gerar os logs do código de função, você pode usar métodos no pacote fmtstdout
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 de solicitação exclusivo 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. Quando as invocações compartilham um ambiente de execução, o Lambda relata a memória máxima usada em todas as invocações. Esse comportamento pode resultar em um valor relatado maior do que o esperado.
-
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 rastreamento do AWS X-Ray.
-
SegmentId: para solicitações rastreadas, o ID do segmento do X-Ray.
-
Amostragem: para solicitações rastreadas, o resultado da amostragem.
Visualizar logs no 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.
Visualização de logs no console do CloudWatch
Você pode usar o console do Amazon CloudWatch para exibir registros de todas as invocações da função do Lambda.
Para visualizar logs no console do CloudWatch
-
No console do Amazon CloudWatch, abra a página Log groups
(Grupos de log). -
Escolha o grupo de logs de sua função (/aws/lambda/
nome-de-sua-função
). -
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.
Visualizar logs usando 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 concluir as etapas desta seção, você deve ter a versão 2 da AWS CLI.
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 Windowsbase64 -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-namestream1
--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.