lambda python aws_Python 中的 AWS Lambda 函数日志记录 - AWS Lambda

Python 中的 AWS Lambda 函数日志记录

您的 Lambda 函数带有一个 CloudWatch Logs 日志组,其中包含您的函数的每个实例的日志流。运行时会将每个调用的详细信息发送到该日志流,然后中继日志和来自您的函数代码的其他输出。

要从函数代码输出日志,您可以使用 print 方法或使用写入到 stdout 或 stderr 的任何日志记录库。以下示例记录环境变量和事件对象的值。

例 lambda_function.py

import os

def lambda_handler(event, context):

print('## ENVIRONMENT VARIABLES')

print(os.environ)

print('## EVENT')

print(event)

例 日志格式

START RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95 Version: $LATEST

## ENVIRONMENT VARIABLES

environ({'AWS_LAMBDA_LOG_GROUP_NAME': '/aws/lambda/my-function', 'AWS_LAMBDA_LOG_STREAM_NAME': '2020/01/31/[$LATEST]3893xmpl7fac4485b47bb75b671a283c', 'AWS_LAMBDA_FUNCTION_NAME': 'my-function', ...})

## EVENT

{'key': 'value'}

END RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95

REPORT RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95 Duration: 15.74 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 56 MB Init Duration: 130.49 ms

XRAY TraceId: 1-5e34a614-10bdxmplf1fb44f07bc535a1 SegmentId: 07f5xmpl2d1f6f85 Sampled: true

Python 运行时记录每次调用的 START、END 和 REPORT 行。报告行提供了以下详细信息。

报告日志

RequestId – 调用的唯一请求 ID。

Duration (持续时间) – 函数的处理程序方法处理事件所花费的时间。

Billed Duration (计费持续时间) – 针对调用计费的时间量。

Memory Size (内存大小) – 分配给函数的内存量。

Max Memory Used (最大内存使用量) – 函数使用的内存量。

Init Duration (初始持续时间) – 对于提供的第一个请求,为运行时在处理程序方法外部加载函数和运行代码所花费的时间。

XRAY TraceId – 对于跟踪的请求,为 AWS X-Ray 跟踪 ID。

SegmentId – 对于跟踪的请求,为 X-Ray 分段 ID。

Sampled (采样) – 对于跟踪的请求,为采样结果。

您可以在 Lambda 控制台中、在 CloudWatch Logs 控制台中或从命令行查看日志。

在 AWS 管理控制台中查看日志

当您在函数配置页上测试函数时,Lambda 控制台会显示日志输出。要查看所有调用的日志,请使用 CloudWatch Logs 控制台。

查看 Lambda 函数的日志

选择您的函数 (/aws/lambda/function-name) 的日志组。

选择列表中的第一个流。

每个日志流对应一个函数实例。当您更新函数以及创建更多实例以处理多个并发调用时,会显示新的流。要找到特定调用的日志,您可以使用 X-Ray 分析您的函数并在跟踪中记录有关请求和日志流的详细信息。如需将日志和跟踪与

X-Ray 相关联的示例应用程序,请参阅AWS Lambda 错误处理器示例应用程序。

使用 AWS CLI

要从命令行获取调用的日志,请使用 --log-type 选项。响应包含一个 LogResult 字段,该字段包含来自调用的多达 4 KB 的 base64 编码日志。

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

{

"StatusCode": 200,

"LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",

"ExecutedVersion": "$LATEST"

}

您可以使用 base64 实用程序来解码日志。

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

--query 'LogResult' --output text | base64 -d

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: 100 ms Memory Size: 128 MB Max Memory Used: 73 MB

base64 实用工具在 Linux、macOS 和 Ubuntu on Windows 上可用。对于 macOS,命令为 base64 -D。

要从命令行获取完整的日志事件,您可以在函数输出中包含日志流名称,如上例中所示。以下示例脚本调用名为 my-function 的函数并下载最后 5 个日志事件。

例 get-logs.sh 脚本

此示例要求 my-function 返回日志流 ID。#!/bin/bash

aws lambda invoke --function-name my-function --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 $(cat out) --limit 5

此脚本使用 sed 从输出文件中删除引号,并休眠 15 秒以等待日志可用。输出包括来自 Lambda 的响应,以及来自 get-log-events 命令的输出。

$ ./get-logs.sh

{

"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: 100 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n",

"ingestionTime": 1559763018353

}

],

"nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795",

"nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080"

}

删除日志

在删除函数时,不会自动删除日志组。为避免存储无限的日志,请删除日志组或者配置保留期,在该期限后会自动删除日志。

日志记录库

如需更详细的日志,请使用日志记录库。

import os

import logging

logger = logging.getLogger()

logger.setLevel(logging.INFO)

def lambda_handler(event, context):

logger.info('## ENVIRONMENT VARIABLES')

logger.info(os.environ)

logger.info('## EVENT')

logger.info(event)

logger 的输出包括日志级别、时间戳和请求 ID。

START RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125 Version: $LATEST

[INFO] 2020-01-31T22:12:58.534Z 1c8df7d3-xmpl-46da-9778-518e6eca8125 ## ENVIRONMENT VARIABLES

[INFO] 2020-01-31T22:12:58.534Z 1c8df7d3-xmpl-46da-9778-518e6eca8125 environ({'AWS_LAMBDA_LOG_GROUP_NAME': '/aws/lambda/my-function', 'AWS_LAMBDA_LOG_STREAM_NAME': '2020/01/31/[$LATEST]1bbe51xmplb34a2788dbaa7433b0aa4d', 'AWS_LAMBDA_FUNCTION_NAME': 'my-function', ...})

[INFO] 2020-01-31T22:12:58.535Z 1c8df7d3-xmpl-46da-9778-518e6eca8125 ## EVENT

[INFO] 2020-01-31T22:12:58.535Z 1c8df7d3-xmpl-46da-9778-518e6eca8125 {'key': 'value'}

END RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125

REPORT RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125 Duration: 2.75 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 56 MB Init Duration: 113.51 ms

XRAY TraceId: 1-5e34a66a-474xmpl7c2534a87870b4370 SegmentId: 073cxmpl3e442861 Sampled: true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值