如何提取字段的一部分并将其存储在logstash过滤器中的另一个字段中?

时间:2016-09-21 12:45:52

标签: elasticsearch logstash kibana kibana-4

我有syslog文件。我正在使用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

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

1 个答案:

答案 0 :(得分:1)

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

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