【问题标题】:Is it possible to maintain the index name from FileBeat to LogStash for Elasticsearch?是否可以为 Elasticsearch 维护从 FileBeat 到 LogStash 的索引名称?
【发布时间】:2020-07-13 12:48:57
【问题描述】:

我是 ELK 的新手,我已经设置了一个 ELK 堆栈,FileBeat 将日志发送到 LogStash 进行一些处理,然后输出到 Elasticsearch。

我想知道是否可以将 filebeat.yml 中设置的索引名称一直保持到 Elasticsearch。我想要这样做的原因是因为我想要生成日志的不同类型的应用服务器的多个索引。如果我在 logstash.conf 中省略索引,则默认为;但如果我指定一些东西,显然会生效。我只是希望它使用 FileBeat 中设置的内容。

或者有什么方法可以配置多个输出部分,在这些输出部分可以评估日志类型,以便我可以适当地命名它们?

filebeat.yml

# Optional index name. The default index name is set to filebeat in all lowercase.
  index: "something-%{+yyyy.MM.dd}"

logstash.conf

output {
  elasticsearch { 
    hosts => ["somehost:12345"]
    index => "my_filebeat_index_name_would_be_preferred-%{+yyyy-MM-dd}"
  }
}

我想继续使用 LogStash,因为我有自定义 GROK 模式等,而不是直接使用 Elastic。任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: elasticsearch logging logstash elastic-stack filebeat


    【解决方案1】:

    您可以在 filebeat.yml 中指定的索引名称仅适用于 elasticsearch 输出,因为 filebeat 直接连接到您的集群。但是,如果您使用 Logstash 作为您的 filebeat-destination,这是不可能的。

    问:或者有什么方法可以配置多个输出部分,以便评估日志类型以便我可以适当地命名它们?

    是的,这在 Logstash 管道中是绝对可行的(并且有些常见)。因此,首先您需要为您的日志设置某些标准/标记,以便让 Logstash 选择正确的弹性搜索输出(以及正确的索引)。您可以通过标签来实现这一点。因此,例如 A 类的所有日志/事件都会获得标签“tag_A”(您可以为特定日志输入中的每个日志源或通常在 filebeat.yml 中单独设置它们)。

    下一步是在 logstash 管道中实现标签值的评估。你可以这样做:

    output{
      if "tag_A" in [tags]{
        elasticsearch {
          hosts => ["somehost:12345"]
          index => "index-A-%{+yyyy-MM-dd}"
        }
      }
      else if "tag_B" in [tags]{
        elasticsearch {
          hosts => ["somehost:12345"]
          index => "index-B-%{+yyyy-MM-dd}"
        }
      }
    }
    

    这种 if-else 结构让您可以将数据索引到各种索引中。

    希望能帮到你。

    编辑:

    您的评价不仅限于标签。您可以评估文档中包含的任何字段,例如文件名、主机名等。

    您可能需要查看此参考 (https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html),了解如何在 Logstash 配置中访问字段值、执行条件等。

    编辑 2:

    更复杂的方法是在您的文档中添加一个包含确切目标索引名称的字段(通过日志输入或 filebeat.yml 中的字段选项)。使用这种方法,不再需要在 Logstash 管道中进行评估,因为您可以根据字段值动态设置索引设置的值。

    假设您将此字段标记为destination_index,那么您可以实现如下输出插件:

    output{
      if [destination_index]{   #optional check for field's existance in document
        elasticsearch {
          hosts => ["somehost:12345"]
          index => "%{[destination_index]}-%{+yyyy-MM-dd}"
        }
      }
    }
    

    【讨论】:

    • 非常感谢您的帮助!
    • 不客气!很高兴我能帮助你。您可能想看看我的第二次编辑,因为它为您提供了另一种更优雅的方法。
    • 解决方案 2 绝对干净得多。现在一切都很好。谢谢你的朋友。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2017-02-22
    • 2018-10-02
    • 1970-01-01
    • 2021-09-17
    • 2020-05-28
    相关资源
    最近更新 更多