2019玩转ELK(ElasticSearch + LogStash + Kibana = ELKStack),轻松几步搭建ELK环境,对数据进行实时监控和分析(上)

一、组件介绍

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速,近实时地存储,搜索和分析大量数据。它通常用作支持具有复杂搜索功能和需求的应用程序的底层引擎/技术。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana:Web前端,可以将ElasticSearch检索后的日志转化为各种图表,为用户提供数据可视化支持。

Winlogbeat:轻量型windows事件日志采集器,负责采集wondows的事件日志,并将采集来的日志推送给logstash进行处理。

Filebeat:轻量型日志采集器,负责采集文件形式的日志,并将采集来的日志推送给logstash进行处理。
FileBeat是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方推荐。
Filebeat隶属于Beats,目前Beats包含四种工具:
Packetbeat(搜集网络流量数据)
Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
Filebeat(搜集文件数据)

二、资源下载

以下的资源都可以去相应的官网进行,如果不会*,觉得下载太慢或者觉得麻烦,可以直接到下面的地址进行下载,所用资源均在里面。地址:https://me.csdn.net/download/u014374009

三、最终效果

部分截图:
2019玩转ELK(ElasticSearch + LogStash + Kibana = ELKStack),轻松几步搭建ELK环境,对数据进行实时监控和分析(上)

四、环境搭建

1、 安装jdk,至少1.8以上的版本,下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html;

2、 配置java环境变量,参考地址:https://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html;

3、 下载ELK,ElasticSearch(ES)、Logstash和Kibana,下载地址:https://www.elastic.co/downloads/;

4、 安装ES,cmd进入elasticsearch的bin目录,运行elasticsearch-service install,安装ES服务;运行 elasticsearch-service manager,管理配置ES,点击Start启动服务,下方的Startup type设置为Automatic最好;至此,ES服务安装配置基本完成。

5、 打开浏览器,输入http://localhost:9200/,进行验证,没有出错,返回一串json数据表示安装成功。

6、 下载nodejs,下载地址:https://nodejs.org/en/; 下载完成安装,一直next即可,保持默认选项;

7、 Cmd进入dos命令界面,执行node -v查看是否成功;

8、 在nodejs目录下执行 npm install -g grunt-cli 安装grunt ,-g代表全局安装,安装路径为C:\Users\yourname\AppData\Roaming\npm,安装完成后执行grunt -version查看是否安装成功,会显示安装的版本号。

9、 修改config目录下的elasticsearch.yml文件,如下所示:

10、 重新启动ES服务,这个可以在serrvices.msc上启动,也可在bin目录下输入elasticsearch-service start启动。

11、 把head的源码clone过来,在此之前需要在git官网安装git,然后在ES的bin目录下执行git clone git://github.com/mobz/elasticsearch-head.git。

12、 在Gruntfile.js修改head插件源码,找到connect的地方,修改如下:

13、 在elasticsearch-head目录下运行,下面的命令:

14、 输入localhost:9100,可查看集群状态,至此ES成功安装。

15、 在logstash文件夹的bin目录里新建logstash.conf配置文件,具体内容如下,具体参数可以自定义:

16、 在bin目录中新建logstash启动文件run.bat,内容如下:

17、 下载nssm,下载地址:http://nssm.cc/download; 根据操作系统的位数是32还是64,取出对应的nssm.exe,放入bin目录下。

18、 安装logstash到windows服务:从nssm官网下载nssm压缩包,根据操作系统是32位还是64位提取出压缩包中的nssm.exe,拷贝到logstash的bin目录下,在cmd中运行nssm install logstash,出现安装界面并填写相应的内容,在依赖(dependencies)里面根据填写如下内容(注意:Java是32位的后缀是x86,64位的是x64)。添加依赖的原因是,logstash的输出配置的是Elasticsearch,如果Elasticsearch没有启动,logstash无法正常工作。

19、 最后单击install service按钮,执行安装过程(注意这里若出现警告的话,选择允许执行全部操作)。

20、 安装Kibana服务和logstash服务步骤基本相同,将nssm.exe拷贝到kibana的bin目录下,在cmd中运行nssm install kibana,填写如下内容,最后单击install service按钮,执行安装过程:

21、 在cmd中运行services.msc打开windows服务,依次启动如下服务:
Elasticsearch->Logstash->Kibana
在浏览器中输入:http://localhost:5601/ ,如果出现如下界面,表示服务启动成功:

22、 至此,所有服务安装完成,平台搭建完成,后续集群的部署还需要在ELK的各个配置文件中进行详细的配置。

五、基本概念

接近实时(NRT)

Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是 1 秒)。

集群(cluster)

代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

索引(index)

ElasticSearch将它的数据存储在一个或多个索引(index)中。用SQL领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch内部使用Lucene将数据写入索引或从索引中检索数据。

文档(document)

文档(document)是ElasticSearch中的主要实体。对所有使用ElasticSearch的案例来说,他们最终都可以归结为对文档的搜索。文档由字段构成。

映射(mapping)

所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。

类型(type)

每个文档都有与之对应的类型(type)定义。这允许用户在一个索引中存储多种文档类型,并为不同文档提供类型提供不同的映射。

分片(shards)

代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。5.X默认不能通过配置文件定义分片。

副本(replicas)

代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

数据恢复(recovery)

代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
GET /_cat/health?v #可以看到集群状态。

数据源(River)

代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的,river这个功能将会在后面的文件中重点说到。

网关(gateway)

代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

自动发现(discovery.zen)

代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
5.X关闭广播,需要自定义。

通信(Transport)

代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。
节点间通信端口默认:9300-9400。

分片和复制(shards and replicas)

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点可能没有这样大的磁盘空间来存储或者单个节点处理搜索请求,响应会太慢。

为了解决这个问题,Elasticsearch提供了将索引划分成多片的能力,这些片叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引” 可以被放置到集群中的任何节点上。

分片之所以重要,主要有两方面的原因:

允许你水平分割/扩展你的内容容量
允许你在分片(位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。
在一个网络/云的环境里,失败随时都可能发生。在某个分片/节点因为某些原因处于离线状态或者消失的情况下,故障转移机制是非常有用且强烈推荐的。为此, Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。

复制之所以重要,有两个主要原因:

在分片/节点失败的情况下,复制提供了高可用性。复制分片不与原/主要分片置于同一节点上是非常重要的。因为搜索可以在所有的复制上并行运行,复制可以扩展你的搜索量/吞吐量
总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(即没有复制) 或多次。一旦复制了,每个索引就有了主分片(作为复制源的分片)和复制分片(主分片的拷贝)。
分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你不能再改变分片的数量。
5.X默认5:1 5个主分片,1个复制分片
默认情况下,Elasticsearch中的每个索引分配5个主分片和1个复制。这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样每个索引总共就有10个分片。