我试图在 ubuntu ec2 实例上使用 awscli 使用 AWS Lambda,但我无法访问 aws 控制台。请注意,我没有使用无服务器或 zapper,我直接将我的 main.py 文件与依赖项文件一起压缩,如此处所述
我像这样运行函数
aws lambda invoke --function-name python-test --invocation-type RequestResponse outfile.txt
输出文件中给出的错误非常模糊,对调试没有帮助,而是让我更加困惑。使用管理员的系统,当我在控制台上运行测试时,我能够识别错误,但是如何使用 awscli 检查这些日志?
所以我试着跑aws cloudwatch list-metrics > cloudwatch_logs.log
并在cloudwatch_logs.log文件中搜索函数名称"python-test",我能够找到该函数的Namespace
、MetricName
、Dimensions
,但是您如何访问日志?
任何关于类似示例链接的帮助,非常感谢!
首先,获取日志组名称:
aws logs describe-log-groups --query logGroups[*].logGroupName
[
"/aws/lambda/MyFunction"
]
然后,列出该日志组的日志流:
aws logs describe-log-streams --log-group-name '/aws/lambda/MyFunction' --query logStreams[*].logStreamName
[
"2018/02/07/[$LATEST]140c61ffd59442b7b8405dc91d708fdc"
]
最后,获取该流的日志事件:
aws logs get-log-events --log-group-name '/aws/lambda/MyFunction' --log-stream-name '2018/02/07/[$LATEST]140c61ffd59442b7b8405dc91d708fdc'
{
"nextForwardToken": "f/33851760153448034063427449515194237355552440866456338433",
"events": [
{
"ingestionTime": 1517965421523,
"timestamp": 1517965421526,
"message": "START RequestId: bca9c478-0ba2-11e8-81db-4bccfc644168 Version: $LATESTn"
},
{
"ingestionTime": 1517965424581,
"timestamp": 1517965424567,
"message": "END RequestId: bca9c478-0ba2-11e8-81db-4bccfc644168n"
},
{
"ingestionTime": 1517965424581,
"timestamp": 1517965424567,
"message": "REPORT RequestId: bca9c478-0ba2-11e8-81db-4bccfc644168tDuration: 3055.39 mstBilled Duration: 3100 ms tMemory Size: 128 MBtMax Memory Used: 35 MBtn"
}
],
"nextBackwardToken": "b/33851760085631457914695824538087252860391482425578356736"
}
jq flavor
:列出 AWS lambda 组名称(如果列表太大,您可能需要使用 grep 对其进行筛选(:
aws logs describe-log-groups | jq -r ".logGroups[].logGroupName"
然后使用以下命令从最新流中读取message
属性:
LOG_GROUP_NAME="/aws/lambda/awesomeFunction"
LOG_STREAM_NAME=$(aws logs describe-log-streams --log-group-name "${LOG_GROUP_NAME}" | jq -r '.logStreams | sort_by(.creationTime) | .[-1].logStreamName')
aws logs get-log-events --log-group-name "${LOG_GROUP_NAME}" --log-stream-name "${LOG_STREAM_NAME}" | jq -r '.events[] | select(has("message")) | .message'
您可能希望将其放在logs.sh
文件中。
如果您想要更多或其他流,您可能需要调整.logStreams[0]
部分
使用 AWS CLI 可能会有点烦人,因为流名称会随着您修改函数而更改。我发现使用 awslogs (https://github.com/jorgebastida/awslogs( 是一个更好的工作流程。
列出组:
awslogs groups
筛选结果。
awslogs groups|grep myfunction
然后从组获取日志。
awslogs get /aws/lambda/ShortenStack-mutationShortenLambdaBC1758AD-6KW0KAD3TYVE
它默认为最后 5 分钟,但您可以添加 -s 参数来选择时间,例如-s 10m
最后 10 分钟。
如果您在终端上,输出是彩色的,或者如果您通过其他命令(例如 grep 查找某些东西(进行管道传输,则输出是普通的。