【问题标题】:How can I send xray trace id to API gateway on AWS?如何将 xray trace id 发送到 AWS 上的 API 网关?
【发布时间】:2020-10-06 22:27:22
【问题描述】:

我有一个启用了 xray 的 lambda,它将 http 请求发送到链接到另一个 lambda 的 API 网关。我还在 API 网关中启用了 xray。但它不会跟踪整个流程,因为 API Gateway 不使用第一个 lambda 中的跟踪 id。

我的问题是如何通过 http 休息请求发送跟踪 ID?我想链接端到端流程。

我在 nodejs 中使用 axios,但我不知道 awsXRay.captureHTTPsGlobal 如何与这个库一起使用。

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway aws-xray


    【解决方案1】:

    AWS Lambda 启用了自动检测,这意味着对 aws 服务的调用被跟踪。但是对于 http(s) 客户端,显式检测是必要的。

    var AWSXRay = require('aws-xray-sdk');
    AWSXRay.captureHTTPsGlobal(require('http'));
    var http = require('http');
    

    Tracing calls to downstream HTTP web services using the X-Ray SDK for Node.js

    【讨论】:

    • 我如何将它用于axios
    • 我还没做。但是您应该能够创建子段并添加元数据来捕获信息。您可以通过http标头手动发送跟踪ID并接收它,在另一端创建段。
    【解决方案2】:

    您可以追溯整个流程,但您需要手动捕获所有 HTTP/S 外部请求:

    const awsXRay = require("aws-xray-sdk")
    awsXRay.captureAWS(require("aws-sdk"))
    awsXRay.captureHTTPsGlobal(require("http"))
    awsXRay.captureHTTPsGlobal(require("https"))
    

    在您的处理程序中(在发出 HTTP 请求之前)以允许跟踪基于承诺的请求(例如 Axios):

    awsXRay.capturePromise()
    

    【讨论】:

    • 您是否为非 lambda 或 express 的 NodeJs 脚本配置了 X 射线。我找不到任何样品。你有样品吗
    • 我看到你正在使用http。它适用于axios 吗?
    • 您需要在 Axios 配置对象中发送检测的 http/s 代理,如下所示:awsXRay.captureHTTPsGlobal(require("http")) awsXRay.captureHTTPsGlobal(require("https")) const http = require('http') const https = require('https') const config = { httpAgent: new http.Agent(), httpsAgent: new https.Agent(), ... }
    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多