ELK栈中Logstash Shipper和Logstash Indexer的作用是什么?

What is the role of Logstash Shipper and Logstash Indexer in ELK stack?

我一直在为我的新项目在线学习 ELK 堆栈。

尽管大多数技术博客都是关于如何设置 ELK 的。

尽管我需要更多信息才能开始。

  1. 什么是 Logstash?此外,Logstash Shipper 和 Indexer。
  2. Elasticsearch 的作用是什么?

如果没有正确的答案,任何线索也将不胜感激。

我将尝试通过示例向您解释 elk 堆栈。

应用程序在我们集群中的任何机器上生成都具有相同格式(时间戳|日志级别|消息)的日志,并将这些日志写入某个文件。

Filebeat(来自 elk 的 logshipper)跟踪该文件,定期收集文件的任何更新并通过网络将它们转发到 logstash。与 logstash 不同,Filebeat 是一个使用很少资源的轻量级应用程序,所以我不介意 运行 它在集群中的每台机器上。它注意到 logstash 何时关闭并等待传输数据,直到 logstash 再次 运行(没有日志丢失)。

Logstash 通过网络接收来自所有 log shiller 的消息并对消息应用过滤器。在我们的例子中,它将每个条目拆分为时间戳、日志级别和消息。这些是单独的字段,以后可以轻松搜索。任何不符合该格式的消息都将获得一个字段:无效的日志格式。这些带有字段的消息现在以弹性搜索可以处理的速度转发到弹性搜索。

Elastic search 存储所有消息和索引(准备快速搜索)消息中的所有字段。这是我们的数据库。

然后我们使用 Kibana(也来自 elk)作为访问日志的图形用户界面。在 kibana 中,我可以做类似的事情:显示今天下午 3 点到 5 点之间的所有日志,日志级别错误,其消息包含 MyClass。 Kibana 将向 elasticsearch 询问结果并显示它们

我不知道,如果这有帮助,但是......无论如何......让我们举一个非常愚蠢的例子:我想统计我附近的松鼠。每只松鼠都有一个名字,我们知道它们长什么样。每当看到松鼠吃坚果时,每个邻居都会记录下来。

ElasticSearch 是一个文档数据库,它在所谓的索引中构建数据。它能够在多个服务器上冗余地保存这些索引的片段(碎片),并为您提供强大的搜索功能。因此您可以非常快速地访问大量数据。

这里我们可能已经完成了如下所示的事件:

{
  "_index": "squirrels-2018",
  "_id": "zr7zejfhs7fzfud",
  "_version": 1,
  "_source": {
    "squirrel": "Bethany",
    "neighbor": "A",
    "@timestamp": "2018-10-26T15:22:35.613Z",
    "meal": "hazelnut",
  }
}

Logstash 是数据收集器和转换器。它能够通过其输入插件接受来自许多不同来源(文件、数据库、传输协议……)的数据。使用其中一个输入插件后,所有数据都存储在一个事件对象中,可以使用过滤器进行操作(添加数据、删除数据、从其他来源加载其他数据)。当数据具有所需的格式时,它可以分发到许多不同的输出。

如果邻居 A 提供了一个包含 'squirrel'、'time' 和 'ate' 列的 MySQL 数据库,但邻居 B 喜欢用 [=28] 列编写 CSV =]、'nut' 和 'when',我们可以使用 Logstash 来接受这两个输入。然后我们重命名字段并解析这些邻居可能使用的不同日期时间格式。如果其中一位喜欢给 Bethany 'Beth' 打电话,我们可以更改此处的数据以使其保持一致。最终我们将结果发送到 ElasticSearch(可能还有其他输出)。

Kibana 是一个可视化工具。它使您可以概览索引结构和服务器状态,并为 ElasticSearch 数据创建图表

在这里我们可以制作有趣的图表,例如 'Squirrel Sightings Per Minute' 或 'Fattest Squirrel (based on nut intake)'