ELKstack 生产架构详解

一、简介

ELK 由ElasticsearchLogstashKibana三部分组件组成;

Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。

Logstash 是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用

kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

redis 缓存或中间件 本次没有添加,如果您的业务需要,自己加入即可,主要功能 解耦 异步提高效率。
也可以对 Kubernetes 集群进行日志的收集,具体的应用,请查阅 K8S 专栏。

ELKstack 官方网站

二、Elkstack 常见架构

1 Elasticsearch + Logstash + Kibana

  • 这是一种最简单的架构。这种架构,通过 logstash 收集日志,Elasticsearch 分析日志,然后在 Kibana(web 界面) 中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。

2 Elasticsearch + Logstash + filebeat + Kibana

  • 本次部署采用这种架构,架构图见文章头部
  • 与上一种架构相比,这种架构增加了一个filebeat模块。filebeat 是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源 (较 logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当 logstash 出现故障, 会造成日志的丢失。

3 Elasticsearch + Logstash + filebeat + redis

  • Kibana+Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如 kafka)
  • 这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当 Logstash 出现故障,日志还是存在中间件中,当 Logstash 再次启动,则会读取中间件中积压的日志。目前我司使用的就是这种架构,我个人也比较推荐这种方式。