elasticsearch 如何提取字段的一部分并将其存储到logstash筛选器中的另一个字段中?,elasticsearch,logstash,kibana,kibana-4,elasticsearch,Logstash,Kibana,Kibana 4" /> elasticsearch 如何提取字段的一部分并将其存储到logstash筛选器中的另一个字段中?,elasticsearch,logstash,kibana,kibana-4,elasticsearch,Logstash,Kibana,Kibana 4" />

elasticsearch 如何提取字段的一部分并将其存储到logstash筛选器中的另一个字段中?

elasticsearch 如何提取字段的一部分并将其存储到logstash筛选器中的另一个字段中?,elasticsearch,logstash,kibana,kibana-4,elasticsearch,Logstash,Kibana,Kibana 4,我有系统日志文件。我正在使用logstash syslog插件过滤器来处理这些日志。我在syslog\u message字段中收到如下消息: syslog_message:[cdp/interface.ERR] - {- -} Error writing CDP frame on system. Link is down 但是我需要一个新字段,它应该只包含.ERR之前的部分,即“cdp/interface”。这部分内容各不相同,我不知道会出现多少种类型。 所以我想要一个新的字段,并希望将该部分

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

syslog_message:[cdp/interface.ERR] - {- -} Error writing CDP frame on system. Link is down
但是我需要一个新字段,它应该只包含.ERR之前的部分,即“cdp/interface”。这部分内容各不相同,我不知道会出现多少种类型。 所以我想要一个新的字段,并希望将该部分存储到该字段中,这样我就可以在kibana中绘制这些术语的计数

当前日志存储配置:

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
任何帮助都将不胜感激。
谢谢

您可以在主
grok
过滤器中再添加一个模式,或者仅为
syslog\u消息
字段添加另一个
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" ]
    }
过滤器{
如果[类型]=“系统日志”{
格罗克{
match=>{“message”=>“%{SYSLOGTIMESTAMP:syslog\u timestamp}%{SYSLOGHOST:syslog\u hostname}%{DATA:syslog\u program}(?:\[%{POSINT:syslog\u pid}])?:%{greedyddata:syslog\u message}
add_field=>[“received_at”,“%{@timestamp}”]
add_field=>[“从”、“%{host}”接收的_]
}
#=>添加此{“syslog\u message”=>“\[%{PROG:syslog\u type}.%{LOGLEVEL:syslog\u level}\]:?%{greedydyddata:syslog\u message}
}
日期{
目标=>“系统日志\u时间戳”
匹配=>[“系统日志\u时间戳”,“MMM d HH:mm:ss”,“MMM dd HH:mm:ss”]
}
因此,您将获得两个附加字段,即:

  • syslog\u类型:cdp/接口
  • syslog\u级别:ERR

syslog_消息
只会包含在系统上写入CDP帧时发生的
-{---}错误。链接已关闭

您当前的日志存储配置是什么样子的?我使用当前的日志存储配置@Valhey进行了编辑,感谢您的快速帮助,但我获得了许多输入的grokparsefailure,例如syslog_消息:[hald.INFO]:支持查询处理程序调用了这样的输入日志,我得到了grokparsefailure。@Val请用几个失败的日志行更新您的问题。我用两个失败的输入日志@Val进行了编辑。您可以查看一下吗?我修改了我的答案,请看一看。非常感谢您的快速帮助@Val