通过Logstash标记日志 - Grok - ElasticSearch

时间:2013-05-10 15:12:42

标签: elasticsearch grok logstash

要点:

我正在使用Logstash - Grok和弹性搜索,我的主要目的是首先通过logstash接受日志,通过grok解析它们并根据日志类型将标记与消息关联,然后最终将其提供给要使用Kibana进行查询的弹性服务器。

我已编写此代码,但无法在Elastic Search中获取代码。 这是我的logstash confif文件。

input {
  stdin {
    type => "stdin-type"
  }
}
filter {
  grok {
    tags    => "mytags"
    pattern => "I am a %{USERNAME}"
    add_tag => "mytag"
    named_captures_only => true
  }
}
output {
  stdout { debug => true debug_format => "json"}
  elasticsearch {}
}

我哪里错了?

2 个答案:

答案 0 :(得分:3)

1)我首先要编辑您的值以匹配它们所代表的数据类型。例如

     add_tag => "mytag"

实际上应该有一个数组作为它的值,而不是一个简单的字符串。将其更改为

     add_tag => ["mytag"]

作为一个良好的开端。仔细检查所有值并验证它们是否为正确的logstash类型。

2)您正在将grok过滤器限制为已根据配置行标记为“mytags”的消息

    tags => "mytags"

我没有看到您提前添加该标签的任何地方。因此,您的消息的甚至会通过您的grok过滤器。

3)请仔细阅读logstash docs。我对Logstash / Grok / ES / Kibana等世界也很陌生,但我遇到过与你所拥有的问题非常相似的问题,所有问题都是通过关注文档所说的来解决的。

答案 1 :(得分:1)

你可以用/opt/logstash/bin/logstash -f $CONFIG_FILE手动运行LogStash(你可能已经这样做了)并且可以检查你的配置文件是否对/opt/logstash/bin/logstash -f $CONFIG_FILE --configtest有效我打赌你已经这样做了。

可能需要将您的add_tag节放入数组

grok {
    ...
    add_tag => [ "mytag" ]
}

也可能是你在STDIN中输入的内容在grok模式中没有匹配。如果grok不匹配应该会导致_grokparsefailure添加到您的代码中。如果你看到那些,就意味着你的grok模式没有被触发。

更好的方法可能是......

input {
  stdin {
    type => 'stdin'
  }
}
filter {
  if [type] = 'stdin' {
    mutate {
     add_tag => [ "mytag" ]
    }
  }
}
output {
  stdout {
    codec => 'rubydebug'
  }
}

这会为所有来自标准版本的内容添加"mytag"标记,无论是否被删除。