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

时间:2017-03-15 12:52:26

标签: node.js logging monitoring microservices winston

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

应用程序接收数据并对其进行处理,我希望能够监控所有接收到的数据在整个微服务中的所有内容。

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

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

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

我正在使用winston来记录,也许某些东西适合那里。

在此先感谢,任何建议都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

  

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

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

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

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

答案 1 :(得分:1)

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

在您的应用中,您需要一种方法来访问您想要登录的单个记录器。我建议仅在路由处理程序中进行日志记录,因此将记录器附加到请求对象可能是最佳选择。

Restify默认处理了很多这个问题。 Hapi需要一个插件,对于Express,你会使用中间件。

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