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 ...
随机推荐
- windows 安装 Scrapy的套路
我最近在琢磨scrapy爬虫框架,在windows中安装scrapy遇到了不少坑:直接 pip install scrapy 安装不成功的,百度说要安装vc2008+等等,安装这些时间太长,最后找到一 ...
- iOS 推送全解析,你不可不知的所有 Tips!
本文旨在对 iOS 推送进行一个完整的剖析,如果你之前对推送一无所知,那么在你认真地阅读了全文后必将变成一个推送老手,你将会对其中的各种细节和原理有充分的理解.以下是 pikacode 使用 iOS ...
- nodejs中的路由
一.路由初步 url.parse(string).query | url.parse(string).pathname | | | | | ------ -------------------http ...
- 数字化工厂ERP解决方案
数字化工厂 数字化工厂建设,在现有基础上提升,实现管理层对订单进度.生产绩效.产能分析.质量管理.产品追溯和存货管理等提供业务分析报告:在控制层有可视化看板.移动客户端实现对生产状态的实时掌控,快速处 ...
- Swift应用案例 1.无限轮播
从今天开始,我学习的重点开始转向Swift,并且会分享一些自己学习的心得体会,今天给大家带来的的是无限轮播.广告页的无限轮播是非常常见的一个功能,大多数APP都有,大多数程序员也都实现过,今天我们 ...
- jenkins配置邮箱服务器(126邮箱)
安装Email Extension Plugin 安装过程容易失败,多试几次 一.开启126邮件的SMTP获取授权码 二.配置管理员邮件地址 三.设置邮件通知 四.点击Test Configura ...
- 第二期培训(PING问题定位指导)心得
一.什么是 PING DOS 命令,一般用于检测网络通与不通 ,也叫时延,其值越大,速度越慢 PING (Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序.Pin ...
- 获取bing图片并自动设置为电脑桌面背景(C++完整开源程序)
众所周知,bing搜索网站首页每日会更新一张图片,张张漂亮(额,也有一些不合我口味的),特别适合用来做电脑壁纸. 我们想要将bing网站背景图片设置为电脑桌面背景的通常做法是: 上网,搜索bing 找 ...
- Docker基础入门及示例
Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...
- 基于C#的UDP通信(使用UdpClient实现,包含发送端和接收端)
UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎.在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重.但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小, ...