1、简介
ELK由ElasticSearch、Logstash和Kibana三个开源工具组成,不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Agent),Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
- Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式、零配置、自动发现、索引自动分片、索引副本机制、restful风格接口、多数据源、自动搜索负载等,ELK官网:https://www.elastic.co/ ;
- Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。工作方式为C/S架构,Client端安装在需要收集日志的主机上,Server端负责将收到的各节点日志进行过滤、修改等操作再一并发往Elasticsearch服务器;
- Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 的日志分析提供友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志;
- FileBeat是一个轻量级日志采集器,Filebeat属于Beats家族的6个成员之一,早期的ELK架构中使用Logstash收集、解析日志并且过滤日志,但是Logstash对CPU、内存、IO等资源消耗比较高,相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计;
- Logstash和Elasticsearch是用Java语言编写,而Kibana使用node.js框架,在配置ELK环境要保证系统有JAVA JDK开发库;
2、原理剖析
2.1、架构简析
如果没有使用Filebeat,那么由Logstash收集日志,进行过滤处理,并且将数据发往elasticsearch,再通过Kibana进行展示。
如果使用Filebeat,Logstash从FileBeat获取日志文件。Filebeat作为Logstash的输入input将获取到的日志进行处理,将处理好的日志文件输出到Elasticsearch进行处理,再通过Kibana进行展示。
2.2 ELK工作流程
客户端安装Logstash日志收集工具,通过logstash收集客户端APP的日志数据,将所有的日志过滤出来,存入Elasticsearch 搜索引擎里,然后通过Kibana GUI在WEB前端展示给用户,用户需要可以进行查看指定的日志内容。同时也可以加入redis通信队列.
2.3 加入Redis队列后工作流程
Logstash包含Index和Agent(shipper) ,Agent负责客户端监控和过滤日志,而Index负责收集日志并将日志交给ElasticSearch,ElasticSearch将日志存储本地,建立索引、提供搜索,kibana可以从ES集群中获取想要的日志信息。
2.4 ELFK工作流程
1)、使用FileBeat获取Linux服务器上的日志。当启动Filebeat时,它将启动一个或多个Prospectors (检测者),查找服务器上指定的日志文件,作为日志的源头等待输出到Logstash。
2)、Logstash从FileBeat获取日志文件。Filebeat作为Logstash的输入input将获取到的日志进行处理,Logstash将处理好的日志文件输出到Elasticsearch进行处理。
3)、Elasticsearch得到Logstash的数据之后进行相应的搜索存储操作。将写入的数据可以被检索和聚合等以便于搜索操作,最后Kibana通过Elasticsearch提供的API将日志信息可视化的操作。
3、Elasticsearch 部署
首先需要配置jdk。
[root@localhost src]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz
[root@localhost src]# tar xzf elasticsearch-5.3.0.tar.gz
[root@localhost src]# mv elasticsearch-5.3.0 /usr/local/elasticsearch
[root@localhost src]# cd /usr/local/
# 修改监听IP为全网段,当然也可以设置固定
[root@localhost local]# vim /usr/local/elasticsearch/config/elasticsearch.yml
network.host: 0.0.0.0
[root@localhost local]# ./elasticsearch/bin/elasticsearch -d
[root@localhost local]# ps -ef|grep elasticsearch
root 7084