【问题标题】:Eliminate the top-level field in Logstash消除 Logstash 中的顶级字段
【发布时间】:2015-02-06 14:22:06
【问题描述】:

我正在使用 Logstash,我的一个应用程序正在向我发送如下字段:

[message][UrlVisited]
[message][TotalDuration]
[message][AccountsProcessed]

我希望能够折叠这些字段,完全删除顶级消息。所以上面的字段会变成:

[UrlVisited]
[TotalDuration]
[AccountsProcessed]

有没有办法在 Logstash 中做到这一点?

【问题讨论】:

    标签: logstash


    【解决方案1】:

    假设所有此类子字段的名称都是预先知道的,您可以使用mutate filter

    filter {
      mutate {
        rename => ["[message][UrlVisited]", "UrlVisited"]
      }
      mutate {
        rename => ["[message][TotalDuration]", "TotalDuration"]
      }
      mutate {
        rename => ["[message][AccountsProcessed]", "AccountsProcessed"]
      }
      mutate {
        remove_field => ["message"]
      }
    }
    

    或者,使用ruby filter(即使您不知道字段名称也可以使用):

    filter {
      ruby {
        code => "
          event.get('message').each {|k, v|
            event.set(k, v)
          }
          event.remove('message')
        "
      }
    }
    

    此示例适用于 Logstash 2.4 及更高版本。对于早期版本,请改用event['message'].each ...event[k] = v

    【讨论】:

    • 谢谢!我试图避免这种情况。新的数据字段会经常添加,我试图避免每次发生这种情况时都使用 Logstash 配置。
    • @MattW:那么...那么 ruby​​ 过滤器不会有帮助吗?
    • 哦,哇,不知何故,我忽略了答案的第二部分。这很好用。感谢您的帮助 - 非常感谢!
    • 我们现在必须使用 get & set 方法访问事件,你应该更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    相关资源
    最近更新 更多