【问题标题】:how to extract a portion of a field and store it into another field in logstash filter?如何提取字段的一部分并将其存储到logstash过滤器的另一个字段中?
【发布时间】:2016-09-21 12:45:51
【问题描述】:

我有系统日志文件。我正在使用 logstash syslog 插件过滤器来处理这些日志。我在syslog_message 字段中收到这样的消息:

syslog_message:[cdp/interface.ERR] - {- -} Error writing CDP frame on system. Link is down

但我想要一个新字段,它应该只包含 .ERR 之前的部分,即“cdp/interface”。这部分各不相同,我不知道会出现多少种。 所以我想要一个新字段并希望将该部分存储到该字段中,以便我可以在 kibana 中绘制这些术语的计数。

当前的logstash配置:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]

    }
    date {
      target => "syslog_timestamp"
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }

按照@Val 的建议将新的 grok 添加到配置文件后

grok {
  match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\] %{GREEDYDATA:syslog_message}" }
}

对于某些输入,grokparsefailure 会发生。
它失败的一些行是:

syslog_message: [hald.INFO]: Support query handler called
syslog_message:[mgmtd.INFO]: Finished database commit

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 您当前的 Logstash 配置如何?
  • 我用当前的logstash配置@Val编辑了

标签: elasticsearch logstash kibana kibana-4


【解决方案1】:

您可以在主 grok 过滤器中再添加一个模式,也可以为 syslog_message 字段添加另一个 grok 过滤器

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]

    }
    # ====> add this <====
    grok {
      match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\]:? %{GREEDYDATA:syslog_message}" }

    }
    date {
      target => "syslog_timestamp"
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }

因此,您将获得两个额外的字段,即:

  • syslog_type: cdp/interface
  • syslog_level: ERR

syslog_message 只会包含这个- {- -} Error writing CDP frame on system. Link is down

【讨论】:

  • 嘿,感谢您的快速帮助,但我得到了许多输入的 grokparsefailure,例如 syslog_message:[hald.INFO]: Support query handler called for such input logs 我得到 grokparsefailure 。 @Val
  • 请用一些失败的日志行更新您的问题。
  • 我编辑了 2 个失败的输入日志@Val。你能看看吗?
  • 我的答案已经修改,请看一下
  • 嘿非常感谢您的快速帮助@Val
猜你喜欢
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多