ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,一般配合使用,并且又前后归于 Elastic.co 公司名下,因此被简称为 ELK Stack。根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案。安全
若是您对 ELK Stack 还尚不了解,或是想了解更多,请点击集中式日志系统 ELK 协议栈详解,查看具体介绍。服务器
ELK 经常使用架构及使用场景介绍网络
在这个章节中,咱们将介绍几种经常使用架构及使用场景。架构
最简单架构负载均衡
在这种架构中,只有一个 Logstash、Elasticsearch 和 Kibana 实例。Logstash 经过输入插件从多种数据源(好比日志文件、标准输入 Stdin 等)获取数据,再通过滤插件加工数据,而后经 Elasticsearch 输出插件输出到 Elasticsearch,经过 Kibana 展现。详见图 1。分布式
图 1. 最简单架构性能
这种架构很是简单,使用场景也有限。初学者能够搭建这个架构,了解 ELK 如何工做。搜索引擎
Logstash 做为日志搜集器加密
这种架构是对上面架构的扩展,把一个 Logstash 数据搜集节点扩展到多个,分布于多台机器,将解析好的数据发送到 Elasticsearch server 进行存储,最后在 Kibana 查询、生成日志报表等。详见图 2。spa
图 2. Logstash 做为日志搜索器
这种结构由于须要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,因此比较适合计算资源丰富的服务器,不然容易形成服务器性能降低,甚至可能致使没法正常工做。
Beats 做为日志搜集器
这种架构引入 Beats 做为日志搜集器。目前 Beats 包括四种:
Beats 将搜集到的数据发送到 Logstash,经 Logstash 解析、过滤后,将其发送到 Elasticsearch 存储,并由 Kibana 呈现给用户。详见图 3。
图 3. Beats 做为日志搜集器
这种架构解决了 Logstash 在各服务器节点上占用系统资源高的问题。相比 Logstash,Beats 所占系统的 CPU 和内存几乎能够忽略不计。另外,Beats 和 Logstash 之间支持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通讯安全。
所以这种架构适合对数据安全性要求较高,同时各服务器性能比较敏感的场景。
引入消息队列机制的架构
到笔者整理本文时,Beats 还不支持输出到消息队列,因此在消息队列先后两端只能是 Logstash 实例。这种架构使用 Logstash 从各个数据源搜集数据,而后经消息队列输出插件输出到消息队列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常见消息队列。而后 Logstash 经过消息队列输入插件从队列中获取数据,分析过滤后经输出插件发送到 Elasticsearch,最后经过 Kibana 展现。详见图 4。
图 4. 引入消息队列机制的架构
这种架构适合于日志规模比较庞大的状况。但因为 Logstash 日志解析节点和 Elasticsearch 的负荷比较重,可将他们配置为集群模式,以分担负荷。引入消息队列,均衡了网络传输,从而下降了网络闭塞,尤为是丢失数据的可能性,但依然存在 Logstash 占用系统资源过多的问题。
基于 Filebeat 架构的配置部署详解
前面提到 Filebeat 已经彻底替代了 Logstash-Forwarder 成为新一代的日志采集器,同时鉴于它轻量、安全等特色,愈来愈多人开始使用它。这个章节将详细讲解如何部署基于 Filebeat 的 ELK 集中式日志解决方案,具体架构见图 5。
图 5. 基于 Filebeat 的 ELK 集群架构
由于免费的 ELK 没有任何安全机制,因此这里使用了 Nginx 做反向代理,避免用户直接访问 Kibana 服务器。加上配置 Nginx 实现简单的用户认证,必定程度上提升安全性。另外,Nginx 自己具备负载均衡的做用,可以提升系统访问性能。