0

我正在使用 Lambda(节点 8.10)并使用 AWS X Ray。我正在使用 Promise 调用外部 IP 地址。当我打电话时,会显示其他痕迹但无法获取自定义段。我没有使用任何框架,只是一个纯节点 js。

const AWSXRay = require('aws-xray-sdk-core');

AWSXRay.enableManualMode();
AWSXRay.captureHTTPsGlobal(require('https'));

const https = AWSXRay.captureHTTPs(require('https'));

exports.handler = async (event, context, callback) => {
// other code

const response = await doSomething(event);
    return callback(error, response);
};

async doSomething(event) {
return new Promise((resolve, reject) => {
    const segment = new AWSXRay.Segment('custom_segment_here');

    AWSXRay.captureAsyncFunc('send', (subsegment) => {
        const options = {
                    hostname: host,
                    port: 443,
                    path: '/',
                    method: 'GET',
                    XRaySegment: subsegment,
                };

        const req = https.request(options, (res) => {
            code = res.statusCode;
            resolve(code);
        });

        req.on('error', (error) => {
                    subsegment.addError(error);
                    reject(error);
                });

                subsegment.close();
                req.end();
    }, segment);

}

}

4

1 回答 1

1

在 Lambda 场景中,Lambda 负责创建 Segments,AWS X-Ray SDK 只创建 Subsegments 然后发出它们。根据您的代码片段,您在无法发出的 lambda 函数内创建了一个段 (const segment = new AWSXRay.Segment('custom_segment_here');),因此您无法在我们的控制台中看到它。希望我的回答很清楚。:)

于 2019-04-03T23:58:10.550 回答