用elasticsearch和kibana 进行简单的实时数据报表分析

来源:互联网 发布:阿里云国际版教程 编辑:程序博客网 时间:2024/05/17 07:04

前言

     elasticsearch公司已经渐渐把ES变成为实时分析的工具,相比solr,es在实用产品化上确实领先很多。ES公司主推的ELK套件就是完成实时日志分析的完整解决方案,其中的kibana是一个简易报表工具,完全针对es进行开发,同类型产品几乎没有竞争者;logstash是日志拉取采集的工具,有很多同类产品,比如flume, fluentd。
ELK的配置安装网上有挺多资料了,我在这并不想介绍如何部署这套工具,而是讲讲在使用elasticsearch+kibana的心得。由于日志类型数据也是个跟业务有关系的事,所以未必需要使用logstash。 当然它的功能完整,也可以学习它的配置进行数据采集,但我估计很多时候也可以自己修改已有采集工具,甚至使用storm进行数据传输。

elasticsearch

简介

elasticsearch是一个基于lucene全文检索引擎,索引采用倒排方式。由于不用索引缺失字段,加上追加式增加记录,因此数据建倒排据时性能很强,另外查询时候是进行倒排链的交集并集计算,也是非常高效。因此除了传统信息检索领域,我认为这也是ES能用来实时日志统计的原因。报表数据的生成就是一次单表级常规的查询后,进行count或者简单的聚合;当然这里的查询也不支持表关联这么复杂的。

索引数据

ES的功能配置不少,很多功能需要按需现查手册。ES本身是schema-free的,不建index也能存进数据,只是字段处理方式都默认了而已。但为了方便kibana展示,以及性能存储优化,需要关注一下index结构的设计。由于kibana推荐数据日存,所以在es这端建议用template来配置mapping。例如这个

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. {  
  2.     "template": "log-*",  
  3.     "settings" : {  
  4.         "number_of_shards" : 1,  
  5.         "number_of_replicas" : 0  
  6.     },  
  7.     "mappings": {  
  8.         "logs": {   
  9.             "_all": { "enabled": false },  
  10.             "dynamic_templates": [  
  11.                 {  
  12.                     "string_template" : {   
  13.                         "match" : "*",  
  14.                         "mapping": { "type": "string", "index": "not_analyzed" },  
  15.                         "match_mapping_type" : "string"  
  16.                      }   
  17.                  }  
  18.              ],  
  19.              "properties" : {  
  20.                 "message" : { "type" : "string", "index" : "analyzed" },  
  21.                 "@timestamp" : { "type" : "date", "index" : "not_analyzed" }  
  22.             }  
  23.         }  
  24.     }  
  25. }  

template会识别所有以log-开头的index都使用这套mapping, dynamic_templates是对不同字段进行特殊处理。
最好设置一个date类型字段,报表多半需要一些按时间进行的展示;string类型只能做count, 如果要做sum avg等计算需要用number类型;目前Kibana还提供了经纬数据展示,你需要geo_point类型得以支持。

数据采集

数据采集的方式很多,logstash就是做这个的,和大多数工具一样,他们兼顾转发和收集的功能,但Logstash有个好处是解析过程也是可以配置,你需要去研究一下用法。
自己写代码提交到es也可以,可以用es客户端,或者http提交json,如果是批量提交需要用bulk接口, 如果是批量索引,每个doc完成以后还要多空一行,否则可能只能索引到头一个。

kibana

kibana目前出到4了,提供了完整的web服务,不像3那样还要部署到容器。4代的报表功能拆分得更细。
首先需要在setting界面设置读取的index, 前缀+* 匹配所有,如果index里没有数据也不能匹配上。
discover界面可以搜索数据,选择展示的字段。
visualize界面是设置展示效果的,目前支持饼图、柱状图、线图、报表等多种:Y轴设置统计值,可设置一到多个Y轴。 X轴设置数据划分方法,还可以对X进行组合,各种指标需要亲自摸索才能做出好看的效果。
配置好discover和visualize之后记得保存,用来组合生成dashboard,到这里一个简易的报表界面就完成了。
开始玩的时候,发现kibana找不到数据,不知道是哪弄错了,把时间范围扩大才查到,才知道遇到数据时区的问题,本来打算跟着改kibana的配置,好像没成功,最后还是把时间增加了时区:"2015-12-09T10:01:02+08:00", 所以我建议采集部分要自己处理。

总结

elasticsearch+kibana能帮助你轻松完成一个实时日志报表的功能。这两个工具都是只需要修改配置便可以直接启动,部署非常便捷,es还可以下head和kopf插件来管理。你只需要关注如何根据自己业务进行合适的数据格式设计和数据采集。
0 0