ELK日志分析系统的应用
收集和分析日志是应用开发中至关重要的一环,互联网大规模、分布式的特性决定了日志的源头越来越分散,
产生的速度越来越快,传统的手段和工具显得日益力不从心。在规模化场景下,grep、awk 无法快速发挥作用,我们需要一种高效、灵活的日志分析方式,可以给故障处理,问题定位提供更好的支持。基于全文搜索引擎 Lucene 构建的 ELKstack 平台,是目前比较流行的日志收集方解决方案。
ELK系统的部署按照官方文档操作即可,相关资料也很多,这篇文章更多的关注三个组件的设计和实现,帮助大家了解这个流行的日志收集系统,
ELK统一日志系统
结合Logstash,ElasticSearch和Kibana三个组件,可以搭建一套高效的日志收集和分析系统。
ELK日志系统数据流图
ELK stack支持组件间的灵活组合,提供强大的开箱即用的日志收集和检索功能。

可以看到ELK系统进行日志收集的过程可以分为三个环节:
- 日志收集和导入ElasticSearch
- ElasticSearch进行索引等处理
- 可视化操作,查询等
Logstash可以结合Redis或者kafka等收集应用服务器产生的日志,经过简单的过滤等操作后发送到ElasticSearch,ElasticSearch进行相关的索引处理,最后在Kibana进行相关的可视化操作。
Logstash进行日志采集
Logstash 是一种功能强大的信息采集工具,类似于同样用于日志收集的 Flume。
Logstash通过配置文件规定 Logstash 如何处理各种类型的事件流,一般包含 input、filter、output 三个部分。
Logstash 为各个部分提供相应的插件,通过 input、filter、output 三类插件完成各种处理和转换,
另外 codec 类的插件可以放在 input 和 output 部分通过简单编码来简化处理过程。
1.Logstash架构
Logstash使用Jruby语言编写,对于使用者来讲,Logstash本身是基于命令行界面,面向任务处理的。
Logstash的软件架构是一种带有“管道-过滤器”风格的插件式架构,作为一个开源软件,Logstash遵循Apache 2.0进行开源,第三方社区为其贡献了大量插件。

这张数据流图来自官方社区,可以看到Logstash的运行时数据处理会经历三个阶段:
输入阶段 接受不同来源的数据流入,可以配置codec插件进行简单的处理。
过滤阶段 对流入数据进行过滤等操作,传递给output,其中“输入”与“输出”是必须有的,“过滤”阶段是可选的。
输出阶段 将数据传递到消息队列,文件系统等进行进一步处理,在ELK的日志系统中,输出到ElasticSearch索引中。
三个阶段的处理任务是异步的,不存在跨阶段任务执行与同一个线程中的情况。
2.Logstash如何应用
Logstash可以通过指定配置文件直接启动,下面是一份典型的配置示例:
# 读取access.log日志并输出到控制台
input {
filex {
path => ["/Users/bingyue/Work/workspace/access.log"]
}
}
output {
stdout {
}
}
ElasticSearch的设计和应用
ElasticSearch是一个开源搜索服务器项目,2010年2月发布至今,该项目已发展成为搜索和数据分析解决方案领域的主要一员。ES的实现和应用包括非常多的内容,这里我们只简单了解,从整体架构入手,做到对ES有一个初步的认识。
1.ElasticSearch架构
ElasticSearch基于Apache Lucene实现,Lucene是一个成熟的、高性能并且可扩展的搜索引擎包, ElasticSearch在Lucene之上封装了索引,查询,以及分布式相关的接口。
2.Elasticsearch概念
- 节点(Node)和集群(Cluster)
节点是集群中的一个 Elasticearch 实例。 集群是一组拥有共同的 cluster name 的节点。其中一个节点就是一个 ES 进程,多个节点组成一个集群。一般每个节点都运行在不同的操作系统上,配置好集群相关参数后 ES 会自动组成集群。集群内部通过 ES 的选主算法选出主节点,而集群外部则是可以通过任何节点进行操作,无主从节点之分,对外表现对等,去中心化,有利于客户端编程。
- 索引 Index
索引在ES中索引有两层含义, 作为动词,它指的是把一个文档保存到 ES 中的过程,索引一个文档后,我们就可以使用 ES 搜索到这个文档; 作为名词,它是指保存文档的地方,相当于关系数据库中的database概念,一个集群中可以包含多个索引。
- 分片 shard
ES 是一个分布式系统,它保存索引时会选择适合的“主分片”(Primary Shard),把索引保存到其中(我们可以把分片理解为一块物理存储区域)。分片的分法是固定的,而且是安装时候就必须要决定好的(默认是 5),后面就不能改变了。
既然有主分片,那肯定是有“从”分片的,在 ES 里称之为“副本分片”(Replica Shard)。副本分片主要有两个作用: 高可用:某分片节点挂了的话可走其他副本分片节点,节点恢复后上面的分片数据可通过其他节点恢复 负载均衡:ES 会自动根据负载情况控制搜索路由,副本分片可以将负载均摊
- RESTful支持
ES支持RESTful访问,并且 ES 的 HTTP 接口不只是可以进行业务操作(索引/搜索),还可以进行一些配置等。
下面介绍几个很常用的接口:
/_cat/nodes?v:查集群状态 /_cat/shards?v:查看分片状态 /${index}/${type}/_search:搜索
我们也可以直接在所有索引所有类型上进行搜索:/_search。
除了上面这些,ES官方社区还给出了一些关键术语解释:
- document 文档
一个文档就是一个保存在 es 中的 JSON 文本,可以把它理解为关系型数据库表中的一行。每个文档都是保存在索引中的,拥有一种类型和 id。一个文档是一个 JSON 对象(一些语言中的 hash / hashmap / associative array)包含了 0 或多个字段(键值对)。原始的 JSON 文本在索引后将被保存在 _source 字段里,搜索完成后返回值中默认是包含该字段的。
- id
Id 是用于标识文档的,一个文档的索引/类型/id 必须是唯一的。文档 id 是自动生成的(如果不指定)。
- field 字段
一个文档包含了若干字段,或称之为键值对。字段的值可以是简单(标量)值(例如字符串、整型、日期),也可以是嵌套结构,例如数组或对象。一个字段类似于关系型数据库表中的一列。每个字段的映射都有一个字段类型(不要和文档类型搞混了),它描述了这个字段可以保存的值类型,例如整型、字符串、对象。映射还可以让我们定义一个字段的值如何进行分析。
- mapping 映射
一个映射类似于关系型数据库中的模式定义。每个索引都存在一个映射,它定义了该索引中的每一种类型,以及索引相关的配置。映射可以显示定义,或者在文档被索引时自动创建。
3.ElasticSearch的应用场景
ElasticSearch的应用场景主要发挥其强大的全文搜索功能,因为良好的分布式支持,一些公司也会使用ES作为文档型数据库,类似MongoDB等的应用。
- 全文搜索 应用最为广泛,ES加上分词插件、拼音插件什么的可以做成强大的全文搜索引擎
- 数据库存储 主要关注ES的强大统计分析汇总能力,再加上分布式扩展能力
- 在线统计分析引擎,日志系统 结合logstash等组件,可以实时动态分析数据
Kibana进行可视化分析
Kibana应用在ElasticSearch之上,提供可视化的数据查询和分析等功能, 主要的版本有Kibana 3和Kibana 4,两者在设计上区别较大,这里主要介绍k4的应用。
要使用Kibana,就得告诉它想要探索的 Elasticsearch 索引是那些,需要配置一个或者多个索引模式。 默认情况下,Kibana 认为你要访问的是通过 Logstash 导入 Elasticsearch 的数据,这时候使用默认的 logstash-* 作为index pattern。 Kibana 数据展示需要一个包含了时间戳的索引字段,用来做基于时间的处理,如果是由logstash导入的日志,使用默认的@timestamp即可。

连接到Elasticsearch以后,就可以使用kibana进行数据的分析。
kibana的面板支持以下的功能:
- 在 Discover 页搜索和浏览数据
- 在 Visualize 页转换数据成图表
- 在 Dashboard 页创建定制自己的仪表板
1.搜索和浏览数据
Discover 标签页用于交互式探索数据。可以访问到匹配得上选择的索引模式的每个索引的每条记录。可以提交搜索请求,过滤搜索结果,然后查看文档数 据。还可以看到匹配搜索请求的文档总数,获取字段值的统计情况。如果索引模 式配置了时间字段,文档的时序分布情况会在页面顶部以柱状图的形式展示出来。
kibana支持Lucene格式的检索方式。包括:
(1)简单的文本搜索,直接输入文本字符串。
比如,如果在搜索网站服务器日志,可以输入exception来搜索各字段中的exception单词。
(2)搜索特定字段中的值,
搜索特定字段中的值,则在值前加上字段名。比如,可以输入 status:200 来限制搜索,要搜索一个值的范围,可以用范围查询语法,
(3)使用连接条件进行复杂搜索
要指定更复杂的搜索标准,可以用布尔操作符AND, OR和 NOT 。
2.数据转换成图表
Visualize 标签页用来设计可视化。 支持各种图表进行展示。
数据源可以选择新建或者读取一个已保存的搜索。搜索是和一个或者一系列索引相关联的。如果选择了在一个配置了多个索引的系统上开始新搜索,从可视化编辑器的下拉菜单里选择一个索引模式。
3.自定义仪表盘
Kibana dashboard 能支持自由排列一组已保存的视图。然后可以保存这个仪表板,用来分享或者重载。
(1)创建新的仪表盘
第一次点击 Dashboard 标签的时候,Kibana 会显示一个空白的仪表板。 通过添加可视化的方式来构建仪表板。
要添加视图到仪表板上,点击工具栏面板上的 Add。从列表中选择一个已保存的视图。可以在 Visualization Filter 里输入字符串来过滤想要找的视图。 你选择的这个视图会出现在仪表板上的一个容器(container)里。
(2)修改仪表盘信息
仪表板里的可视化都存在可以调整大小的容器里,点击容器右上角的 Edit 按钮在 Visualize 页打开可视化编辑。
以上是关于ELK组件的介绍,在具体的日志系统搭建中,有很多细节需要注意。另外随着容器化部署的兴起,日志收集的方式也变的更多样化,后面会分享下关于ELK结合容器内日志收集的方案。
ELK日志分析系统的应用的更多相关文章
- ELK日志分析系统简单部署
1.传统日志分析系统: 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安 ...
- Rsyslog+ELK日志分析系统
转自:https://www.cnblogs.com/itworks/p/7272740.html Rsyslog+ELK日志分析系统搭建总结1.0(测试环境) 因为工作需求,最近在搭建日志分析系统, ...
- 十分钟搭建和使用ELK日志分析系统
前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为“十分钟搭建和使用ELK日志分析系统”听 ...
- ELK日志分析系统-Logstack
ELK日志分析系统 作者:Danbo 2016-*-* 本文是学习笔记,参考ELK Stack中文指南,链接:https://www.gitbook.com/book/chenryn/kibana-g ...
- elk 日志分析系统Logstash+ElasticSearch+Kibana4
elk 日志分析系统 Logstash+ElasticSearch+Kibana4 logstash 管理日志和事件的工具 ElasticSearch 搜索 Kibana4 功能强大的数据显示clie ...
- 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步
第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...
- Docker笔记(十):使用Docker来搭建一套ELK日志分析系统
一段时间没关注ELK(elasticsearch —— 搜索引擎,可用于存储.索引日志, logstash —— 可用于日志传输.转换,kibana —— WebUI,将日志可视化),发现最新版已到7 ...
- ELK 日志分析系统的部署
一.ELK简介 ElasticSearch介绍Elasticsearch是一个基于Lucene的搜索服务器. 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口. Elasti ...
- Rsyslog+ELK日志分析系统搭建总结1.0(测试环境)
因为工作需求,最近在搭建日志分析系统,这里主要搭建的是系统日志分析系统,即rsyslog+elk. 因为目前仍为测试环境,这里说一下搭建的基础架构,后期上生产线再来更新最后的架构图,大佬们如果有什么见 ...
- ELK日志分析系统搭建
之前一段时间由于版本迭代任务紧,组内代码质量不尽如人意.接二连三的被测试提醒后台错误之后, 我们决定搭建一个后台日志分析系统, 经过几个方案比较后,选择的相对更简单的ELK方案. ELK 是Elast ...
随机推荐
- jprofiler安装图解 ( 7_1 )
环境: 1.sun jdk1.6.0 2.jprofiler_windows_6_0_2.exe 安装 1. jdk, 安装略... 2. jprofiler安装 一路next 到Enter lice ...
- Angular控制器
这里使用的是angular-1.0.1.min.js Angular的前端渲染 <div> <ul> <li ng-repeat="i in [1,2,3]&q ...
- Unbutu14.04 启用 root 并禁用guest
系统环境: Ubuntu14.04 x64 问题描述: Ubuntu14.04的64位系统默认禁用 root 账号登录 解决方式: 1. 为root设置密码 sudo passw ...
- .NET基础笔记(C#)
闲着没事就把以前学习时的笔记拿出来整理了一下,个人感觉有点用,就想拿出来跟园友共享一下.有些基础性的内容比如基本概念.语法什么的就不发了. 内容:1.构造方法(函数) 2.继承 3.访问修饰符 ...
- HTML5—canvas绘制图形(1)
1.canvas基础知识 canvas元素是HTML5中新增的一个重要的元素,专门用来绘制图形,不过canvas本身不具备画图的能力,在页面中放置了canvas元素,就相当于在页面中放置了一块矩形的“ ...
- 009 Java集合浅析4
前面一篇教程中,我们分析了List派别中的最常见也最重要的一个类ArrayList<E>.从我们的分析来看,ArrayList作为动态数组的模拟,使用的是连续内存空间来存储数据,带来了可随 ...
- selenium+python 自动化中界面滚动条操作方法
虽然webdriver提供了操作浏览器的前进和后退的方法,但对于浏览器滚动条并没有提供相应的操作方法,以下使用的方法: 借助JavaScript来控制浏览器的滚动条,webdriver提供了execu ...
- 源码分析Android Handler是如何实现线程间通信的
源码分析Android Handler是如何实现线程间通信的 Handler作为Android消息通信的基础,它的使用是每一个开发者都必须掌握的.开发者从一开始就被告知必须在主线程中进行UI操作.但H ...
- SOA面向服务的架构理解
Ø 单一应用架构 ·当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. Ø 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几 ...
- Linux学习之Vim使用
一 为何要学Vim 所有的Unix Like系统都有自带vi编辑器 一些软件的编辑接口会自动调起vi 作为vi的升级版,vim具有程序编辑功能,而且具有代码颜色高亮显示.辨别代码的正确性等功能 以上优 ...