Node.js 我们如何使用aws x-ray跟踪axios http请求?

Node.js 我们如何使用aws x-ray跟踪axios http请求?,node.js,aws-lambda,serverless-framework,aws-xray,Node.js,Aws Lambda,Serverless Framework,Aws Xray,我正在寻找一种方法,在基于node.js的aws lambda函数中跟踪axios http请求。我发现了一种跟踪aws官方文档上HTTP请求的方法 但我没有找到任何关于axios请求跟踪的文档或博客。 我也尝试过这个代码,但它不起作用 import AWSXRay from 'aws-xray-sdk'; AWSXRay.captureHTTPsGlobal("../../common/http/HttpClient"); import { HttpClient } from "../../

我正在寻找一种方法,在基于node.js的aws lambda函数中跟踪axios http请求。我发现了一种跟踪aws官方文档上HTTP请求的方法

但我没有找到任何关于axios请求跟踪的文档或博客。 我也尝试过这个代码,但它不起作用

import AWSXRay from 'aws-xray-sdk';
AWSXRay.captureHTTPsGlobal("../../common/http/HttpClient");
import { HttpClient } from "../../common/http/HttpClient";
在这方面我需要帮助。
谢谢

由于axios将在幕后使用node的http/https模块,如果您在导入/需要axios之前全局捕获http和https,事情应该会按预期进行

import AWSXRay from 'aws-xray-sdk';
import http from 'http';
import https from 'https';

AWSXRay.captureHTTPsGlobal(http);
AWSXRay.captureHTTPsGlobal(https);

const axios = require('axios');

简单的例子就是

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

AWSXRay.captureHTTPsGlobal(require('http')); // Globally instrument http client
AWSXRay.captureHTTPsGlobal(require('https')); // Globally instrument https client

const http = require('http');
const https = require('https');

AWSXRay.capturePromise(); // We should capture promies
const instance = axios.create({
  httpAgent: new http.Agent(),
  httpsAgent: new https.Agent(),
}); // Instrument axious instance

const post = async (url, body) => {
  return await instance.post(url, body);
}

确保Lambda拥有正确的访问权限。

您好,您能详细说明一下“它不工作”吗?您是否收到任何错误或http信息丢失?使用axios进行http调用时使用的语法或代码段是什么?请注意,用于Nodejs的AWS X-Ray SDK并不正式支持axios,您可以在此处看到内置http客户端的修补代码嗨,通过在lambda函数中添加这些行,我没有收到任何错误。从“aws X射线sdk”导入AWSXRay;AWSXRay.captureHTTPsGlobal(“../../common/http/HttpClient”);从“../../common/http/HttpClient”导入{HttpClient}”;实际上,在我的lambda函数中,我正在发出一个axios post请求,并测试一个返回500代码的端点。理想情况下,应通过aws x射线记录此错误,但不记录错误。但在部署时打印此消息:“设置了AWS_XRAY_CONTEXT_MISSING.Configured CONTEXT MISSING strategy to LOG_ERROR”@haotian465我刚刚找到了一种使用CaptureAncyFunc记录axios错误的方法,但我想知道是否可以将其转换为promise,以便代码变得更干净。我已经在这里添加了一段代码:但是我得到了错误:错误:Param“fcn”必须是一个函数。这在backlog中。您可以在此处打开一个问题或提交一份PR以承诺捕获
const
  axios = require('axios'),
  AWSXRay = require('aws-xray-sdk-core');

AWSXRay.captureHTTPsGlobal(require('http')); // Globally instrument http client
AWSXRay.captureHTTPsGlobal(require('https')); // Globally instrument https client

const http = require('http');
const https = require('https');

AWSXRay.capturePromise(); // We should capture promies
const instance = axios.create({
  httpAgent: new http.Agent(),
  httpsAgent: new https.Agent(),
}); // Instrument axious instance

const post = async (url, body) => {
  return await instance.post(url, body);
}