前言
在生活中,我们时常会在笔记本上记录下生活中的点点滴滴,把宝贵的记忆珍藏起来;而对于企业而言,服务器中的日志是一个有价值的信息宝库,我们可以根据日志信息去定位错误、搜集分析数据等等。
通常,一个企业的服务器数量绝不是一个,像BAT这种大型企业,服务器的数量甚至是上万台,而产生的日志都会存储在各个服务器中。如果你要查询日志,需要登录每一台服务器,用传统的方式一一查看,这种方式效率会很低下。因此我们需要一个集中化管理的日志平台,能够把各个角落的日志收集汇总在一起,可供管理员快捷方便的查阅。
1. 日志服务分析平台
日志非常重要,相信大家都很认同,上至一个企业级的系统,下至一个简单的小网站,都需要记录日志来反映运行的实时状况。
在刚开始做一个小型的web服务时,我们一般是直接去查看日志文件,例如网站为什么登录不上,找出原因;查看一下是哪些访问比较频繁、哪些资源占流量等等。
正如蘑菇团队,在产品规模比较小的时候,我们可以直接登录服务器查看日志文件,一目了然。但是随着产品规模日益扩大,日志数量急剧上升,就不是靠我们的肉眼就能分析出来的,例如在linux服务器下,我们需要借助grep,tail -f,awk等命令实现检索和统计。
但是当存储的数据量已经扩展到百万级别,并且集群中拥有多台服务器,管理员挨个服务器折腾是肯定不行了。
随着蘑菇的产品规模的做大,日志的重要性也越来越重要。例如:
1、实时监控系统性能以及健康状况。
2、帮助分析和找出程序BUG的根源。
3、运营所需要的用户数据。
...............
因此,根据运维和运营的需求,需要一个专业的日志查询和分析平台。
对于此平台,需要以下的特点:
1、可以支持多种数据源,包括文件、log4j、mongodb、nginx等。
2、源头很分散,但是可以有效的汇总信息。
3、日志解析很灵活,也很简单。
4、可以对日志进行高效的搜索、可视化、分析等各种操作。
5、可以快速处理海量的日志信息。
6、日志分析平台的扩展性很高。
针对以上的特点,传统日志分析手段力不从心。通过技术分析调研,发现ELK日志分析平台最合适,并且拓展性和兼容性很高。
2.ELK?
ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。
一、ElasticSearch
ElasticSearch是一个基于Lucene的高扩展的、开源的、全文检索搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,由JAVA开发,是当前流行的企业级搜索引擎。ElasticSearch支持通过HTTP使用JSON进行数据索引。
下载地址:https://www.elastic.co/downloads/elasticsearch
当你安装好ElaticSearch后,在浏览器输入 服务器IP:9200,会显示
说明ElasticSearch安装成功。
ElasticSearch的组成结构
ElasticSearch是由索引组成,一个索引相当于数据库中的库,而一个type相当于数据库中的一张表,一个文档(document)相当于数据库中的一行数据,字段(field)相当于数据库中的一列(属性)。
现在举一个简单的ElasticSearch搜索的例子:
这就是ElasticSearch简单的搜索语句,megacorp就是index,employee是type,1是_id。转换成Mysql语句,可以变成在megacorp库中select * from employee where id =1。
二、Logstash
Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志
集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。
Logstash的流程图:

Logstash一共有input,Filter,Output 3个阶段,每个阶段都由很多的插件配合工作,比如file、elasticsearch、Redis等等。由于这种插件式的组织方式,使得logstash变得易于扩展和定制。
从logstash的配置文件就可以看出整个流程的运作:
其中处理filter是可以省略的。
举一个例子:
上图是logstash的一个配置,input使用了file插件,从多个日志文件中读取日志,因为文件中一条日志可能是多行,因此需要使用multiline插件,合并多行为一条日志。output是输出,输出至ElasticSearch中,输出格式是rubydebug;其中elasticSearch中的hosts是ES所在的服务器IP,index是输出到所在的索引,document_type对应ES中的type。
三、Kibana
kibana也是一个开源和免费的工具,Kibana可为Logstash和ElasticSearch提供的日志分析友好的Web界面,可使用它对日志进行高效的搜索、可视化、分析等各种操作。
四、ELK的原理图
3.蘑菇的ELK流程
蘑菇的ELK流程如下:
处理流程:
1、logstash中的file插件从当前服务器收集日志文件中的日志。
2、logstash将收集的日志进行格式化处理,比如使用logstash的geoip插件,可以做到查看客户端IP地址信息,比如哪个国家,哪个城市。
3、然后通过elasticsearch对格式化后的数据进行索引和存储,这样就可以将不同服务器、不同来源的日志信息汇总在一起。
4、最后交由kibana展示,用户可以在kibana上搜寻所需要的日志信息。
简单来说,进行日志处理分析,一般需要经过以下几个步骤:
1、将日志进行集中化管理(logstash的file插件)
2、将日志格式化(logstash)
3、对格式化后的数据进行索引和存储(elasticsearch)
4、前端数据的展示(kibana)
4.ELK的展示效果
在kibana的Discover界面可以进行日志信息的搜索,搜寻的条件可以自定义组合,用户可以根据时间段、关键字、主机ip等信息查询相关日志,上方的图表会显示时间段内的日志产出量。
Kibana Visualize页面用于创建、修改及查看我们的定制化可视结果。其中包含多种可视类型,包括垂直柱状图、饼状图、活动地图(用于在地图上显示数据)以及数据表。可视结果还能够与访问Kibana实例的其他用户共享。
上图就是对日志数量的统计,可以查出在今天报错信息出现的次数大小以及所占的比例。
DEV Tools是kibana给用户提供的一个查询ElasticSearch分布式数据库的页面,你可以用ElasticSearch的语法去查询数据库中的原始日志数据。如上图,查询的是所存储的索引表的信息。
5.小结
本文的目的,主要介绍了ELK日志服务平台的优势和原理。本文抛出3个问题点:为什么要使用日志服务系统、日志服务系统该有什么样的功能、ELK是什么;通过对这3个问题的回答,让读者能对日志服务的重要性和发挥的作用有清楚的认识,能够让读者快速理解ELK系统,并且有更深层次的思考。

