1

最近我一直在阅读 Elastic stack 并发现了一个叫做 Beats 的东西,它基本上用于轻量级的托运人。

所以问题是,如果我的服务可以直接访问 Elasticsearch,我真的需要节拍吗?因为据我所知,它只是一个代理(?)

希望我的问题足够清楚

4

3 回答 3

1

不确定您具体指的是哪个节拍,但让我们以 Filebeat 为例。

假设应用程序日志需要被索引到 Elasticsearch。选项

  1. 将日志直接发布到 Elasticsearch
  2. 将日志保存到文件,然后使用 Filebeat 索引日志
  3. 将日志发布到 RabbitMQ 或 Kafka 等 AMQP 服务,然后使用 Logstash 输入插件从 RabbitMQ 或 Kafka 读取并索引到 Elasticsearch

选项 2 的好处

  • Filebeat 确保每条日志消息至少传递一次。Filebeat 能够实现这种行为是因为它将每个事件的传递状态存储在注册表文件中。在定义的输出被阻塞且未确认所有事件的情况下,Filebeat 将继续尝试发送事件,直到输出确认它已收到事件。
  • 在将数据传送到 Elasticsearh 之前,我们可以进行一些额外的处理或过滤。我们希望根据日志消息中的某些文本删除一些日志或添加其他字段(例如:将应用程序名称添加到所有日志,以便我们可以将多个应用程序日志索引到单个索引中,然后在消费端我们可以根据日志过滤在应用程序名称上。)

本质上,beats 提供了一种可靠的数据索引方式,而不会对系统造成太多开销,因为 beats 是轻量级的托运人。

选项 3 - 这也提供与选项 2 相同的好处。如果我们想将日志直接发送到外部系统而不是将其存储在本地系统的文件中,这可能会更有用。对于部署在 Docker/Kubernetes 中的任何应用程序,我们没有太多的访问权限或足够的空间来在本地系统中存储文件。

于 2020-02-21T04:11:02.397 回答
0

Beats 非常适合作为轻量级代理来收集日志文件、操作系统指标等流数据,您需要某种代理来收集和发送这些数据。如果你有一个服务想把东西放到 Elastic 中,那么是的,它可以直接使用 rest/java 等 API。

于 2019-12-04T16:27:00.073 回答
0

Filebeat 提供了一种方法来集中来自多个服务器的实时日志

假设您在不同的服务器上运行应用程序的多个实例,并且它们正在写入日志。

您可以将所有这些日志发送到单个 ElasticSearch 索引,并从那里分析或可视化它们。

单个静态文件不需要 Filebeat 即可迁移到 ElasticSearch。

于 2019-12-05T13:28:38.777 回答