以前一直用ELK体系里的Kibana作ES的WEB前端展现,kibana功能简单,能够直接显示log的内容,很是人性化,缺陷是没有权限、用户管理(我以前用Nginx和haproxy其中之一来代替),图形展现不够丰富,管理api等限制,更因为我须要更丰富的图形展现功能,因此开始寻找他的替代品Grafana。html
Grafana简绍:前端
Grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去建立、共享、浏览数据。dashboard中显示了你不一样metric数据源中的数据。git
Grafana最经常使用于因特网基础设施和应用分析,但在其余领域也有机会用到,好比:工业传感器、家庭自动化、过程控制等等。github
Grafana有热插拔控制面板和可扩展的数据源,目前已经支持Graphite、InfluxDB、OpenTSDB、Elasticsearch。数据库
这里先简单介绍下个人应用场景,ES用做时序数据库,后端agent每分钟读取云平台的性能监控数据,经过Kafka存到ES里。使用JSON数据存储格式,ES天天1.8亿条doc,由于数据包比较小,ES的后端
Primary Size天天30多G。api
数据存储格式以下:跨域
Grafana展现的效果截图:浏览器
具体实现:bash
1、添加elasticsearch数据源
默认Grafana是安装了ES插件的,若是没装须要安装相应data source插件。
点击Data Sources-->+ Add data source--> Type-->elasticsearch
注:代理访问(access proxy)意味着,Grafana的后端将代理从浏览器的全部请求,并将它们发送到数据源。这颇有用,由于它能够消除CORS(跨域站点资源)的问题,以及消除到浏览器的传播认证。
若是你选择直接访问(access direct)必须更新Elasticsearch配置容许从浏览器进行其余域的访问。能够经过在elasticsearch.yml指定以下配置选项:
http.cors.enabled: true http.cors.allow-origin: "*"
2、Metric查询编辑器
Elasticsearch查询编辑器容许选择多个指标和组由多个条款或过滤器。在右边使用加号和减号图标来添加/删除索引或按子句分组。有些度量值和组子句都有选项,单击选项文本以展开视图并按选项编辑公制或组。
Query:Lucence查询语法,跟kibana的查询同样,详情请查阅ES的官方文档。
Metric:计量的标准,能够取最大、最小、平均值或者count条目数等,Options能够进行脚本的计算,这里我把value的值乘以8,来进行网络Byte和bite的换算。
Group by:排序标准。能够以时间轴进行排序,也能够以自定义的term进行排序。须要这里须要注意一点,ES里若是须要以自定义的字符串term进行排序,会报错:"Fielddata is disabled on text fields by default.";报错信息以下图所示:
解决办法是用"keyword"进行排序,须要手动加入后缀'.keyword',参考文档以下:https://www.elastic.co/guide/en/elasticsearch/reference/current/fielddata.html
Query里也能够用变量来代替,变量是在templating里预先定义好的。后面再详细介绍templating的概念。
3、Axes选项
这里能够进行X轴和Y轴的定义。
Unit设置单位的换算,grafana这里自带了多种单位换算,包括时间、吞吐、温度等;
X-Axis里"mode"的选择,若是是要曲线图能够选择"Time",若是是要画柱状图能够选择"histogram"
4、Legend选项
这里主要进行图上显示文字的设置。
若是不勾选“show”则不会在图上显示相关value的信息。
5、Display选项
这里主要进行如何画图的一些设置。也能够在图上设置阀值,超出阀值会自动突出显示。
Draw Mode:绘制模式,选择线绘图仍是柱状图绘图,更改以后须要和Axes中X-Axis的modes联调,才能正确绘图。
Mode Option: ‘Fill’填充程序,若是设置为0,则不填充,彻底是一条线的形式展现。如图所示:
Stacking & Null value:这里须要注意‘Null value’的选择,选择‘connected’,在空值的时候画图会自动把线进行先后衔接,若是设置为零,会画出驼峰的形状。
Thresholds:阀值的设置:
6、Alert选项
报警设置,须要提早配置好报警邮箱,遗憾的一点Elasticsearch目前版本还不支持Alert的配置,我已经在grafana的github issue上给ES投了一票,建议有相似需求的同窗也积极参与进来。
7、Templating
Templating在dashboard manage里设置:
"Edit"添加变量,变量建立完成会在dashboard顶部显示,这里一样用的Lucene的查询语法:
变量的使用,在Metric里面用‘$’或者‘[[]]’进行变量的调用:
另外在General的Title里面也能够调用templating里定义的变量,这样图的标题也会随着变量的改变而改变。
最后强调一点,更改完全部配置以后不要忘记点击保存按钮进行保存。
更多详细配置见文档:http://docs.grafana.org/features/datasources/elasticsearch/#using-elasticsearch-in-grafana
Grafana官方文档:http://docs.grafana.org/