近几年比较火的日志监控系统架构大概非ELK(ElasticSearch+Logstash+Kibana)莫属了。

ELK日志采集-储存-查询的架构
其中Kibana用于日志查询和可视化展示非常方便,但也存在不少问题:
1、 查询到的日志存在记录数限制,同时无法导出成文件
2、 可视化图表的配置、使用不方便,可视化展示功能也略显不足
3、 浏览器兼容性有问题,不同版本的Firefox与Chrome在查询、配置图表时均可能出现卡顿、假死的现象
4、 无法模板化配置图表,ElasticSearch中若需要配置功能相同只是index不同的多个图表时,需要挨个逐一配置,工作量令人崩溃……
恰巧在研究时序数据库的过程中发现了一个用于时序数据可视化展示的工具,Grafana,ElasticSearch存储的日志数据也是一种类型的时序数据,用Grafana来展示再合适不过了。

Grafana主页的功能介绍
Grafana支持大量时序数据库数据的可视化展示,功能丰富且配置简单,同时支持同类型数据源的模板化配置,对各种浏览器的支持也都比较好。

基于时序数据库InfluxDB数据配置出的监控界面
Grafana安装启动都很简单,官网提供了适用于WIN/MAC和不同Linux发行版的安装包:http://docs.grafana.org/
用户与功能管理
登录页面,支持用户自主注册,注册后默认只能查看图表,由管理员修改用户权限后方可编辑图表。

登录页面
Grafana采用插件架构管理各种功能,降低耦合度。用户可以使用添加插件的方式来新增各种数据源类型、图表类型等功能

插件配置页面
图表面板管理页面,同时也可以导出/导入面板上的图表设置内容。

图表面板管理
数据源与模板设置
Grafana提供对各种类型数据源的支持,主要支持各种时序数据库以及少量的关系型数据库,新版本Grafana还会新增PostgreSQL数据库支持。
左上角主菜单进入数据源管理

创建ElasticSearch数据源
填入ElasticSearch服务器地址、端口与登陆信息

填写需要查询的ElasticSearch上index信息




点击“ADD ROW”即可创建一行面板,其上可创建多个图表

示例数据
后续创建的图表都会基于在ElasticSearch中保存的几个数据库日志,日志中记录了用户执行查询的时间、用户名、执行时长(字段名:duration)、语句内容信息。
折线图/柱状图
这个例子中将创建一个折线图以展示查询执行完成的情况。
点击创建图表后,会显示一个默认的图表,点击图标标题栏即可显示编辑菜单进入编辑页面 
底部Panel Data Source即可选择是否使用前面定义好的数据源模板。

数据源选择采用模板之后,在页面顶端即可显示切换数据源下拉列表框

将需要展示的数据使用和Kibana一致的Lucene语法描述查询并填入Query栏,Grafana即可实时展示查询到的数据。
这个例子中,需要查询日志中SQL执行时长(duration)字段大于0,既执行结束日志以统计查询执行完成情况。

修改图表名称与各种外观参数

修改X/Y轴单位、尺度范围等信息 
调整显示模式,如显示折线图/柱状图/点图,及其各种绘图参数

表格
这个例子中将创建一个表格,展示超时查询的情况。
查询执行时间超过一小时(3600000毫秒)的SQL语句以及相关信息将在表格中展示出来,并根据不同查询时长标示出不同的单元格颜色

表格默认的展示形式是显示按时间段的统计结果,要显示更多内容可以在Option中将Table Transform改为“JSON Data”并在下方添加需要显示的字段

如果需要根据单元格内容显示不同颜色,可以在Column Style中添加规则,并设定显示不同颜色所采用的阈值

点击表格标题栏,第一个子菜单中即可将表格中的所有数据导出为JSON或CSV格式

单数值面板
单数值面板主体只能显示一个查询到的数值,选项中可勾选显示Spark lines以显示查询到的记录数随时间分布情况,与表格一样,可以在Coloring的阈值设置中设置根据不同结果显示不同背景色

勾选显示Gauge可显示一个仪表盘,依然需要设置Coloring的阈值。

热力图
热力图中每一列显示的是在某个时间段内数据的分布情况,如图中某一列的色块中,颜色越浅则代表这个时间段中查询到数据的值分布在这个区间内的越多。
这个例子中将创建一个热力图展示超时查询在执行时长上的分布情况

可以由系统自动选择统计的时间间隔长度,也可以在buckets中自定义时间间隔

可以在Display面板中修改热力图显示的色彩系列


告警
目前版本对ElasticSearch数据的告警支持不完善,只能在图上显示告警阈值,方便观察,还不具备自动发送告警的能力。
创建一张折线图

转到Alert选项板,创建告警

会报错,但是图上可以显示告警阈值

各种告警方式,居然包括钉钉!期待后续版本继续完善吧~

Grafana在数据的可视化分析与展示方面的可用性、美观程度要高于Kibana,但如果只需要查询ElasticSearch的原始数据,Kibana在使用的方便程度上更好一点。在实际应用上将Grafana作为ELK技术栈的一个有力补充在实际应用上非常有效。




