01 ELK 企业常见应用架构分享以及工作流程


ELK 架构介绍

核心组成

  1. ELK是一个应用套件,由Elasticsearch、Logstash和Kibana三部分组件组成,简称ELK;

  2. 它是一套开源免费、功能强大的日志分析管理系统

  3. ELK可以将我们的系统日志、网站日志、应用系统日志等各种日志进行收集、过滤、清洗,然后进行集中存放并可用于实时检索、分析。

  4. 这三款软件都是开源软件,通常是配合使用,而且又先后归于Elastic.co公司名下,故又被简称为ELK Stack。

  5. 下图是ELK Stack的基础组成。

Elasticsearch 介绍

  1. Elasticsearch是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析,采用Java语言编写。
  2. 它的主要特点如下:
1
2
3
4
5
6
7
8
9
10
# 1. 实时搜索,实时分析
# 2. 分布式架构、实时文件存储,并将每一个字段都编入索引
# 3. 文档导向,所有的对象全部是文档
# 4. 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards和Replicas)
# 5. 接口友好,支持JSO#

# 发音: 简称吧 ES
Elasticsearch
[ɪˈlæstɪk] [sɜːtʃ]
一咧四第可 色吃
  1. Elasticsearch支持集群架构,典型的集群架构如下图所示:

  1. 从图中可以看出,Elasticsearch集群中有Master Node和Slave Node两种角色,其实还有一种角色Client Node,这在后面会做深入介绍。
1
2
3
# Master Node 主节点 用于节点的协调和调度
# Slave Node 从节点 存储数据
# 客户端 -> Master 调度 -> Slave -> 数据读取或者写入

Logstash 介绍

  1. Logstash是一款轻量级的、开源的日志收集处理框架,它可以方便的把分散的、多样化的日志搜集起来,并进行自定义过滤分析处理,然后传输到指定的位置,比如某个服务器或者文件。Logstash采用JRuby语言编写。

  2. 它的主要特点如下:

1
2
3
4
# Logstash的理念很简单,从功能上来讲,它只做三件事情:
# 1. input:数据收集
# 2. filter:数据加工,如过滤,改写等
# 3. output:数据输出,日志可以传到 服务器、ELK、kafka、redis
  1. 别看它只做三件事,但通过组合输入和输出,可以变幻出多种架构实现多种需求。Logstash内部运行逻辑如下图所示:

1
2
3
4
5
6
Shipper:主要用来收集日志数据,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来,
然后经过加工、过滤,输出到Broker。 Shipper 相当于客户端,用来收集数据。

Broker:相当于日志Hub,用来连接多个Shipper和多个Indexer。

Indexer:从Broker读取文本,经过加工、过滤,输出到指定的介质(可以是文件、网络、elasticsearch等)中。
1
2
3
Redis服务器是logstash官方推荐的broker,这个broker起数据缓存的作用。
通过这个缓存器可以提高Logstash shipper发送日志到Logstash indexer的速度,
同时避免由于突然断电等导致的数据丢失。可以实现broker功能的还有很多软件,例如kafka等。
1
2
3
4
5
这里需要说明的是,在实际应用中,LogStash自身并没有什么角色,只是根据不同的功能、不同的配置给出不同的称呼而已,
无论是Shipper还是Indexer,始终只做前面提到的三件事。

这里需要重点掌握的是logstash中Shipper和Indexer的作用,因为这两个部分是logstash功能的核心,
在下面的介绍中,会陆续介绍到这两个部分实现的功能细节。

kibana 介绍

  1. Kibana是一个开源的数据分析可视化平台。

  2. 使用Kibana可以为Logstash和ElasticSearch提供的日志数据进行高效的搜索、可视化汇总和多维度分析。

  3. 还可以与Elasticsearch搜索引擎之中的数据进行交互。它基于浏览器的界面操作可以快速创建动态仪表板,实时监控ElasticSearch的数据状态与更改。

  4. kibana使用的是nodejs开发。

ELK 工作流程

  1. 在需要收集日志的所有服务上部署logstash,作为logstash shipper用于监控并收集、过滤日志。

  2. 接着,将过滤后的日志发送给Broker。

  3. 然后,Logstash Indexer将存放在Broker中的数据再写入Elasticsearch。

  4. Elasticsearch对这些数据创建索引。

  5. 最后由Kibana对其进行各种分析并以图表的形式展示。

1
2
3
4
5
6
1. 有些时候,如果收集的日志量较大,为了保证日志收集的性能和数据的完整性,
logstash shipper和logstash indexer之间的缓冲器(Broker)也经常采用kafka来实现。

2. kafka 可以将数据永久保存下来,多了一份安全性。

3. 在这个图中,要重点掌握的是ELK架构的数据流向,以及logstash、Elasticsearch和Kibana组合实现的功能细节。