前端日志与后端日志不同,具有很强的自定义特性,不像后端的接口日志、服务器日志格式比较固定,大部分成熟的后端框架都有非常完善的日志系统,借助一些分析框架,就可以实现日志的监控与分析,这也是运维工作的一部分。
什么是ELK
ELK在服务器运维界应该是运用的非常成熟了,很多成熟的大型项目都使用ELK来作为前端日志监控、分析的工具。
那么首先,我们来了解下什么是ELK,ELK实际上是三个工具的集合:
- E:Elasticsearch
- L:Logstash
- K:Kibana
这三个工具各司其职,最终形成一整套的监控架构。
Elasticsearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们使用Elasticsearch来完成日志的检索、分析工作。
Logstash
Logstash是一个用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。
我们使用Logstash来完成日志的解析、存储工作。
Kibana
Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。
我们使用Kibana来进行日志数据的展示工作。
以上三个框架,就构成了我们这套架构的核心。如果你想进一步了解这套架构,可以去他的官网上进行了解:
这里也讲一个真实的故事——Elasticsearch项目的来历。
Elasticsearch 来源于作者 Shay Banon 的第一个开源项目 Compass 库,而这个 Java 库最初的目的只是为了给 Shay 当时正在学厨师的妻子做一个菜谱的搜索引擎。2010 年,Elasticsearch 正式发布。至今已经成为 GitHub 上最流行的 Java 项目,不过 Shay 承诺给妻子的菜谱搜索依然没有面世。
不得不说,还真是面向对象编程……
ELK架构图解
下面这张图很好的解释了什么是ELK:
当然,这也是最简单的ELK架构,在后端运维架构中,可能远不止如此,比如,还需要加入Kafka活这Redis等等,这里我们不做过多的讨论,我们只讨论最基础的架构。
ELK环境搭建
有同事问我,配置一套ELK环境需要多长时间,我说,大概需要20分钟,另外,其中大概有15分钟是在下载!
由于现在整个ELK项目基本上都已经被elastic这个公司收购了,所以,在它的官方网站上可以很容易的找到配置Guide。
按照这个配置指南,基本上很快就可以完成ELK的搭建,我们唯一需要做的,就是找到一份Log,然后配置下,让他展示出来就完了。
下载好tar包后,请尽量使用tar指令解压,不然就会像我的同事TT那样因为解压后的权限折腾上很长时间。
配置Logstash
我们首先需要在Logstash的文件根目录下创建一个配置文件,我这里举一个例子:
input {
file {
path => "/Users/xuyisheng/Downloads/temp/log.txt"
ignore_older => 0
sincedb_path => "/dev/null"
}
}
output {
elasticsearch{}
stdout{}
}
这个配置相信不用我多说,大家也能看懂,当然,这是一个非常基本的配置,只是从固定的文件中去读取Log信息并写入到elasticsearch,并不做任何处理工作。
写好配置文件后,只需要通过如下所示的指令启动Logstash即可:
logstash-5.0.1 bin/logstash -f logstash.conf
启动之后,Logstash就会从文件中读取信息了。
配置Elasticsearch和Kibana
为什么Logstash我要单独讲,而Elasticsearch和Kibana我可以放一起讲呢?因为——这两个的配置实在是太简单了,简单到你根本不用配置任何东西……
只需要两个指令就完成了,启动Elasticsearch:
elasticsearch-5.0.0 bin/elasticsearch
启动Kibana:
kibana-5.0.0-darwin-x86_64 bin/kibana
OK,等程序启动完成,只需要打开localhost:5601就可以看见Kibana的界面了。
给大家看几张截图,简单的体会下它的强大就好(由于我这里项目是公司的,所以就从网上找了一些,是一样的)
这个是Kibana3的界面。
这个是Kibana5的界面,大家可以根据自己的需要选择不同的Kibana版本,反正配置都是一句话。
ELK的优势
ELK在运维上的优势我们就不具体的说了,什么分布式啊、什么消息队列、消息缓存啊,太多了,但我们其实并不用太关心。
强大的搜索
这是elasticsearch的最强大的功能,他可以以分布式搜索的方式快速检索,而且支持DSL的语法来进行搜索,简单的说,就是通过类似配置的语言,快速筛选数据。
强大的展示
这是Kibana的最强大的功能,他可以展示非常详细的图表信息,而且可以定制展示内容,将数据可视化发挥的淋漓尽致。
所以,借助ELK的这两大优势,我们可以让前端日志的分析与监控展现出强大的优势。
ELK使用场景
据我所知,现在已经有非常多的公司在使用这套架构了,例如Sina、饿了么、携程,这些公司都是这方面的先驱。同时,这套东西虽然是后端的,但是『他山之石,可以攻玉』,我们将这套架构借用到前端,可以使用前端日志的分析工作,同样是非常方便的。这里我举一些常用的使用场景。
- 业务数据分析
通过客户端的数据采集系统,可以将一些业务流程的关键步骤、信息采集到后端,进行业务流程的分析。
- 错误日志分析
类似Bugly,将错误日志上报后,可以在后端进行错误汇总、分类展示,进行错误日志的分析。
- 数据预警
利用ELK,可以很方便的对监控字段建立起预警机制,在错误大规模爆发前进行预警。
ELK的基本介绍就到这里,其实还有很多东西没有讲,例如使用Logstash对日志内容的处理、已经elasticsearch的搜索语法等等,如果大家有兴趣,可以在下面留言,如果感兴趣的人比较多,我会在后面的文章中进行进一步的分析。
一年一度的CSDN博客之星评选又开始了,欢迎大家给我投票:
http://blog.csdn.net/vote/candidate.html?username=x359981514
有了各位的支持,我才有动力能够继续写出更多更好的文章,非常感谢大家的支持。