与其写什么是 ELK, 不如让我说明一下它的需要和用例。
日志聚合和高效搜索
在非常天真的情况下, 您有一台服务器和大量由应用程序和系统生成的日志消息, 一旦出了问题, 这些消息就必须查看。现在基本上有两个问题:
- 手动挖掘日志文件确实是不合时宜的。我们构建了所有这些软件来自动化的东西, 并在最后, 正在通过一个逐行的日志文件?此外, 我们的搜索条件是什么?我们可以肯定地利用某种 “自动化程序” 来分析基于更大和更复杂的条件, 而不是简单地对文件进行浸渍或放大。
- 第二个问题与规模有关。我们已经没有一个服务器了。我们可能有几十或几百个虚拟机在负载均衡器后面运行。我们不知道哪个服务器处理了请求, 绝对不会逐一检查所有的日志。
艾克来了
我们将生成的所有日志消息视为某种类型的事件, 并将其流式传输到按时间戳排序的单个存储中。logs/messages\ 文本的这种通灵是由logstash (elk 中的 l) 完成的。这些消息文本现在被输入到弹性集群 (e 在 ELK), 这是一个光荣的包装周围阿帕奇卢塞恩。在此之前, 将根据各种条件对消息进行预处理。弹性聚类分析器主要做一些叫做 “反向索引” 的事情。所有邮件都存储为文档, 并使用单词和短语编制索引。Kibana 充当整个堆栈的前端 UI, 提供了一个接口, 您可以在其中使用指定的查询语言查询消息, 生成 charts/可视化, 等等。
如果您正在运行一个名为 “myJavaApp” 的 Java 应用程序, 并且希望快速查看在过去15分钟内发生了哪些异常, 则可以快速打开 Kibana 仪表板并引发以下查询:
product:myJavaApp AND msg:’Exception’
这将快速加载使用关键字 “异常” 编制索引的所有文档。您可以在处理中编写越来越多的复杂查询。
通用搜索
尽管日志聚合是 ELK 堆栈的主要用例, 但它也可以用作通用文本搜索的框架, 在该框架中, 您可以利用反向索引。这可以是一项活动, 例如在网页中搜索。您还可以在系统上设置本地 ELK 堆栈, 并为您分析 sys 日志和 var 日志。