无法在logstash中使用add_field

时间:2013-11-30 15:41:20

标签: configuration logstash

我想从logstash中的文本中提取界面字。

示例日志 - 2013年8月28日13:14:49 logFile:接口Etherface1 / 9关闭(收发器缺席)

我想从中提取“Etherface1 / 9”并将其添加为名为interface的字段。

我正在使用以下配置文件

input
{
        file
        {
                 type => "syslog"
                 path => [ "/home/vineeth/logstash/mylog.log" ]
                 #path => ["d:/New Folder/sjdc.show.tech/n5k-3a-show-tech.txt"]
                 start_position=>["beginning"]
        }
}
filter {
  grok {
    type => "syslog"
    add_field => [ "port", "Interface %{WORD}" ]
  }
}
output
{
        stdout
        {
                debug => true debug_format => "json"
        }
        elasticsearch
        {
                embedded => true
        }
}

但是我总是在标签下面得到“_grokparsefailure”,并且这些新字段都没有出现。 请告诉我如何获得所需的输出

1 个答案:

答案 0 :(得分:1)

grok过滤器希望您尝试匹配某些文字。由于您没有传递任何可能的匹配项,因此会触发_grokparsefailure标记(每the manual},标记会在“没有成功匹配时”添加。)

你可以使用这样的匹配:

grok {
    match => ["message", "Interface %{DATA:port} is down"]
}

如果匹配文本不存在,这仍然会失败。 Logstash非常擅长使用简单的结构解析字段,但嵌入在用户友好字符串中的数据有时很棘手。通常,您需要根据消息格式进行分支。

这是一个非常简单的示例,使用带有正则表达式的conditional

if [message] =~ /Interface .+ is down/ {
    grok {
        match => ["message", "Interface %{DATA:port} is down"]
    }
}