You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:31