是否可以为 Elasticsearch 维护从 FileBeat 到 LogStash 的索引名称?

Is it possible to maintain the index name from FileBeat to LogStash for Elasticsearch?

我真的是 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。任何帮助将不胜感激。

谢谢。

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

Q: Or is there some way to configure multiple output sections where log types can be evaluated so I can name them appropriately?

是的,这在 Logstash 管道中是绝对可能的(并且有些常见)。所以首先你需要为你的日志设置某些 criteria/marks 以便让 Logstash 选择正确的 elasticsearch 输出(以及正确的索引)。您可以通过标签实现此目的。因此,例如,类别 A 的所有 logs/events 都获得标签 "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}"
    }
  }
}