gpt4 book ai didi

spring-boot - 如何使用 Spring Boot 的应用程序日志(由 slf4j 生成)丰富 Jaeger opentracing 数据?

转载 作者:行者123 更新时间:2023-12-03 15:46:29 30 4
gpt4 key购买 nike

有一个使用 SLF4J 记录器的现有 Spring Boot 应用程序。我决定通过标准 opentracing 添加对分布式跟踪的支持以 Jaeger 作为跟踪器的 API。令人惊讶的是初始设置是如此简单 - 所需要的只是向 pom.xml 添加两个依赖项。 :

    <dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-web-autoconfigure</artifactId>
<version>${io.opentracing.version}</version>
</dependency>

<dependency>
<groupId>io.jaegertracing</groupId>
<artifactId>jaeger-core</artifactId>
<version>${jaegerVersion}</version>
</dependency>

并提供 Tracer具有配置的bean:
@Bean
public io.opentracing.Tracer getTracer() throws ConfigurationException {
return new new io.jaegertracing.Tracer.Builder("my-spring-boot-app").build();
}

一切都像魅力一样 - 应用程序请求由 Jaeger 处理并创建跨度:

enter image description here

然而,在跨度 Logs只有 preHandle & afterCompletion带有在请求执行期间调用的类/方法信息的事件(不收集由 slf4j 记录器生成的日志):

enter image description here

问题是是否可以将 Tracer 配置为获取应用记录器生成的日志(在我的情况下为 slf4j),以便通过以下方式完成所有应用程序日志: LOG.info/ LOG.warn/ LOG.error等也会反射(reflect)在 Jaeger 中

注意 :我已经想出了如何登录到跨度 手动 通过 opentracing API 例如:
Scope scope = tracer.scopeManager().active();
if (scope != null) {
scope.span().log("...");
}

并做一些 手册 使用 ERROR 进行操作过滤器中异常处理的标签,例如
} catch(Exception ex) {
Tags.ERROR.set(span, true);
span.log(Map.of(Fields.EVENT, "error", Fields.ERROR_OBJECT, ex, Fields.MESSAGE, ex.getMessage()));
throw ex
}

但是,我仍然想知道是否可以配置跟踪器来获取应用程序日志 automatically :
  • LOG.info -> 跟踪器将新日志添加到事件范围
  • LOG.error -> 跟踪器将新日志添加到事件跨度并添加 ERROR标签

  • 更新 :我能够通过为记录器添加包装器来将应用程序日志添加到跟踪器,例如
    public void error(String message, Exception e) {
    Scope scope = tracer.scopeManager().active();
    if (scope != null) {
    Span span = scope.span();
    Tags.ERROR.set(span, true);
    span.log(Map.of(Fields.EVENT, "error", Fields.ERROR_OBJECT, e, Fields.MESSAGE, e.getMessage()));

    }
    LOG.error(message, e);
    }

    但是,到目前为止,我无法找到默认情况下允许将应用程序日志自动添加到跟踪器的 opentracing 配置选项。基本上,如果需要,似乎开发人员会以编程方式向跟踪器添加额外的日志。此外,在对追踪进行更多调查后,似乎通常是 loggingtracing单独处理,将所有应用程序日志添加到跟踪器不是一个好主意(跟踪器应主要包括示例数据和用于请求识别的标签)
  • https://github.com/openzipkin/zipkin/issues/1453
  • https://peter.bourgon.org/blog/2016/02/07/logging-v-instrumentation.html
  • 最佳答案

    https://github.com/opentracing-contrib/java-spring-cloud项目自动将标准日志记录发送到事件跨度。只需将以下依赖项添加到您的 pom.xml

    <dependency>
    <groupId>io.opentracing.contrib</groupId>
    <artifactId>opentracing-spring-cloud-starter</artifactId>
    </dependency>

    或使用此 https://github.com/opentracing-contrib/java-spring-cloud/tree/master/instrument-starters/opentracing-spring-cloud-core如果您只需要日志记录集成,则启动器。

    关于spring-boot - 如何使用 Spring Boot 的应用程序日志(由 slf4j 生成)丰富 Jaeger opentracing 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855480/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com