如何在已部署的 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;
}
我开始尝试使用 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;
}