【问题标题】:How to parse json in logstash /grok from a text file line?如何从文本文件行解析logstash / grok中的json?
【发布时间】:2019-02-05 16:46:27
【问题描述】:

我有一个看起来像这样的日志文件(简化)

Logline 示例

MyLine data={"firstname":"bob","lastname":"the builder"}

我想提取 data 中包含的 json 并创建两个字段,一个用于 firstname,一个用于 last。但是,我得到的输出是这样的:

{"message":"Line data={\"firstname\":\"bob\",\"lastname\":\"the builder\"}\r","@version":"1","@timestamp":"2015-11-26T11:38:56.700Z","host":"xxx","path":"C:/logstashold/bin/input.txt","MyWord":"Line","parsedJson":{"firstname":"bob","lastname":"the builder"}}

如你所见

..."parsedJson":{"firstname":"bob","lastname":"the builder"}}

这不是我需要的,我需要在 kibana 中为名字和姓氏创建字段,但 logstash 没有使用 json 过滤器提取字段。

LogStash 配置

input {
  file {
        path => "C:/logstashold/bin/input.txt"        
       }
}

filter {     

   grok {
            match => { "message" => "%{WORD:MyWord} data=%{GREEDYDATA:request}"}        
        }   

    json{
        source => "request"
        target => "parsedJson"
        remove_field=>["request"]
    }   
}   

output {  
    file{
        path => "C:/logstashold/bin/output.txt"
    }   
}

非常感谢任何帮助,我确定我错过了一些简单的东西

谢谢

【问题讨论】:

    标签: elasticsearch logstash logstash-grok


    【解决方案1】:

    在您的 json 过滤器之后添加另一个名为 mutate 的过滤器,以便添加您将从 parsedJson 字段中获取的两个字段。

    filter {
      ...
      json {
         ...
      }
      mutate {
        add_field => {
          "firstname" => "%{[parsedJson][firstname]}"
          "lastname" => "%{[parsedJson][lastname]}"
        }
      }
    }
    

    对于上面的示例日志行,将会给出:

    {
           "message" => "MyLine data={\"firstname\":\"bob\",\"lastname\":\"the builder\"}",
          "@version" => "1",
        "@timestamp" => "2015-11-26T11:54:52.556Z",
              "host" => "iMac.local",
            "MyWord" => "MyLine",
        "parsedJson" => {
            "firstname" => "bob",
             "lastname" => "the builder"
        },
         "firstname" => "bob",
          "lastname" => "the builder"
    }
    

    【讨论】:

    • 您的示例在 "firstname" 和 last name => %{[parsedJson][firstname]}}" 之后有一个多余的 '}',这将阻止它正常工作。
    • 感谢@BornToCode 已修复 ;-)
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多