ELK Stack

1. ELK经典架构

  ELK是Elasticsearch、Logstash、Kibana三个组件的缩写。

(1)Elasticsearch 是一个分布式的搜索和分析引擎,适用于所有类型的数据。根据文档中出现的每个特有词汇来建立倒排索引,这样可以近实时地对文档数据进行搜索。通过 restful API 添加,更新,检索和删除数据,以 JSON 文档的形式存储数据。

  Elasticsearch 集群使用 Master-slave 架构,实现了数据的分片和备份。

(2)Logstash 是服务器端数据处理管道,能够从多个来源动态地采集数据,转换数据,然后传输数据到存储库中。

(3)Kibana 对 Elasticsearch 数据可视化展示。

2. Filebeat + ELK

  在实际应用场景中,为了减少 Logstash 采集数据时的资源消耗,使用轻量级的 Filebeat 采集日志数据,输出到 Logstash 或 Elasticsearch。如果需要对日志数据进行过滤,可以通过 Logstash 的 filter 插件过滤处理,然后将过滤后的数据输出到 Elasticsearch 中进行存储、检索,并通过 Kibana 进行数据分析与展示。

操作步骤:

  1. 准备工作

    完成环境准备,安装Filebeat等组件。

  2. 步骤一:配置Filebeat

    配置Filebeat的input为系统日志,output为Logstash。

  3. 步骤二:配置Logstash管道

    配置Logstash管道的input为Filebeat,output为Elasticsearch,filter过滤数据。

  4. 步骤三:通过Kibana过滤日志数据

    在Kibana控制台的Discover页面,通过Filter过滤出相关的日志。

配置Filebeat:

(1)进入Filebeat安装目录,配置filebeat.yml文件。

filebeat.prospectors:
- type: log  #输入类型。log表示输入源为日志。
  enabled: true  #更改为true,使配置生效。默认false。
  paths:  #需要监控的日志文件的路径,多个日志可在下面另起一行。
   - /var/log/*.log

output.logstash:
    hosts: ["172.16.10.1:5044","172.16.10.2:5044"]  #Logstash的接入点

(2)启动Filebeat。

./filebeat -e -c filebeat.yml -d

配置Logstash管道:

  接收 filebeat 传送过来的数据,通过 logstash 做数据删选,然后传送给 Elasticsearch。

input {
  beats {
    host => "172.16.10.5"
    port => 5044
    type => "beat_type"
  }
}
filter {
}
output {
  elasticsearch {
    hosts => "172.16.10.10:9200"  #ES的地址
    index => "nginx-access-log‐%{+YYYY.MM.dd}"  #索引名称
  }
}

3. 基本概念

  • 索引是一个拥有一些相似特征的文档的集合(相当于关系型数据库中的一个数据库)。一个索引通常使用一个名称(所有字母必须小写)来标识,当针对这个索引的文档执行索引、搜索、更新和删除操作的时候,这个名称被用来指向索引。

  • 类型是一个索引的一个逻辑分类或分区,允许在一个索引下存储不同类型的文档(相当于关系型数据库中的一张表)。

  • 文档是可以被索引的基本信息单元(相当于关系型数据库中的一行数据)。文档用JSON格式来表示。在一个索引中,可以存储任意多的文档,且文档必须被索引。

  • 字段是组成文档的最小单位(相当于关系型数据库中的一列数据)。

  • 映射用来定义一个文档及其所包含的字段如何被存储和索引(相当于关系型数据库中的Schema)。例如在mapping中定义字段的名称和类型,以及所使用的分词器。

Elasticsearch关系型数据库
索引(index) 数据库(Database)
文档类型(type) 表(Table)
文档(document) 一行数据(Row)
字段(field) 一列数据(Column)
映射(mapping) 数据库的组织和结构(Schema)

  Elasticsearch集群由一个或多个ES节点组成,并提供集群内所有节点的联合索引和搜索能力(所有节点共同存储数据)。一个集群被命名为唯一的名字(默认为elasticsearch)。

  一个节点是集群中的一个服务器,用来存储数据并参与集群的索引和搜索。节点由一个名称来标识,默认情况下,该名称是在节点启动时分配给节点的随机通用唯一标识符(UUID)。一个节点可以被添加到指定名称的集群中。默认情况下,每个节点会被设置加入到名称为elasticsearch的集群中。一个集群可以拥有任意多的节点。如果在网络中没有运行任何Elasticsearch节点,此时启动一个节点会创建一个名称为elasticsearch的单节点集群。

  Elasticsearch可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。一个分片可以是主分片或副本分片。Elasticsearch 7.0以下版本默认为一个索引创建5个主分片,并分别为每个主分片创建1个副本分片,7.0及以上版本默认创建1个主分片和1个副本分片。

分片类型支持处理的请求数量是否可修改其他说明
主分片 支持处理查询和索引请求。 在创建索引时设定,设定后不可更改。 索引内任意一个文档都存储在一个主分片中,所以主分片的数量和大小决定着索引能够保存的最大数据量。
 
注意:主分片不是越多越好,因为主分片越多,Elasticsearch性能开销也会越大。
副本分片 支持处理查询请求,不支持处理索引请求。 可在任何时候添加或删除副本分片。 副本分片对搜索性能非常重要,主要体现在以下两个方面:
  • 提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。
  • 提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡。

  recovery代表数据恢复或数据重新分布,Elasticsearch在有节点加入或退出时,会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

  gateway代表Elasticsearch索引快照的存储方式,Elasticsearch默认优先将索引存放到内存中,当内存满时再将这些索引持久化存储至本地硬盘。当Elasticsearch集群关闭再重新启动时就会从gateway中读取索引备份数据。Elasticsearch支持多种类型的gateway,有本地文件系统(默认)、分布式文件系统、Hadoop的HDFS和阿里云的OSS云存储服务。

  discovery.zen代表Elasticsearch的自动发现节点机制,Elasticsearch是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议进行节点之间的通信,同时也支持点对点的交互。

  Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认使用TCP协议进行交互。同时,通过插件的方式集成,也支持使用HTTP协议(JSON格式)、thrift、servlet、memcached、zeroMQ等传输协议进行交互。

 

posted @ 2019-08-09 14:17  PIPO2  阅读(195)  评论(0编辑  收藏  举报