【发布时间】:2020-10-21 12:40:55
【问题描述】:
有什么方法可以将应用程序提供的 std 日志和错误放到一个 span 中? 我想把提供的 slf4j 日志放在 quarkus 中,它应该出现在 jeager-Ui 中
application.properties
quarkus.http.port=8200
quarkus.swagger-ui.always-include=true
quarkus.jaeger.service-name=myservice
quarkus.jaeger.reporter-log-spans=true
quarkus.jaeger.log-trace-context=true
quarkus.jaeger.propagation=jaeger
quarkus.jaeger.sampler-type=const
quarkus.jaeger.sampler-param=1
quarkus.log.console.format=%d{HH:mm:ss} %-5p traceId=%X{traceId}, spanId=%X{spanId}, sampled=%X{sampled} [%c{2.}] (%t) %s%e%n
quarkus.log.handler.gelf.enabled=true
quarkus.log.handler.gelf.host=localhost
quarkus.log.handler.gelf.port=12201
以下是我用来实现集中式日志管理(ELK)的依赖项。为此,我使用的是 quarkus quarkus-centralized-log-managemt guide 提供的指南
pom.xml
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-opentracing</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-openapi</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-logging-gelf</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-metrics</artifactId>
</dependency>
</dependencies>
【问题讨论】:
-
嗯,我认为将日志发送到 Jaeger 并不是一个好主意。 Jaeger 的主要目的是可追溯性和可观察性,它应该非常轻量级以避免性能下降。一个不错的选择是在您的日志中打印 Jaeger 跟踪 id 和 span id(通常它们也被聚合到一些集中式日志堆栈中,例如 EFK)并使用跟踪 id 或 span id 过滤您的日志。
-
感谢您为我提供了一个不错的选择。但我想知道 quarkus 中是否有任何方法可以获取 preHandle 和 afterCompletion 事件,其中包含有关在请求执行期间调用的类/方法的信息,就像我们在 springboot 中一样
-
我认为您可以在 CDI 拦截器 (docs.jboss.org/weld/reference/1.0.0/en-US/html/…) 周围找到有关此问题的答案。 Quarkus 也支持它。简单示例 (tomee.apache.org/examples-trunk/simple-cdi-interceptor)。
-
我已经实现了你建议的替代方案,即通过在我的日志中打印 traceId 和 spanId 并且我尝试在 Windows 服务器上使用 elasticsearch 配置 jeager,而不使用 docker,通过搜索所有可用的选项,但成功率为零。我想不知何故我走错了路。你能帮我一下吗?
-
首先,是单独使用弹性搜索还是使用某种堆栈,如 EFK(Elastic/Fluentd & Kibana) ?其次,“搜索所有可用选项但成功率为零”是什么意思?如果 traceId 和 spanId 在日志中,您应该能够过滤它们。
标签: quarkus