注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

ELK技术实战-了解Elk各组件

ELK 彭东稳 9699次浏览 已收录 0个评论

源起

日志是排查问题的根源

第一个问题:你公司对服务端日志你有多重视,包括web日志、应用程序日志、网络设备日志等等?

1)有日志,但基本不去控制需要输出的内容;

2)经常微调日志,只输出我们想看和有用的;

3)经常监控日志,一方面帮助日志微调,一方面及早发现程序的问题;

4)高度依赖日志,做服务可用性监控,故障排查,程序性能监控等等;

只做到第1点的,你可以洗洗去睡了。很多公司都有做到第2点和第3点,这些公司的服务端程序基本已经跑了很长时间了且规模较小,已比较稳定,确实无需花太多时间去关注。对于稍微规模大一点的公司,就有必要做到第4点了,甚至更好。

第二个问题:日志怎么看?

1)线上日志逐个tail+grep

2)编写脚本,下载某个时间范围内的全部日志到本地再搜索

3)tail+grep或者把日志下载下来再搜索,可以应付不多的主机和不多的应用部署场景。但对于多机多应用部署就不合适了。这里的多机多应用指的是同一种应用被部署到几台服务器上,每台服务器上又部署着不同的多个用。可以想象,这种场景下,为了监控或者搜索某段日志,需要登陆多台服务器,执行多个tail -F和grep命令。一方面这很被动。另一方面,效率非常低。

4)日志统一管理,所有日志集中到一起,能够提供可视化查看日志,然后能够对日志做实时分析;比如web访问状态码统计,当有很多5xx的状态码时,所以服务已经出现有不可用现象,数据库慢查询日志统计,应用程序执行慢的日志统计等等。

除了上述问题之外,其实日志的分析和监控在运维工作中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有:

  • 根据关键字查询日志详情
  • 监控系统的运行状况
  • 统计分析,比如接口的调用次数、执行时间、成功率等
  • 异常数据自动触发消息通知
  • 基于日志的数据挖掘

很多团队在日志方面可能遇到的一些问题有:

  • 开发人员不能登录线上服务器查看详细日志,经过运维周转费时费力
  • 日志数据分散在多个系统,难以查找
  • 日志数据量大,查询速度慢
  • 一个调用会涉及多个系统,难以在这些系统的日志中快速定位数据
  • 数据不够实时

什么是ELK?

ELK Stack是Elasticsearch、Logstash、Kibana这三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于Elastic.co公司名下,故有此简称。其中:Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析处理,然后输出存储系统,如Elasticsearch中存储,使用JRuby编写,开源,主流,免费。kibana也是一个开源和免费的工具,Kibana可以为Logstash和ElasticSearch提供的日志分析友好的Web界面,可以帮助您汇总、分析和搜索重要数据日志。

Elasticsearch、Logstash、Kibana组合工作原理如下所示:

ELK技术实战-了解Elk各组件
在需要收集日志的所有服务上部署logstash,也可以是rsyslog或者程序中直接把日志通过TCP或UDP协议打入logstash。作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana来结合自定义搜索进行页面展示。
ELK Stack 在最近两年迅速崛起,成为机器数据分析,或者说实时日志处理领域,开源界的第一选择。和传统的日志处理方案相比,ELK Stack 具有如下几个优点:

1)处理方式灵活。Elasticsearch是实时全文索引,不需要像storm那样预先编程才能使用;

2)配置简易上手。Elasticsearch全部采用JSON接口,Logstash是Ruby DSL设计,都是目前业界最通用的配置语法设计;

3)检索性能高效。虽然每次查询都是实时计算,但是优秀的设计和实现基本可以达到全天数据查询的秒级响应;

4)集群线性扩展。不管是Elasticsearch集群还是Logstash集群都是可以线性扩展的;

5)前端操作炫丽。Kibana界面上,只需要点击鼠标,就可以完成搜索、聚合功能,生成炫丽的仪表板;

当然,ELK Stack 也并不是实时数据分析界的灵丹妙药。在不恰当的场景,反而会事倍功半。

而在5.0版本以后(从2.x版本直接全部升级为5.x版本),Elastic公司将原来的ELK Stack称之为Elastic Stack,原因是引入了Beats套件。

Elastic Products全家福:

ELK技术实战-了解Elk各组件

这些说一个小小的通过ELK解决问题的案例:有一次半夜接收到CDN的短信报警,某个域名出现大量的504,504是Web服务器端返回的超时错误,说明Web服务器到后端的应用程序服务器请求资源超时了(设置有阀值)。后来就到Kibana(ELK中的可视化组件)查看;由于我们对web日志、php日志、数据库慢查询日志都收集到了ELK中,所以最先看了504所报的web日志,基本都是超过了设定的阀值,说明是后端php处理用户请求时间太久。然后就看了php的慢查询日志,也是有大量的超时日志,同时发现php返回的慢查询日志接口基本都是相同的,后来开发说这是一个需要写数据库的接口。然后我们就看了一下数据库慢查询日志,也有一些超时日志,但是量不是很大,主要集中在某一张表上。最后就针对这个表查找问题,最后发现表的存储为Myisam,这个表有大量的写入操作,而Myisam存储引擎的特点就是读性能好,写入性能很差,且是表级锁。后来就把Myisam存储引擎换成了InnoDB,不到10s钟,所有的慢日志都没有了,问题也得到了解决。

所以重点来了,下面就开始进行ELK Stack学习之旅。首先介绍介绍ELK三剑客:Logstash、Elasticsearch、Kibana。

第一剑:Logstash

Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析处理,然后输出存储系统,如Elasticsearch中存储,使用JRuby编写,开源,主流,免费,使用简单。

Logstash从1.5版本开始,将核心代码和插件代码完全剥离,并重构了插件架构逻辑,所有插件都以标准的Ruby Gem包形式发布。Logstash的理念很简单,它只做3件事情:

Collect:数据输入

Enrich:数据加工,如过滤,改写等

Transport:数据输出

别看它只做3件事,但通过组合输入和输出,可以变幻出多种架构实现多种需求。这里只抛出用以解决日志汇总需求的部署架构图:

ELK技术实战-了解Elk各组件

解释术语

Shipper:日志收集者。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来,输出到Redis暂存。

Indexer:日志存储者。负责从Redis接收日志,写入到本地文件。

Broker:日志Hub,用来连接多个Shipper和多个Indexer。

无论是Shipper还是Indexer,Logstash始终只做前面提到的3件事:Shipper从日志文件读取最新的行文本,经过处理(这里我们会改写部分元数据),输出到Redis,

Indexer从Redis读取文本,经过处理(这里我们会format文本),输出到文件。

一个Logstash进程可以有多个输入源,所以一个Logstash进程可以应付一台服务器上的所有日志。Redis是Logstash官方推荐的Broker角色“人选”,支持订阅发布和队列两种数据传输模式,推荐使用。输入输出支持过滤

改写。Logstash支持多种输出源,可以配置多个输出实现数据的多份复制,也可以输出到Email,File,Tcp,传递给其他程序作为输入,或者安装插件实现和其他系统的对接,如搜索引擎Elasticsearch。总结:Logstash概念简单,通过组合可以满足多种需求。

第二剑:Elasticsearch

ElasticSearch是一个基于Lucene(Apache基金会的开源搜索引擎)的搜索服务器,是一个高扩展的、开源的、全文检索的搜索引擎,它提供了近实时的索引、搜索、分析功能、它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

应用场景

1.它提供了强大的搜索功能,可以实现类似百度、谷歌等搜索。

2.可以搜索日志或者交易数据,用来分析商业趋势、搜集日志、分析系统瓶颈或者运行发展等等。

3.可以提供预警功能(持续的查询分析某个数据,如果超过一定的值,就进行警告)。

4.分析商业信息,在百万级的大数据中轻松的定位关键信息。

第三剑:Kibana

Kibana是Elasticsearch的分析和搜索仪表板。已经历经了v1, v2, v3, v4 个版本,分别采用了 PHP,Ruby,AngularJS,JRuby,NodeJS等不同语言编写。主要关注v3和v4两个版本,其区别很大。原有Kibana V3上的操作经验,几乎无法自然带入到Kibana V4中,所以实际项目中尽量用v4,我也没有使用过V3版本,一直使用的是V4版本。

Kibana V4是Elastic.co一次崭新的重构产品,在操作界面上,有一定程度的对Splunk的模仿(Splunk是商业日志分析系统,很强大)。Kibana非常容易安装和使用,虽然V4项目不在像V3那样都是使用HTML和Javascript写的,但V4安装方式依然简单,几分钟内就可以安装好Kibana,然后开始探索你的Elasticsearch索引数据,需要提前预备好一个Elasticsearch集群,第一次访问Kibana时就会进行检测这些必要条件,如果不满足条件是进不去Kibana操作界面的,默认是检查本地,如果你的Elasticsearch不在本地,那么就需要修改kibana.yml里的elasticsearch URL,然后重启Kibana即可。

第一次进入Kibana界面后,你会被要求定义一个index pattern用来匹配一个或者多个索引名称。而这个索引名称就是来自于Elasticsearch中的索引数据。如下图:

ELK技术实战-了解Elk各组件

如果能够正确地从elasticsearch中匹配到索引,接下来就可以创建索引,然后开始你的Kibana之旅。

ELK Stack平台搭建方式

对于ELK部署使用而言,下面是一个再常见不过的架构了,如下图:
ELK技术实战-了解Elk各组件

1)Redis:接收用户日志的消息队列。

2)Logstash:做日志解析,统一成JSON输出给Elasticsearch。

3)Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能。

4)Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能力是众多公司选择ELK stack的重要原因。

这一套部署可以看这里:CentOS7部署ELK

除了上面这种模式之外,也有可能会看见这种ELK架构。

ELK技术实战-了解Elk各组件

其中Kibana、ElasticSearch、Logstash作用就不用说了。另外多了一个Filebeat组件,Filebeat组件是一个轻量级的日志收集工具(当然也可以使用Logstash),收集到日志后传送到Logstash中。这一套部署可以看这里:CentOS7部署ELK

现在很多公司使用ELK技术栈做日志分析,比如新浪使用ELK处理每天32亿条记录,详细的介绍可以查看这里


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (3)or分享 (0)
关于作者:

您必须 登录 才能发表评论!