【问题标题】:Tagging the Logs by Logstash - Grok - ElasticSearch通过 Logstash 标记日志 - Grok - ElasticSearch
【发布时间】:2013-05-05 07:49:32
【问题描述】:

总结:

我正在使用 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 {}
}

我哪里出错了?

【问题讨论】:

  • 我没怎么玩过标签,但你试过删除标签行吗?我猜每个文档都应该得到 mytag 标签。

标签: elasticsearch grok logstash


【解决方案1】:

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

     add_tag => "mytag"

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

     add_tag => ["mytag"]

作为一个好的开始。仔细检查您的所有值并验证它们的类型是否适用于 logstash。

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

    tags => "mytags"

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

3) 请仔细阅读logstash docs。我对 Logstash/Grok/ES/Kibana 等世界也很陌生,但我遇到的问题与您遇到的问题非常相似,所有这些问题都通过注意文档中的内容得到了解决。

【讨论】:

    【解决方案2】:

    您可以使用 /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" 标签,无论它们是否被摸过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多