【问题标题】:How to track data in nodejs with microservices如何使用微服务跟踪 nodejs 中的数据
【发布时间】:2017-08-06 05:27:44
【问题描述】:

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

应用程序接收数据并对其进行处理,我想要一种方法来监控接收到的数据在整个微服务中的所有传输。

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

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

显然,id 将在微服务之间传递,但在每个微服务中,我想保持代码干净。

我正在使用winston 进行日志记录,也许那里适合。

提前致谢,任何建议将不胜感激。

【问题讨论】:

    标签: node.js logging monitoring microservices winston


    【解决方案1】:

    有什么方法可以跟踪数据从进入应用程序的第一刻到结束,在微服务之间移动,而无需在所有方法之间传递生成 ID。

    不,因为您的任何微服务都不知道其他请求中的哪些与当前请求相关,除非您生成一些 id 并在所有请求之间传递它。

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

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

    【讨论】:

    • 感谢您的快速回复。首先,应用程序是用nodejs 编写的。考虑到我将生成一个 ID 并通过 REST 或其他方式将其传递给以下微服务,我如何才能异步记录并确保 ID 始终适合相同的数据 将它从一个方法传递到另一个方法。
    【解决方案2】:

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

    在您的应用中,您需要一种访问单个记录器的方式,无论您想从哪里登录。我建议日志记录只发生在路由处理程序中,因此将记录器附加到请求对象可能是要走的路。

    默认情况下,Restify 会处理很多此类问题。 Hapi 需要一个插件,而对于 Express,您将使用中间件。

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

    【讨论】:

    • 感谢您的回复!我没想过每个请求都有一个记录器实例,听起来很完美!
    猜你喜欢
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2018-01-14
    • 2020-06-11
    相关资源
    最近更新 更多