gpt4 book ai didi

node.js - 跟踪和记录从 node.js 服务器内部发出的 http 调用

转载 作者:可可西里 更新时间:2023-11-01 17:26:23 24 4
gpt4 key购买 nike

我正在调试从我的 Express 应用程序向我网络上的另一个微服务发出的调用。我收到 401 错误,我需要获取完整的原始 http 日志以提供给我的安全团队进行分析。

我正在寻找一些关于跟踪来 self 部署在 Pivotal Cloud Foundry 上的微服务的 HTTP 调用的建议。我一直在做一些研究并使用 Zipkin 和 OpenTracing 等工具。但这些似乎更多地与调试延迟有关,可能不显示 HTTP 日志。我也尝试过使用 Morgan/Winston 模块,但它们不跟踪内部调用。 Morgan 目前是我用来注销基本 HTTP 代码的工具,但它也不会从我的应用程序内部接听我的电话,只是从浏览器向应用程序本身发出的电话。我需要获取完整的原始 HTTP 请求来协助安全团队。我正在使用 morgan (STDOUT) 的默认日志记录输出。我已经在控制台记录了标题以查看标题,但希望以更易读的格式将它们导出。

最佳答案

要记录从 Node.js 服务器发送的内部 HTTP 请求,您可以创建代理 Node.js 服务器并使用 Morgan 记录所有请求。 .

首先,定义 3 个常量(或从您的项目配置文件中读取):

// The real API endpoint, such as "another micro-service" in your network
const API = http://<real_server>
// Proxy Node.js server running on localhost
const LOGGER_ENDPOINT=http://localhost:3010
// Flag, decide whether logger is enabled.
const ENABLE_LOGGER=true

其次,当您的 Node.js 服务器启动时,如果 ENABLE_LOGGER 为真,则同时启动记录器服务器。记录器服务器只做一件事:记录请求并使用 request 模块将其转发给真正的 API 服务器。您可以使用 Morgan以提供更具可读性的格式。

const request = require('request');
const morgan = require('morgan')(':method :url :status Cookie: :req[Cookie] :res[content-length] - :response-time ms');
...
if (ENABLE_LOGGER && LOGGER_ENDPOINT) {
let loggerPort = 3010;
const logger = http.createServer((req, res) => {
morgan(req, res, () => {
req.pipe(request(API + req.url)).pipe(res);
});
});
logger.listen(loggerPort);
}

第三,在您的 Node.js 服务器中,当 ENABLE_LOGGER 为真时,将 API 请求发送到记录服务器,当 ENABLE_LOGGER 为假时,将 API 直接发送到真实服务器。

let app = express(); // assume Express is used, but this strategy can be easily applied to other Node.js web framework.
...
let API_Endpoint = ENABLE_LOGGER ? LOGGER_ENDPOINT : API;
app.set('API', API_Endpoint);
...
// When HTTP request is sent internally
request(app.get('API') + '/some-url')...

关于node.js - 跟踪和记录从 node.js 服务器内部发出的 http 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com