elasticsearch ELK将json字段解析为单独的字段,elasticsearch,logstash,kibana,filebeat,elasticsearch,Logstash,Kibana,Filebeat" /> elasticsearch ELK将json字段解析为单独的字段,elasticsearch,logstash,kibana,filebeat,elasticsearch,Logstash,Kibana,Filebeat" />

elasticsearch ELK将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\":

我有这样的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\":\"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 { }
}