如何在AWS环境中查看stdout?

时间:2019-07-13 19:30:36

标签: node.js linux aws-lambda stdout aws-serverless

下面是lambda函数:

exports.lendingLambdaHandler = async (event, context) => {
    const records = event.Records

    console.log(records)

    return {}
};

由NodeJS运行时(作为无服务器应用程序)执行,将进入的事件记录写入stdout

根据定义,console.log打印到stdout,如here所述,但是我需要查看云监视日志,因为这是AWS无服务器应用程序:

enter image description here


在AWS环境中查看stdout的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

这是在AWS Lambda中处理日志记录的标准方法。快速浏览一下文档,显示没有可用的其他配置选项。

也就是说,有些事情可能对您更好。

在您的终端中查看日志:

aws lambda invoke --function-name YOUR_FUNCTION out --log-type Tail

将Cloudwatch日志流传输到另一个服务: Link to article

使用流传输方法可以为您提供更多控制权,让您将日志发送到其他服务,或者自定义日志记录格式并将其保存在所需的任何位置。

参考:

AWS Lambda Docs

答案 1 :(得分:1)

Lambda函数是无服务器的,但这并不意味着没有服务器在运行您的lambda函数,它的真正意思是您根本看不到该服务器,也不必进行任何管理。 / p>

当您调用lambda函数时,有一群服务器等待启动新的docker容器,在其中将执行lambda函数(如果不断调用lambda函数,则重用现有的执行上下文),底部这行代码是stdout(如果lambda与您在本地运行代码(或在您有权访问的服务器上)运行的代码相同)stdout,不同之处在于您没有访问权限到您将在其中观察到的基础Docker容器。因此,日志也将发送到CW日志,以便您可以访问它们。

在AWS环境中查看stdout的正确方法是什么?

正如我所提到的,您无权访问执行lambda函数的基础容器,因此访问日志的正确方法是通过CW日志。当然,您可以选择根据需要或用例将日志从CW流式传输到任何其他服务。

答案 2 :(得分:0)

这应该可行,因为您不必创建输出文件并直接从stdout读取日志:

aws lambda invoke --function-name LAMBDA_FUNCTION_NAME \
                  --log-type Tail /dev/null \
                  --query 'LogResult' \
                  --output text | base64 -d

如果您需要指定配置文件名称:

aws lambda invoke --function-name LAMBDA_FUNCTION_NAME \
                  --log-type Tail /dev/null \
                  --query 'LogResult' \
                  --output text \
                  --profile PROFILE_NAME | base64 -d