elasticsearch ELK将json字段解析为单独的字段
我有这样的json:elasticsearch ELK将json字段解析为单独的字段,elasticsearch,logstash,kibana,filebeat,elasticsearch,Logstash,Kibana,Filebeat,我有这样的json: {"date":"2018-12-14 00:00:44,292","service":"aaa","severity":"DEBUG","trace":"abb161a98c23fc04","span":"cd782a330dd3271b","parent":"abb161a98c23fc04","pid":"12691","thread":"http-nio-9080-exec-12","message":"{\"type\":\"Request\",\"lang\":
{"date":"2018-12-14 00:00:44,292","service":"aaa","severity":"DEBUG","trace":"abb161a98c23fc04","span":"cd782a330dd3271b","parent":"abb161a98c23fc04","pid":"12691","thread":"http-nio-9080-exec-12","message":"{\"type\":\"Request\",\"lang\":\"pl\",\"method\":\"POST\",\"sessionId\":5200,\"ipAddress\":\"127.0.0.1\",\"username\":\"kap@wp.pl\",\"contentType\":\"null\",\"url\":\"/aaa/getTime\",\"queryString\":\"null\",\"payload\":\",}"}
问题在于,我们有:
"message":"{\"type\":\"Request\",\"lang\":\"pl\",\"method\":\"POST\",\"sessionId\":5200,\"ipAddress\":\"127.0.0.1\",\"username\":\"kap@wp.pl\",\"contentType\":\"null\",\"url\":\"/aaa/getTime\",\"queryString\":\"null\",\"payload\":\",}
该应用程序以这种方式保存日志文件
filebeat和logstash并没有像我想的那样解析它。
我在Kibana
中只看到一个名为message
的字段,但我希望有单独的字段,如:type
,lang
,method
等
我认为这个问题是由于\
字符附近的\
符号引起的。
如何更改filebeat/logstash的行为以使其发生
对于我来说,在project java文件中添加随处可见的net.logstash.logback.encoder.LogstashEncoder
应用程序太庞大了
我有许多logbackjson.xml
文件。
这些文件包括:
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"date":"%date",
"severity": "%level",
"service": "${springAppName}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"parent": "%X{X-B3-ParentSpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{26}",
"message": "%message",
"ex": "%ex"
}
</pattern>
</pattern>
</providers>
</encoder>
我编写了以下代码,如果我用这个文件启动logstash,那么我可以在kibana中看到正确的json
input {
file {
path => "C:/Temp/logFile.log"
start_position => "beginning"
}
}
filter {
json{
source => "message"
target => "parsedJson"
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "demo"
document_type => "demo"
}
stdout { }
}
请参考Kibana图片
引用自:在日志存储筛选器中使用此配置
筛选器{json{source=>“message”target=>“message1”}
mutate{remove_field=>[“message”]}您是否编写了任何filebeat筛选器?是的-我添加了它。此外,我还添加了添加
“jsonMessage”时会发生的情况:“#asJson{%message}”“
到我的xml
日志配置文件。您希望推送消息或整个json的哪些内容?整个,然后我希望在kibana消息中看到的不是一个而是多个字段。目前我正在推整json
,message
是kibana
中的一个字段。你的logstash解析器或filebeat模块有什么问题?1)你指的是logstash
而不是filebeat
。2) 这对问题中的第一个示例不起作用-可能无法转换。@yami你说的第一个示例是什么意思?下面的json
单词:我的问题中有这样的json:
。感谢屏幕-在我的情况下,根被称为事件
而不是消息
。我稍后再试。也许filebeat
是这里的问题-因为您没有使用它(我猜)。我没有接受这个答案-因为我需要做的是在您的屏幕截图中创建多个parsedJson.message
字段。正如我前面提到的-这在问题的第一个示例中不起作用-可能无法转换。
input {
file {
path => "C:/Temp/logFile.log"
start_position => "beginning"
}
}
filter {
json{
source => "message"
target => "parsedJson"
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "demo"
document_type => "demo"
}
stdout { }
}