所以我们有一个应用程序,我们将把它的所有日志发送到 Kibana 服务器(通过 Kafka 服务器)。
以下是我们设法开始工作的基础知识,发布到 Kibana 没有问题:
<Kafka name="KafkaAppender" topic="topic1">
<JsonLayout compact="true">
<KeyValuePair key="service" value="some_app_tag"/>
<KeyValuePair key="@timestamp" value="${date:yyyy-MM-dd HH:mm:ss.SSS}"/>
<KeyValuePair key="host_name" value="${hostName}"/>
<KeyValuePair key="unique_id" value="$${map:name:-NA}"/>
</JsonLayout>
<Property name="bootstrap.servers">kafka1.com:9092,kafka2.com:9092,kafka3.com:9092</Property>
</Kafka>
然而,我们发现很难在 中打印出类、方法和行号,JsonLayout以便它可以被 elasticSearch 索引,因此可以在 Kibana 中作为一个字段进行搜索。
我们为这 3 个字段尝试了各种语法组合/变体,例如%c{2},%M和%LLine - 它们都按字面意义打印出来,作为我们尝试放入的变量。
在 Console Appender 中,它们使用: <pattern>%23.23d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] [$${map:name:-NA}] %c{1}.%M(%F:%L): %highlight{%m%n%throwable}</pattern>
"$${map:name:-NA}" 是我们添加的东西,用于添加可以根据用户收到的错误消息搜索的唯一错误 ID,它由以下内容设置:
StringMapMessage mapMsg = new StringMapMessage();
mapMsg.put("name", "arun");
LOGGER.fatal(mapMsg);
这有效,我们唯一的问题是
在 JSON 中为 Kafka 输入输出类、行和方法
到目前为止,我们无法覆盖 Kibana 的@timestamp字段,因此它包含 log4j 生成的时间戳,以便我们可以可靠地按生成日志的时间/日期排序(否则,如果它们以随机顺序出现,它们会令人困惑) - 当我们添加了@标志,Kibana 添加了一个标签,如_timestampparsefailure,并显示提交@timestamp的_@timestamp,而不是使用它来覆盖它生成的时间戳。
任何人都可以请教吗?我们已经搜索了很远很远,到目前为止还没有找到任何接近的东西。
谢谢。
红糖糍粑
呼啦一阵风
相关分类