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

时间:2019-07-17 16:40:01

标签: elasticsearch apache-kafka logstash kibana

Java应用程序超过50个(它们不是微服务,因此我们不必担心该服务的多个实例)。现在,我的架构师设计了一种解决方案,用于获取日志文件并将其输入到kafka主题中,并从kafka中将其输入logstash中并将其推入弹性搜索,以便我们可以在kibana中查看日志。现在我是Kafka和ELK堆栈的新手。有人会指导我如何执行此任务的正确方向。我了解到可以将Log4J和SLF4J配置为将日志推送到kafka主题。 1.现在如何从kafka中消费并将其加载到logstash中?我是否必须编写kafka使用者,还是可以仅通过配置来做到这一点? 2. logstash如何将日志提供给弹性搜索? 3.如何区分所有50个应用程序日志,我是否必须为每个应用程序创建主题?

我提出了业务问题,现在我需要逐步的专家建议。 -谢谢。

2 个答案:

答案 0 :(得分:0)

Logstash具有kafka输入和elasticsearch输出,因此这是Logstash端的配置。您可以使用log4j端的配置来区分应用程序(尽管使用许多主题也是可能的)。

答案 1 :(得分:0)

基本上,您的建筑师为您布置的内容可以根据其功能(在体系结构级别上)分为两个主要部分;

  1. 日志缓冲区( Kafka
  2. 日志提取器( ELK

    [Java应用程序] =====> [Kafka] ------> [ELK]

如果您学习 ELK ,您会觉得这足以解决您的问题,而 Kafka 可能显得多余。但是, Kafka 在扩展规模方面可以发挥重要作用。当许多Java应用程序将日志发送到 ELK 时, ELK 可能会变得过载并中断。 为避免 ELK 超载,您的架构师已设置了一个缓冲区( Kafka )。 Kafka 将接收来自应用程序的日志并将其排队,以防ELK处于加载状态。这样,您就不会破坏 ELK ,也不会在 ELK 挣扎时不丢失日志。

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

i- Logstash Guide or Reference ii- Input Plugins(向下滚动以找到Kafka插件)

(2)Logstash将通过 Output plugin 为Elasticsearch将收到的日志提供给Elasticsearch。 See Logstash output plugin for Elasticsearch

(3)我可能对此并不满意,但是我认为一旦从Kafka收到日志,您就可以在Logstash级别过滤和区分日志。您可以在接收时将标签或字段应用于每个日志消息。 Elasticsearch将使用这一额外信息来区分应用程序。

实施步骤

作为Kafka&ELK的新手,请按照以下步骤解决您的问题;

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

Guide to ELK Stack

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

注意事项:

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

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