我试图添加额外的行李到HTTP服务器上的现有跨度,我想添加一个路径变量到跨度,从日志MDC访问,并通过超文本传输协议或kafka在电线上传播到下一个服务器。
我的设置:春云侦探霍克斯顿。SR5和Spring启动2.2.5
我尝试添加以下设置和配置:
spring:
sleuth:
propagation-keys: context-id, context-type
log:
slf4j:
whitelisted-mdc-keys: context-id, context-type
并添加了http拦截器:
public class HttpContextInterceptor implements HandlerInterceptor {
private final Tracer tracer;
private final HttpContextSupplier httpContextSupplier;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (httpContextSupplier != null) {
addContext(request, handler);
}
return true;
}
private void addContext(HttpServletRequest request, Object handler) {
final Context context = httpContextSupplier.getContext(request);
if (!StringUtils.isEmpty(context.getContextId())) {
ExtraFieldPropagation.set(tracer.currentSpan().context(), TracingHeadersConsts.HEADER_CONTEXT_ID, context.getContextId());
}
if (!StringUtils.isEmpty(context.getContextType())) {
ExtraFieldPropagation.set(tracer.currentSpan().context(), TracingHeadersConsts.HEADER_CONTEXT_TYPE, context.getContextType());
}
}
}
和http筛选器以影响当前范围(根据spring文档)
public class TracingFilter extends OncePerRequestFilter {
private final Tracer tracer;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
try (Tracer.SpanInScope ws = tracer.withSpanInScope(tracer.currentSpan())){
filterChain.doFilter(request, response);
}
}
}
问题是日志不包含我的自定义上下文id,上下文类型,虽然是在span上下文中看到它。
我错过了什么?
官方的Sleuth 2.0中也描述了在当前span中刷新MDC的方法-
@Configuration
class BusinessProcessBaggageConfiguration {
BaggageField BUSINESS_PROCESS = BaggageField.create("bp");
/** {@link BaggageField#updateValue(TraceContext, String)} now flushes to MDC */
@Bean
CorrelationScopeCustomizer flushBusinessProcessToMDCOnUpdate() {
return b -> b.add(
SingleCorrelationField.newBuilder(BUSINESS_PROCESS).flushOnUpdate().build()
);
}
}
类似的问题春云侦探添加标签和答案https://stackoverflow.com/a/66554834
对于某些上下文:这来自Spring文档。
为了将行李值自动设置为Slf4j的MDC,您必须使用允许的本地或远程密钥列表设置spring.sleuth.baggage.correlation字段属性。例如spring.sleuth.baggage.correlation-field=国家代码将把国家代码行李的值设置为MDC。
请注意,额外的字段将从下一个下游跟踪上下文开始传播并添加到MDC。若要在当前跟踪上下文中立即向MDC添加额外字段,请将该字段配置为在更新时刷新。
// configuration
@Bean
BaggageField countryCodeField() {
return BaggageField.create("country-code");
}
@Bean
ScopeDecorator mdcScopeDecorator() {
return MDCScopeDecorator.newBuilder()
.clear()
.add(SingleCorrelationField.newBuilder(countryCodeField())
.flushOnUpdate()
.build())
.build();
}
// service
@Autowired
BaggageField countryCodeField;
countryCodeField.updateValue("new-value");
我在我的Spring启动应用程序中使用了开放遥测java自动检测。有没有办法让应用程序日志成为创建的跨度的一部分? 我的自动配置设置如下:
当我尝试console appender并尝试打印该字段时,就像下面的示例一样,它起作用了。 你能告诉我我在udp appender上做错了什么吗?谢谢你的忠告。
我们有一个带有REST接口的Spring Boot应用程序和一个web客户端。我们使用spring-security和OAuth2.0 JWT令牌进行身份验证。我们正在使用slf4j和sleuth进行日志记录。我们希望在日志中记录当前登录的用户id。技术上,我们希望将用户id添加到服务器应用程序的映射诊断上下文(MDC)中。 null 可以手动实现这样的MDC,请参阅https://www.bae
问题内容: 我已经看过了,基本上我已经发现Calendar对象可以使用以下类似方法将1个月添加到指定的日期中: 尽管我不喜欢它在日期为30或31时的行为。如果我将1个月添加到01/31/2012,输出将变为02/29/2012。当我再增加1个月时,它将变为03/29/2012。 无论如何,我是否可以强制2012年2月29日自动变为2012年3月1日? 基本上这就是我想发生的事情: 默认日期:01/
问题内容: 我已经构建了自己的自定义react-bootstrap Popover组件: 该组件的呈现方式如下: 现在,我想向组件中添加自定义道具,例如:我的文字,并使用新道具在弹出框中设置一些内容,例如- 但随后我在浏览器中收到此警告: 警告:标签上的未知道具。从元素中删除这些道具。 现在,我想我可以删除零件并逐个插入所有原始道具,而无需自定义道具,但是这样我就失去了“淡入淡出”效果,这也是处理
问题内容: 我是ELK堆栈的新手。我有一个文件拍服务,将日志发送到logstash,并在logstash中使用过滤器,将数据推送到索引。 我正在使用筛选器来解析数据。 我的问题是,我希望将字段名称及其值存储在elasticsearch索引中。我的日志的不同版本如下: 我想要的弹性索引字段如下: client_ip => type必须与kibana用于IP映射的内容兼容。 时间戳=>日期时间格式。=