使用AWSCLI的AWS Lambda日志:如何使用AWSCLI访问Lambda日志?

sky*_*unk 5 logging amazon-web-services aws-cli aws-lambda

我在ubuntu ec2实例上使用awscli尝试使用AWS Lambda,但我无法访问aws控制台.请注意,我没有使用无服务器或zapper,我直接压缩我的main.py文件以及此处提到的依赖项文件

我像这样运行这个函数

aws lambda invoke --function-name python-test --invocation-type RequestResponse outfile.txt

outfile中给出的错误非常模糊,在调试时没有帮助,而是让我更加困惑.使用管理员的系统,我能够在控制台上运行测试时识别错误,但如何使用awscli检查这些日志?

所以,我试图运行aws cloudwatch list-metrics > cloudwatch_logs.log ,并在cloudwatch_logs.log文件搜索功能名称"蟒蛇测试",我能找到Namespace,MetricName,Dimensions对于这个功能,但你如何访问这些日志?

任何有关类似示例链接的帮助都非常感谢!

Joh*_*ein 18

首先,获取日志组名称:

aws logs describe-log-groups --query logGroups[*].logGroupName
[
    "/aws/lambda/MyFunction"
]
Run Code Online (Sandbox Code Playgroud)

然后,列出该日志组的日志流:

aws logs describe-log-streams --log-group-name '/aws/lambda/MyFunction' --query logStreams[*].logStreamName

[
    "2018/02/07/[$LATEST]140c61ffd59442b7b8405dc91d708fdc"
]
Run Code Online (Sandbox Code Playgroud)

最后,获取该流的日志事件:

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: $LATEST\n"
        }, 
        {
            "ingestionTime": 1517965424581, 
            "timestamp": 1517965424567, 
            "message": "END RequestId: bca9c478-0ba2-11e8-81db-4bccfc644168\n"
        }, 
        {
            "ingestionTime": 1517965424581, 
            "timestamp": 1517965424567, 
            "message": "REPORT RequestId: bca9c478-0ba2-11e8-81db-4bccfc644168\tDuration: 3055.39 ms\tBilled Duration: 3100 ms \tMemory Size: 128 MB\tMax Memory Used: 35 MB\t\n"
        }
    ], 
    "nextBackwardToken": "b/33851760085631457914695824538087252860391482425578356736"
}
Run Code Online (Sandbox Code Playgroud)


cha*_*han 9

jq口味:

列出 AWS lambda 组名称(如果列表太大,您可能需要使用grep对其进行过滤):

aws logs describe-log-groups | jq -r ".logGroups[].logGroupName"
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

您可能想将其放入logs.sh文件中。

如果您想要更多或其他流,您可能需要调整该.logStreams[0]部分