我们身处海量数据的包围之中已成众所周知的事实。即使你管理的是一个单独的Linux服务器,那么带着问题一发生就能检测出来并采取措施的目的去管理所有日志时也会遇到问题。问题有多大取决于环境的规模、每台主机的职责、已经安装的服务以及正在使用的协议。

当然,日志数据能让我们更好地洞察检测模式,当信息以可视化的形式呈现出来时让我们可以更快速地采取措施。这种分析方法使IT运维团队可以创建透明度,要清楚任何时间点正在发生什么时正需要这种透明度。

Kibana 和 Grafana 是两个开源工具,能可视化和推断大量日志数据内的趋势。本文将向你简单介绍一下每个工具,并主要比较一下它们之间的关键不同。

Kibana

Kibana 是一个分析和可视化平台,它可以让你浏览、可视化存储在Elasticsearch集群上排名靠前的日志数据,并构建仪表盘。你可以执行深入的数据分析并以多种图表、表格和地图方式可视化这些数据。

grafana 统计mysql数据源 grafana的数据源类型有_grafana 统计mysql数据源

许多诸如Netflix 和 Linkedin之类的现代IT组织使用流行的 ELK栈 (Elasticsearch、Logstash 和 Kibana) 进行日志管理。通过使用这个栈中的Kibana可简化部署,并可以将其用于可视化。一旦安装了ELK栈,你就可以使用平台的“发现(Discover)”部分内的强大工具去浏览和可视化你的日志数据了。Kibana的仪表盘非常简单易用,任何人都可以使用它,甚至IT技能和知识很少的业务人员也可以使用。

Grafana

Grafana 是一个开源仪表盘工具,它可用于Graphite、InfluxDB与 OpenTSDB 一起使用。最新的版本还可以用于其他的数据源,比如Elasticsearch。

从本质上说,它是一个功能丰富的Graphite-web 替代品,能帮助用户更简单地创建和编辑仪表盘。它包含一个独一无二的Graphite目标解析器,从而可以简化度量和函数的编辑。Grafana快速的客户端渲染默认使用的是 Flot ,即使很长的时间范围也可应对,这样用户就可以创建具有智能轴格式(比如线和点)的复杂图表了。

grafana 统计mysql数据源 grafana的数据源类型有_数据源_02

1. 日志与度量

这方面的主要的不同在于,Grafana专注于根据CPU和IO利用率之类的特定指标提供时间序列图表。Kibana则专注于另一方面,它运行于Elasticsearch的上层,能创建一个复杂的日志分析仪表盘。举个例子,Grafana无法进行数据的检索和浏览。

2. 基于角色的访问

默认情况下,Kibana的仪表盘是公开的,没有进行基于角色的访问控制。如果你需要针对多个用户设置不同的权限级别,就得增加额外的配置预算采购 Shield 了。比较而言,Grafana内置的RBA允许你维护用户和团队访问仪表盘的权限。另外,Grafana的富API可能用于保存特定仪表表、创建用户用户和更新数据源的任务。你还可以创建特定的API关键字并赋予它们新的职责。

3. 仪表盘灵活性

虽然Kibana有大量内置的图表类型,但它们之上的控制仍是最初的限制,Grafana包括更多的选择,可以更灵活地浏览和使用图表,如果要选择一个指定的时间序列,可以使用Y-Bar之类的工具。然而,随着 Kibana 4中展示的增强特性,比如可以保存元素并拖曳到新的仪表盘中,我们可以预期Kibana能快速地弥补这一差距。

4. 数据源的集成

Grafana支持许多不同的存储后端。Grafana针对每个数据源都有一个特定的查询编辑器,它是针对数据源所具备的特性和能力特别定制的。然而,正如上文所说,Kibana原生集成进了ELK栈,这使安装极为简单,对用户非常友好。

5. 开源社区

这两个开源工具都很强大。如果密切观察一下Github上的Grafana,你将发现大概有7000次代码提交,而Kibana更有12000次。而如果要了解Kibana开源社区真正的优势,可以看看谷歌趋势,它把ELK作为一个整体进行了相关信息的揭示:

grafana 统计mysql数据源 grafana的数据源类型有_数据源_03

即使把Graphite也算进来,ELK仍保持着快速的增长,并有潜力在不久的将来保持领先。

grafana 统计mysql数据源 grafana的数据源类型有_数据源_04

共同协作

Kibana和Grafana都是强大的可视化工具。然而,Grafana和InfluxDB组合是用于度量数据的,反之,Kibana是流行的ELK栈的一部分,它可以更为灵活地浏览日志数据。

这两个平台都是好的选择,甚至有时还可以互补。首先,用Kibana去分析你的日志。然后,把数据导入到Grafana作为可视化层。这些的前提是需要同一个Elasticsearch库。