高效的分布式序列

时间:2017-12-12 08:27:21

标签: distributed spring-cloud-sleuth brave

我有很多应用程序,每个都有自己的日志。我通常在分布式日志中遇到问题。

要解决此问题,我使用:

  • 勇敢/春天侦探以产生痕迹和跨度ids
  • Elastic / Logstash / Kibana集中并搜索我的日志

通过这种方式,我能够按照所写的顺序(按时间戳)查看所有应用程序日志。 但事实是我不能信任日志中写的时间戳。所有服务器的时钟都不同步。

所以我需要能帮助我对所有日志进行排序的东西。

我想过在每个范围内生成一个数字:

private static final String BASE_URL = "https://github.com/username/repository/";

@Provides
@Singleton
Retrofit provideRetrofit(RxJavaCallAdapterFactory rxJavaCallAdapterFactory, Gson gsonConverterFactory) {
    return new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addCallAdapterFactory(rxJavaCallAdapterFactory)
            .addConverterFactory(GsonConverterFactory.create(gsonConverterFactory))
            .build();
}

这会期望按此顺序订购日志的东西: app1,app2,app3,app4,app5,app6,app7,app8

有人知道解决这个问题的技术吗?

1 个答案:

答案 0 :(得分:1)

我们在侦探中遇到了一个问题(https://github.com/spring-cloud/spring-cloud-sleuth/issues/275)。最简单的方法是在日志中添加一个标记/条目,该标记/条目将随每个子跨度递增。您可以重用Sleuth的内部结构,以覆盖DefaultTracer's行为以在子跨距创建上添加其他标记。然后在Slf4jLogger中,您将重用该标记以在MDC上下文中设置其他元素