我想从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”,并且这些新字段都没有出现。 请告诉我如何获得所需的输出
答案 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"]
}
}