如何在已部署的 Lambda 函数中查看 console.log 语句

How to see console.log statements in deployed Lambda function

我开始尝试使用 node 和 puppeteer 编写 lambda 函数。我正在使用无服务器框架

我一直在努力关注 https://codissimo.sinumo.tech/2019/12/27/serverless-puppeteer-with-aws-lambda-layers-and-node-js/ to utilize the provisioned chrome at https://github.com/shelfio/chrome-aws-lambda-layer。我的功能在本地按预期工作。

我的 handler.js 包含:

module.exports.main = async event => {
    console.log('IN HANDLER');

  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'main function executed!',
        input: event,
      },
      null,
      2
    ),
  };

my index.js 包含一个 long运行ning(45-60 秒)木偶函数(main),其中 returns 一个对象数组:

async function main(event, context, callback) {
  const chromium = require('chrome-aws-lambda');

 ...................................

 var obj_arr = [];
  var keys = head[0];
  for (let index = 0; index < body.length; index++) {
    var row = body[index];
    var obj = {};
    for (let i = 0; i < keys.length; i++) {
      var k = keys[i];
      obj[k] = row[i];
      console.log(obj);

    }
    obj_arr.push(obj);

  };

  console.log(obj_arr);
  return obj_arr;

使用无服务器框架将我的函数上传到 lambda 后没有错误。我遵循了文章底部关于在我的图层仪表板中测试预配置 chrome 的说明。正如您在屏幕截图中所见,它似乎工作正常。

作为全新的我不明白日志输出:

START RequestId: f62dcf47-e2ff-4a96-9807-b34c39f218e3 Version: $LATEST
2020-05-31T19:10:21.280Z    f62dcf47-e2ff-4a96-9807-b34c39f218e3    INFO    SERVERLESS_ENTERPRISE {"c":true,"b":"H4sIAAAAAAAAA7VWbU/cOBD+Kyi6D3fSJms7ifNSIR1aoK1UKsouVe+ADyZxdlMSO9gJL0X732+cZF9ZEJzUL7CZeTyemWf82E+WVPk0F1Zs6ULbbMpFbQ0sncx4yb5zpXNpfMhBYK3zkuualRVYCCLIRr7t4gmOYoxigh0ShP8CTPHbBnCfU4BllKRJ5gU2J1lmeyyidhSiwL52vcSNMoJD7prIjxUHdK2Y0CypzaYDq2KPhWQQ5anPZ9KhtK0rJl7MUlZcMRPiKys7+FpYO2vEIj6UoupJ3oJ2l+OZcrhIXwW1NadNt6cVuw5ClAQuxIcsR1LU/KE2NUAWCX9PU8z6Fo+J5+IsRLYbUNf2QopsljFkezhKSYhpwMNrwD9MljucSVnvY9vnqYcwTgDpRiRKeeZSlvihl0VeSpIo+XDKFDC+j9yMJggSSVOCvYR/GAPLBU/3kTUHdthU72Dhpbb+z9lpmy3V1BQgmqIYWKyqijzZ4JIXBVdmE67u8oSvmesZL5hIhbzvqJ0unCm/A8siwZ0rbMDYJctFn6hsgDE6sBJZVk3N+4rZvXYKVl6nzFq6zhpRd8Ox8jpCpvyndjBxMHXcNTCfdi1ptM2Zrm288p3wUqrHcf7LxMKIeNuuc80Ns0+XltL6EuYsotSn1BtcWjPOqomsWQFmjJChmvZmswqslLoB8kIwwjByJToojjANw/n2TqdcJTAU0MFuT+T4oR+5gb/EmamGbnF1XnXVI6iUBL7nmrnvQZ/1SBbp2BwyK65Vw1ceAfwIGFVxJzt6RxL6CBmtdmh0Lcvx5sD1PhtabW8Tsb5ge/Y2IMdvHYSdq1ah//hyMDkaT7aBB8o4mRIxZBl3WcZLvmPs+6ZN1EUejRczGb8xidfmp0O8MkUdwLT8hq+O2Gbu9/rs/dq9EeLHb9GgrU2+yOlHJZuqp3AInR52nR6+sZMQYVwrzso+hFGkIfKHLh5e9MReURJGDLtpkEQIimchYYTD34S51zjJyHbMI3F3WrA6k6qEiEUumocdkAOVzMD9QJ9RA86OvvYow2EgOIJJ8T3vJeCx4tyc+MAPgBhMn+NGVQPKbV2AapQgSubUX1qf4Uoq/jz7a+8Hl8L8P1Uy4VpLtff3HnF89PHTr0sLtEJXvFUP4iMEn62EwycEa0B/WwVpHQKUGL7MT/1oEL7b2vO0MHYSwqh0IXJ1a4Dz+eA3ZdQ7nmVEvK2MCA42M7oyV/0dDGIvN424gQkSS+vb7q8WO5YNKOjiiLWmXp6MqC6vJK6UVKuj2H4es5b7NcuoKSqV1xu2o4eEV0Y5ulx3eU6gfe1mu5yQR3LTvkcW/rW7/D1PjpoLJjq1kG3kmYQ2YaNLcHmf58ZRfvqZfvNn3yYn9+NDF539g5cLO8D3sNCH09vR4bFOk1l0gkzkqmjgWbqSW9ehThu3NqdjDE8jbfh976sKXjOFbF8z8+6BBT8vrhYct++ci6v5/D/G0CmZFwsAAA==","origin":"sls-agent"}
END RequestId: f62dcf47-e2ff-4a96-9807-b34c39f218e3
REPORT RequestId: f62dcf47-e2ff-4a96-9807-b34c39f218e3  Duration: 14.09 ms  Billed Duration: 100 ms Memory Size: 1024 MB    Max Memory Used: 71 MB  Init Duration: 190.72 ms  

当我 运行 我通过 api 网关部署的函数时,我得到了类似的日志输出但是我在本地函数中没有看到 console.log 我能够看到console.log 语句或我在本地 运行 时看到的返回对象数组。当我 运行 它时,如何在我部署的 lambda 函数中看到它们?

编辑:

我已经添加了我认为您所指内容的屏幕截图。我没有看到我在本地看到的控制台记录输出。你能进一步解释一下还是我找错地方了?

编辑 1:

{ origin: 'sls-agent',
  schemaVersion: '0.0',
  timestamp: '2020-06-03T13:13:52.763Z',
  requestId: 'f4a4cb9b-3e09-46d3-adba-6f14753cdce3',
  type: 'transaction',
  payload:
   { schemaType: 's-span',
     .....
     tags:
      { schemaType: 's-transaction-function',
        schemaVersion: '0.0',
        timestamp: '2020-06-03T13:13:52.758Z',
        orgId: null,
        applicationName: 'xxxx',
        serviceName: 'xxxxxx',
        stageName: 'dev',
        functionName: 'xxxxx-dev-main',
        timeout: 6,
        computeType: 'aws.lambda',
        computeRuntime: 'aws.lambda.nodejs.12.16.3',
        computeRegion: 'us-east-1',
        computeMemorySize: '1024',
        computeMemoryUsed:
         '{"rss":39337984,"heapTotal":10039296,"heapUsed":6716000,"external":1191688}',
         ......
        eventCustomRequestTime: '03/Jun/2020:13:13:51 +0000',
        eventCustomRequestTimeEpoch: 1591190031809,
        eventCustomHttpPath: '/main/get',
        eventCustomHttpMethod: 'GET',
        eventCustomXTraceId: 'Root=1-5ed7a20f-9a64d880002f1600092ec680',
        eventCustomXForwardedFor: null,
        eventCustomUserAgent:
         'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0',
        errorId: null,
        errorFatal: null,
        errorCulprit: null,
        errorExceptionType: null,
        errorExceptionMessage: null,
        errorExceptionStacktrace: null,
        transactionId: '77fef8cb-3f2c-4f5a-be2c-7fcd51e9ed92',
        tenantId: 'option88',
        appUid: 'mHjdQ5hQ0RY1',
        tenantUid: 'V8lsDgch9M0b',
        pluginVersion: '3.6.11',
        totalSpans: 0,
        traceId: 'f4a4cb9b-3e09-46d3-adba-6f14753cdce3' },
     logs: {},
     spans: [],
     eventTags: [] } }

编辑2:

编辑 3:

我将处理程序更改为:

'use strict';
var index = require('./index.js');

module.exports.main = async event => {
  var res = await index.main();

  console.log('hello');
  console.log(res);

  console.log('IN HANDLER');
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'main function executed!',
        input: event,
      },
      null,
      2
    ),
  };


};

现在看到错误消息。

这些可在 CloudWatch 日志中访问。

如果您在执行 Lambda 的区域访问,它应该有一个 /aws/lambda/functionname.

的日志组

然后是保存修改的流

您的 Lambda 函数写入 CloudWatch 的日志似乎是 Base64 编码并使用 gzip 格式压缩。这看起来像是 issues regarding high costs for CloudWatch 打开后无服务器企业插件的行为。

要检索原始日志,您可以尝试运行以下Node.js代码并传入编码后的日志字符串。

function getReadableLogs(encodedLogs) {
    const decodedLog = Buffer.from(encodedLogs, 'base64'); // Decode log data
    const parsed = JSON.parse(zlib.gunzipSync(decodedLog).toString('utf8')); // Decompress log data
    return parsed;
}