首页 > 解决方案 > 设置本地和远程队列之间的关联 id,使用相同的方式获取 splunk 中的日志

问题描述

我有两个队列。其中一个是本地的,另一个是远程的。

通常我使用rfhutil工具来提供所有细节。

通过设置correlationid,我确实使用相同的方式在 splunk 中获取了我的日志。

什么应该是合适的代码。

标签: jmsmq

解决方案


发送消息时:

Session session = ...
String  correlationId = ...

TextMessage msg = session.createTextMessage(payload);
msg.setJMSCorrelationID(correlationID);
log.info("Message sent with correlationID: '{}'", correlationId);

接收消息时:

MessageConsumer consumer = ...
Message msg = consumer.receiveNoWait();
String correlationId = msg.getJMSCorrelationID();
log.info("Received message with correlationID: '{}'", correlationId);

通过使用 SLF4J 的映射诊断上下文(又名MDC )功能,您可以在同一线程上的每个以下日志行中添加相关 ID:

// assume folllowing logback pattern or equivalent for other loggers:
// <pattern>cid: %X{cid} %msg %n</pattern>

String correlationId = "AssumeProperCorrelationIdHere"
org.slf4j.MDC.put("cid", correlationId);
log.info("MDC is a mighty feature");

// expected log output:
// cid: AssumeProperCorrelationIdHere MDC is a mighty feature

现在,在 Splunk 搜索“AssumeProperCorrelationIdHere”时,您将获取包含该值的所有日志事件。此外,通过在日志中使用键值格式,使用“cid: \w+”之类的正则表达式很容易构造 splunk 字段。这将允许您在相关 id 上拥有聚合函数。所以你可以做唯一或计数或任何查询。


推荐阅读