收集和分析日志是应用开发中至关重要的一环,互联网大规模、分布式的特性决定了日志的源头越来越分散,

产生的速度越来越快,传统的手段和工具显得日益力不从心。在规模化场景下,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日志分析系统的应用的更多相关文章

  1. ELK日志分析系统简单部署

    1.传统日志分析系统: 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安 ...

  2. Rsyslog+ELK日志分析系统

    转自:https://www.cnblogs.com/itworks/p/7272740.html Rsyslog+ELK日志分析系统搭建总结1.0(测试环境) 因为工作需求,最近在搭建日志分析系统, ...

  3. 十分钟搭建和使用ELK日志分析系统

    前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为“十分钟搭建和使用ELK日志分析系统”听 ...

  4. ELK日志分析系统-Logstack

    ELK日志分析系统 作者:Danbo 2016-*-* 本文是学习笔记,参考ELK Stack中文指南,链接:https://www.gitbook.com/book/chenryn/kibana-g ...

  5. elk 日志分析系统Logstash+ElasticSearch+Kibana4

    elk 日志分析系统 Logstash+ElasticSearch+Kibana4 logstash 管理日志和事件的工具 ElasticSearch 搜索 Kibana4 功能强大的数据显示clie ...

  6. 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步

    第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...

  7. Docker笔记(十):使用Docker来搭建一套ELK日志分析系统

    一段时间没关注ELK(elasticsearch —— 搜索引擎,可用于存储.索引日志, logstash —— 可用于日志传输.转换,kibana —— WebUI,将日志可视化),发现最新版已到7 ...

  8. ELK 日志分析系统的部署

    一.ELK简介 ElasticSearch介绍Elasticsearch是一个基于Lucene的搜索服务器. 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口. Elasti ...

  9. Rsyslog+ELK日志分析系统搭建总结1.0(测试环境)

    因为工作需求,最近在搭建日志分析系统,这里主要搭建的是系统日志分析系统,即rsyslog+elk. 因为目前仍为测试环境,这里说一下搭建的基础架构,后期上生产线再来更新最后的架构图,大佬们如果有什么见 ...

  10. ELK日志分析系统搭建

    之前一段时间由于版本迭代任务紧,组内代码质量不尽如人意.接二连三的被测试提醒后台错误之后, 我们决定搭建一个后台日志分析系统, 经过几个方案比较后,选择的相对更简单的ELK方案. ELK 是Elast ...

随机推荐

  1. WPF - 监听判断键盘组合键的按下

    对于键盘事件PreviewKeyDown.PreviewKeyUp.KeyDown.KeyUp,在其中检查当次事件是哪个按键触发的很简单,只需要判断KeyEventArgs类型的事件参数e的Key属性 ...

  2. WEB标准了解

    今天看到朋友的简历有一项“了解WEB标准”,就特地了解了一下什么是WEB标准.现在就一项一项地解开自己的疑惑. 1.什么是WEB标准 WEB标准大部分由万维网组织(W3C)制定的WEB程序开发规范.W ...

  3. 基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输

    一.前言 socket.io 实现了实时双向的基于事件的通讯机制,是基于 webSocket 的封装,但它不仅仅包括 webSocket,还对轮询(Polling)机制以及其它的实时通信方式封装成了通 ...

  4. 网络传入安全jwts

    使用json web token 发表于Aug 13 2014 由来 做了这么长时间的web开发,从JAVA EE中的jsf,spring,hibernate框架,到spring web MVC,到用 ...

  5. 使用Visual Studio 2017作为Linux C++开发工具

    Visual Studio 2017 微软的宇宙第一IDE Visual Studio 2017正式版出来了,地址是:https://www.visualstudio.com/vs/whatsnew/ ...

  6. 用 node.js 创建第一个Hello World

    如果我们使用PHP来编写后端的代码时,需要Apache(xampp) 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi.从这个角度看,整个"接收 HTTP ...

  7. 购买的wemall 6.0商城系统源码分享

    使用方法 1.解压目录 2.cd wemall6 && npm i 3.配置config下的config.json 4.npm start 摒弃以往的开发框架thinkphp,使用no ...

  8. Java设计模式之职责型模式总结

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6548127.html 所谓职责型模式,就是采用各种模式来分配各个类的职责. 职责型模式包括 ...

  9. Microsoft Visual Studio 2017 安装过程

    工欲善其事必先利其器 Visual Studio 2017 正式版官方下载地址:https://www.visualstudio.com/downloads/ 安装vs2017的时候最好关闭已打开的v ...

  10. 基于C#的UDP通信(使用UdpClient实现,包含发送端和接收端)

    UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎.在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重.但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小, ...