我读过 zipkin,但据我了解,zipkin 适用于跟踪网络请求和时间的历史记录(通过 Finagle)。但是,我可以使用 zipkin 来跟踪 java 方法调用的时间和位置吗?例如,我想跟踪foobar()
执行需要多长时间,内部调用的其他方法foobar()
及其执行时间等等。
3 回答
不,根本不适合。为什么?因为 Zipkin 的架构有多个间接级别:您必须将跨度发送到收集器服务中,即使收集器在您自己的机器上运行,也会有巨大的开销——假设您从欧洲某个地方的两个相邻城市旅行,有人建议你不要直接从 A 到 B,而是从 A 飞往美国纽约,然后返回 B。这简直是荒谬的。
至于可能适合您需求的工具:@Jonathan 提到的 VisualVM 和 Yourkit 非常适合查看程序中的平均情况——如果您需要仔细检查程序中的低级路径,InTrace可能是更好的选择。
Zipkin 的首要目的是为复杂的分布式服务网络(又名微服务架构)提供可观察性。它不打算只支持一个应用程序。
因此,分析器通常是一种更好的方法,尤其是当您有紧急问题需要诊断时。
也就是说,大多数分析器只会提供 Zipkin 持续存在的实时数据,从而允许对大型数据集进行分析。
如果 Zipkin 已经在您的堆栈中,那么使用作为子跨度的特定方法调用来丰富更高级别的 Zipkin 跨度(即完整的 REST 请求)并不是一个坏主意,尤其是那些执行 I/O 的方法。通过这种方式,您可以深入 Zipkin 以更快地确定瓶颈。
否则,您必须首先查看 Zipkin 跨度是否存在高级瓶颈,然后单独查看其他日志或运行分析器,这是低效的。
** 如果它已经在您的堆栈中 **