一、概述
(一)ELK由三个组件构成
ELK是三个开源软件的缩写,分别是Elasticsearch、Logstash、Kibana
(二)作用
1、日志收集
2、日志分析
3、日志可视化
(三)为什么使用ELK?
1、日志对于分析系统、应用的状态十分重要,但一般日志的量会比较大,并且比较分散。
2、如果管理的服务器或者程序比较少的情况我们还可以逐一登录到各个服务器去查看、分析。但如果服务器或者程序的数量比较多了之后这种方法就显得力不从心。基于此,一些集中式的日志系统也就应用而生。目前比较有名成熟的有,Splunk(商业)、FaceBook 的Scribe、Apache的Chukwa Cloudera的Fluentd、还有ELK等等。
二、ELK的工作流程简介
在需要收集日志的所有服务上部署Logstash,作为Logstash Agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis(消息队列缓存,避免数据丢失隐患),然后Logstash Indexer将日志收集在一起再交给ElasticSearch即全文搜索服务,可以用ElasticSearch进行自定义搜索,可以通过Kibana来结合自定义搜索进行页面展示。
三、组件简介
(一)elasticsearch
1、Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。
2、它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。主要负责将日志索引并存储起来,方便业务方检索查询。
(二)logstash
1、Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。
2、一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
3、Logstash是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。
4、Logstash工作原理:
Logstash事件处理有三个阶段:Inputs → Filters → Outputs。是一个接收、处理、转发日志的工具。支持系统日志、Webserver日志、应用日志等,几乎包含了可以抛出来的所有日志类型。
5、Input:输入数据到Logstash。
一些常用的输入为:
①File:从文件系统的文件中读取,类似于tial -f命令
②Syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析
③Redis:从redis service中读取
④Beats:从filebeat中读取
6、Filters:数据中间处理,对数据进行操作。
一些常用的过滤器为:
①Grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。
②官方提供的grok表达式:logstash-patterns-core/patterns at main · logstash-plugins/logstash-patterns-core · GitHub
③Grok在线调试:Grok Debugger
④Mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。
⑤Drop:丢弃一部分Events不进行处理。
⑥Clone:拷贝Event,这个过程中也可以添加或移除字段。
⑦Geoip:添加地理信息(为前台kibana图形化展示使用)
7、Outputs:Outputs是Logstash处理管道的最末端组件。一个Event可以在处理过程中经过多重输出,但是一旦所有的Outputs都执行结束,这个Event也就完成生命周期。
一些常见的Outputs为:
①Elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。
②File:将Event数据保存到文件中。
③Graphite:将Event数据发送到图形化组件中,踏实一个当前较流行的开源存储图形化展示的组件。
(三)Kibana
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
四、ELK优点
(一)处理方式灵活。
Elasticsearch是全文索引,既有强大的搜索能力
(二)配置相对简单。
Kibana的配置非常简单,Elasticsearch则全部使用JSON接口,配置也不复杂,Logstash的配置使用模块的方式,配置也相对简单
(三)检索性能高。
ELK架构通常可以达到百亿级数据的查询秒级响应
(四)集群线性扩展。
Elasticsearch本身没有单点的概念,自动默认集群模式,Elasticsearch和Logstash都可以
(五)灵活扩展
(六)页面美观。
Kibana的前端设计美观,且操作简单
四、ELK常见的架构举例
(一)架构一
这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用服务器CPU和内存较高。另外其没有消息队列缓存,存在数据丢失隐患。
此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询等操作。用户还可以通过配置Kibana Web方便地对日志进行查询、生成报表等。
(二)架构二
此种架构引入了消息队列机制,位于各个节点上的Logstash Agent先将数据、日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志等数据呈现给用户。因为引入了Kafka(Redis),所以即使远端Logstash Server因宕机,数据也将会先被存储下来,从而避免了数据丢失。
(三)架构三
此种架构将收集端Logstash替换为Beats,更灵活且消耗资源更少、扩展性更强。同时可配置Logstash和Elasticsearch集群用于支持大集群系统的运维日志数据监控和查询。
(四)使用ELK可以灵活的组织一套日志分析架构,再此之前需要了解一些概念或术语
- shipper, 托运的意思,作用是收集和转发日志事件,作为agent端部署在服务器上,可用使用logstash、filebeat作为shiper
- broker,接收日志事件数据,作为缓冲,可以使用redis、rabbitmq、kafka之类的作为broker
- indexer 索引数据,如logstash、elasticsearch
- storage 存储数据,如elasticsearch
- web interface 用户接口,提供web页面展示、汇总数据,比如kibana
(五)架构四
在每台服务器上部署logstash实例,对日志进行收集或处理后输出到elasticsearch、elasticsearc进行存储、索引,kibana关联索引,展示、分析数据,这种架构是常见的构架,缺点是在每台服务器上要部署logstash实例,而且还得依赖jdk,所以跑起来比较重,对资源消耗比较大,另外es是单个节点,存在单点故障,所以这种架构比较适合日志数据不大、机器少的场景.
(六)架构五
相比架构四引入broker作为缓冲, 可以使用redis、rabbitmq、kafka作为broker, 带来的好处即使后面的elaticserach挂了也不会丢数据,缺点也是一样,要在每台服务器上安装logstash,比较消耗系统资源,另外都是所有的组件都是单点,如果做集群适合日志数据比较大的场景
(七)架构六
使用filebeat代替logstash作为日志的收集和转发, filebeat是一个相比logstash更为轻量的日志收集和转发工具,filebeat收集日志并转发给logstash,logstash过滤或处理给elastic进行存储与索引。
这种架构是logstash和elasticsearch都是单点,可以做成集群
(八)架构七
相比架构六,logstash和elastic都做集群,好处是都可以横向扩展,我在生产环境就是用这种架构。这种架构比较适合日志数据很大的场景, 缺点就是服务器要求比较多, 当然实际的环境中可以跑多实例。
也可以在filebeat后面加一道borker(集群),数据先到borker然后到logstash,这样的话得要更多的机器
小结:
推荐使用filebeat作为日志的收集和转发端
如果机器预算充足可以做成集群,参加架构七