【问题标题】:Decompose Logstash json message into fields将 Logstash json 消息分解为字段
【发布时间】:2013-08-08 13:05:27
【问题描述】:

它有一个日志文件,用于存储带有时间戳和 json 消息的事件。例如:

时间戳{“foo”:12,“bar”:13}

我想将 json 部分中的键(foo 和 bar)分解为 Logstash 输出中的字段。

我知道我可以将 Logstash 文件过滤器中的格式字段设置为 json_event,但在这种情况下,我必须在 json 中包含时间戳。还有一个 json 过滤器,但它添加了具有完整 json 数据结构的单个字段,而不是使用键。

有什么想法可以做到这一点吗?

【问题讨论】:

标签: logstash


【解决方案1】:

试用最新的logstash 1.2.1,使用codec值直接解析json事件。

input {
    file {
        type => "tweetfile"
        path => ["/home/nikhil/temp/feed/*.txt"]
        codec => "json"
    }
}
filter{
    json{
        source => "message"
        target => "tweet"
    }
}
output {
    stdout { }
    elasticsearch { embedded => true }
}

【讨论】:

  • 完成此操作后,时间戳字段会发生什么情况?
【解决方案2】:

我使用以下配置完成了此操作:

filter {
  grok {
    match => ["message", "\[%{WORD}:%{LOGLEVEL}\] %{TIMESTAMP_ISO8601:tstamp} :: %{GREEDYDATA:msg}"]
  }
  date {
    match => [ "tstamp", "yyyy-MM-dd HH:mm:ss" ]
  }
  json {
    source => "msg"
  }
}

顺便说一下,这是新版本 1.2.0 的配置。

在 1.1.13 版中,您需要在 json 过滤器中包含一个 target,并在 grok 中包含 message 的引用 过滤器是 @message

【讨论】:

    【解决方案3】:

    您可以只使用普通的Grok filters(正则表达式样式过滤器/模式)并将匹配的值分配给一个变量,以便于组织、过滤和搜索。

    一个例子:

    ((?<foo_identifier>(\"foo\"))):((?<foo_variable_value>(\d+,)))
    

    类似的东西。

    如果您在语法、模式和您认为应该匹配但不匹配的内容上遇到困难,请使用 GrokDebugger 来帮助您。

    希望能有所帮助。

    【讨论】:

    • 我考虑过这个选项,但希望它可以直接解析 json 结构并将键自动转换为字段名称。
    【解决方案4】:

    你的 JSON 错误{"foo": 12, "bar" 13}

    应该是:

    {"foo": 12, "bar": 13}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2021-05-23
      • 1970-01-01
      • 2016-05-10
      相关资源
      最近更新 更多