如何使用微服务跟踪 nodejs 中的数据

How to track data in nodejs with microservices

我正在处理一个使用多个微服务的应用程序。

应用程序接收数据并对其进行处理,我希望有一种方法可以监控接收到的数据在整个微服务中的所有情况。

由于平台是nodejs我们正在处理异步处理,日志不会总是一个接一个地写入,并且由于数据没有一个מID,因此无法以任何方便的方式过滤日志.

有没有什么方法可以跟踪数据从进入应用程序的第一刻到最后,在微服务之间移动 without必须在所有方法之间传递生成 ID。

显然,id 将在微序列之间传递,但在每个微序列中,我想保持代码整洁。

我正在使用 winston 来记录,也许可以放一些东西。

在此先致谢,如有任何建议,我们将不胜感激。

Is there any way to track the data from the first moment it enters the application till the end, moving between the microservices without having to pass a generate id between all the methods.

不,因为您的 none 微服务可以知道其他哪些请求与当前请求相关,除非您生成一些 ID 并在所有这些请求之间传递它。

如果您添加一些可选的请求 ID,那么请求中没有它的微服务可能会随机生成它(例如使用 UUID),然后将其包含在所有日志中并传递在对所有其他微服务的请求中,这反过来会使用相同的 ID 而不是生成随机 ID。

如果没有这样的 ID,您将没有足够的上下文来将所有请求组合在一起,尤其是在不同的微服务之间。根据您使用的框架,可以很容易地编写一个中间件来为您处理。由于您没有说明您使用的是哪个框架,因此无法给您更具体的答案。

通过框架,rsp 意味着 Express、Hapy、Restify 等。一般来说,这个想法是服务在 header(x-request-id)中接收请求 ID。对于每个请求,记录器实例都使用它将包含在任何日志中的 ID 进行初始化。

在您的应用程序中,您需要一种方法来访问您想要登录的任何位置的单个记录器。我建议日志记录只发生在路由处理程序中,因此将记录器附加到请求 object 可能是可行的方法。

默认情况下,Restify 会处理很多这样的事情。 Hapi 需要一个插件,而对于 Express,您将使用中间件。

您还需要确保对其他服务的任何请求都包含请求 ID header。