树莓派AWS Rekognition机器人:Lambda函数卡顿,如何创建日志调试?
给AWS Lambda函数添加日志排查代码卡顿问题
嘿,我来帮你搞定Lambda日志的事儿!你现在要排查代码卡顿,其实AWS Lambda自带的CloudWatch日志就能轻松定位问题,咱们只需要在代码里的关键节点埋点输出日志就行,具体操作如下:
1. 在代码关键位置添加日志
你需要在函数启动、调用外部服务(比如Rekognition、SNS、树莓派接口)的前后、变量赋值完成后,还有错误捕获块里添加日志。这样一旦代码卡顿,你就能通过日志看到最后执行到哪一步,精准定位问题点。
针对你的代码,我补全了缺失的SNS初始化,并添加了详细的日志示例:
'use strict'; const request = require('request'); const AWS = require('aws-sdk'); AWS.config.update({region:'us-east-1'}); const rekognition = new AWS.Rekognition(); const moment = require('moment-timezone'); const sns = new AWS.SNS(); // 补全SNS客户端初始化 exports.handler = async (event, context) => { // 记录函数启动时间和基本请求信息 console.log(`[${moment.tz('UTC').format()}] Lambda函数启动,请求ID: ${context.awsRequestId}`); try { // Rekognition调用前的日志 console.log(`[${moment.tz('UTC').format()}] 开始调用AWS Rekognition服务`); // 这里替换成你实际的Rekognition调用逻辑 const rekognitionResponse = await rekognition.detectFaces({ Image: { /* 你的图像输入参数 */ }, Attributes: ['ALL'] }).promise(); // Rekognition调用完成,记录结果概要 console.log(`[${moment.tz('UTC').format()}] Rekognition调用完成,返回结果: ${JSON.stringify(rekognitionResponse).substring(0, 100)}...`); // 调用树莓派接口前的日志 console.log(`[${moment.tz('UTC').format()}] 开始向树莓派发送控制请求`); // 用Promise包装request的回调,适配async/await await new Promise((resolve, reject) => { request('你的树莓派API地址', (error, response, body) => { if (error) { // 请求失败时记录错误详情 console.error(`[${moment.tz('UTC').format()}] 树莓派请求失败: ${error.message}`); reject(error); } else { // 请求成功记录状态码和响应概要 console.log(`[${moment.tz('UTC').format()}] 树莓派请求成功,状态码: ${response.statusCode}`); resolve(body); } }); }); // SNS通知前的日志 console.log(`[${moment.tz('UTC').format()}] 准备发送SNS通知`); const snsResponse = await sns.publish({ Message: '机器人操作执行完成', TopicArn: '你的SNS主题ARN' }).promise(); console.log(`[${moment.tz('UTC').format()}] SNS通知发送成功,消息ID: ${snsResponse.MessageId}`); return { statusCode: 200, body: JSON.stringify('操作执行成功') }; } catch (error) { // 捕获所有错误,记录完整错误栈信息 console.error(`[${moment.tz('UTC').format()}] Lambda函数执行出错: ${error.stack || error.message}`); return { statusCode: 500, body: JSON.stringify(`执行失败: ${error.message}`) }; } };
2. 查看CloudWatch日志定位卡顿
添加完日志后,部署你的Lambda函数,然后触发执行。之后通过以下步骤查看日志:
- 登录AWS控制台,进入Lambda服务,找到你的目标函数
- 切换到「监控」标签页,点击「查看CloudWatch日志」
- 在日志组中找到对应函数的日志流,查看按时间排序的日志条目:
- 如果某条日志之后没有后续日志,说明代码卡在了那一步(比如Rekognition调用后没有后续日志,可能是API调用超时或未处理的Promise)
- 如果看到
console.error的输出,直接根据错误信息排查问题
3. 进阶日志技巧
- 使用
console.debug()输出更细节的调试信息,在CloudWatch中可以通过日志级别过滤查看 - 记录关键变量的具体值(比如图像Base64的长度、请求参数等),帮助排查数据异常
- 所有异步操作必须在
await前后添加日志,因为异步逻辑是卡顿和未处理错误的高发区
内容的提问来源于stack exchange,提问作者David Graff
相关产品推荐
相关产品推荐

