我们如何使用AWS X射线跟踪axios http请求?

时间:2018-10-09 08:50:46

标签: node.js aws-lambda serverless-framework aws-xray

我正在寻找一种方法来在基于node.js的aws lambda函数中跟踪axios http请求。我找到了一种在AWS官方文档上跟踪HTTP请求的方法 https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-nodejs-httpclients.html

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

但是我没有找到任何有关axios请求跟踪的文档或博客。 我也尝试过此代码,但无法正常工作。

import AWSXRay from 'aws-xray-sdk';
AWSXRay.captureHTTPsGlobal("../../common/http/HttpClient");
import { HttpClient } from "../../common/http/HttpClient";

在这方面我需要帮助。 谢谢!

3 个答案:

答案 0 :(得分:3)

由于axios将在幕后使用节点的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');

答案 1 :(得分:0)

应该起作用的简单示例是

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拥有正确的访问权限。

答案 2 :(得分:0)

披露:我正在为Lumigo工作,该公司可以帮助您了解无服务器架构。

我的建议是考虑不仅要专门跟踪axios的第三方,还要提供更通用的解决方案,并且更容易上手。例如,如果axios触发了一个API网关,该API网关又触发了另一个lambda,则可以看到它为E2E。

当前的第三方只需单击即可提供集成,而无需更改任何代码。值得一试!