使用 Kafka 和 ELK 堆栈进行集中式日志记录



有 50 多个 Java 应用程序(它们不是微服务,所以我们不必担心服务的多个实例)。现在,我的架构师设计了一个解决方案来获取日志文件并馈送到 kafka 主题中,并从 kafka 将其馈送到 logstash 中并将其推送到弹性搜索中,以便我们可以在 kibana 中查看日志。现在我是Kafka和ELK堆栈的新手。有人会指出我如何完成这项任务的正确方向吗?我了解到 Log4J 和 SLF4J 可以配置为将日志推送到 kafka 主题。 1.现在如何从卡夫卡消费并将其加载到logstash中?我是否必须编写一个 kafka 消费者,或者我们只需通过配置就可以做到这一点? 2. 日志将如何将日志馈送到弹性搜索? 3. 如何区分所有 50 个应用程序日志,我是否必须为每个应用程序创建主题?

我把业务问题,现在我需要一步一步的专家建议。 - 提前感谢。

本质上,您的架构师为您布置的内容可以根据其功能(在架构级别)分为两个主要组件;

  1. 日志缓冲区 (Kafka)
  2. Log Ingester (ELK)

    [Java Applications] ======>[Kafka]------>[ELK]

如果你研究ELK,你会觉得它足以解决你的问题,而Kafka会显得多余。然而,卡夫卡在规模方面发挥着重要作用。当您的许多 Java 应用程序将日志发送到 ELK 时,ELK可能会过载并中断。为了避免ELK过载,您的架构师设置了一个缓冲区 (Kafka)。Kafka将从应用程序接收日志,并在 ELK 负载不足时将其排队。通过这种方式,您不会破坏ELK,也不会在ELK挣扎时丢失原木。

以相同的顺序回答您的问题; (1)Logstash 有"输入"插件,可用于在 Kafka 和 Logstash 之间建立链接。阅读 Logstash 及其插件。

i- 日志存储指南或参考 ii-输入插件(向下滚动以查找Kafka插件)

(2) Logstash 会通过 Elasticsearch 的输出插件将收到的日志提供给 Elasticsearch。请参阅 Elasticsearch 的 Logstash 输出插件。

(3)我可能对此不准确,但我认为一旦您从Kafka收到日志,您就可以在Logsash级别过滤和区分日志。您可以在接收时将标记或字段应用于每条日志消息。Elasticsearch 将使用这些信息来区分应用程序。

实施步骤

作为 Kafka 和 ELK 的新手,请按照以下步骤处理您的解决方案;

第 1 步:首先设置 ELK。完成此操作后,您将能够看到日志的可视化方式,并且最终解决方案的外观将变得更加清晰。

麋鹿栈指南

第 2 步:设置 Kafka 以将您的应用程序日志链接到 ELK。

警告:

  1. 您可能会发现ELK有一些不错的学习曲线。需要花费大量时间来了解 ELK 堆栈中的每个元素的工作原理以及它各自的配置和语言是什么。

  2. 要深入了解 ELK,请使用在系统上设置 ELK 的本地部署路径。就此而言,避免使用云 ELK 服务。

Logstash 有一个 kafka 输入和一个 elasticsearch 输出,所以这是 logstash 端的配置。您可以使用 log4j 端的配置来区分应用程序(尽管使用许多主题是另一种可能性)。

最新更新