背景
QQ直播前端团队接入腾讯云前端性能监控(RUM)后,对目前的监控能力以及上报数据进行了梳理, 并着手进行了前端性能监控的专项建设,其中监控数据大盘建设是不可或缺的一环。
可视化的监控大盘能够清晰明了的察看到各我的项目运行状况,宏观上能疾速进行我的项目间的横向比照,也能够十分便捷的进行我的项目各数据维度的具体展现,纵向的剖析各指标数据的统计。
通过对数据大盘反对能力的调研,咱们采纳Grafana进行了数据大盘的建设。通过搭建Grafana服务,而后增加监控上报数据,最终使得【QQ直播前端监控数据大盘】得以建设实现。
那么什么是Grafana?
Grafana是一款开源的数据可视化工具,应用Grafana能够十分轻松的将数据转成图表(如下图)的展示模式来做到数据监控以及数据统计。
Grafana官网提供Linux,Windows,MacOS,Docker版本
下载链接: https://grafana.com/get/
本文将依靠建设数据大盘的教训,重点介绍一下Grafana的应用,助力小伙伴们成为Grafana高手。
数据与图表
数据的可视化都是通过图表为载体的,不同的图表能够将数据进行不同侧重点的展示,要进行数据大盘的建设,首先要对图表有一个简略的理解,这样能力在数据大盘搭建过程中抉择适合的图表,正当的进行可视化成果的展现。
意识Grafana的图表
Grafana的图表的抉择门路都是在Visualization类目下进行图表的抉择
- 折线图
示例图表:Time series
图表配置:Graph styles
- style: Lines
- Fill opacity: 3
- Gradient mode: scheme
- 柱状图
示例图表:Time series
图表配置:Graph styles
- style: Bars
- Fill opacity: 3
- Gradient mode: scheme
- 点状图
示例图表:Time series
图表配置:Graph styles
- style: Points
- Point size: 5
- Stack series: Normal
- 饼状图
示例图表:Pie chart
- 繁多状态图
示例图表:Stat
图表配置:Graph styles
- style: Bars
- Fill opacity: 3
- Gradient mode: scheme
- 仪表盘
示例图表:Gauge
- 表格
示例图表:Table
- 文本
示例图表:Text(反对Markdown和HTML两种格局)
数据与图表的搭配
(一)依照数据格式辨别
柱状图, 折线图, 饼状图的图表都须要数据具备工夫序列,用于展现在肯定的工夫区间或者是间断的工夫范畴内,繁多数据或者多种分类数据的变化趋势,或者是数量占比。
状态图, 表格数据,仪表盘等则对数据没有工夫序列要求,状态图,仪表盘可用于进行一些总结性的数据展现,例如速度,温度,进度,完成度等, 表格数据则更适宜展现简单数据或者多维度数据。
(二)依照应用用意辨别
数据比拟:柱状图,折线图比拟适合,能够实现单数据,多品种数据的比拟,能清晰看到变化趋势
占比分类:饼图,仪表盘, 繁多状态图等比拟适合,能够清晰的看到每个数据整体性的占比
趋势比拟:折线图,面积图(折线可设置覆盖面积) 等比拟适合,能直观展示数据变动
散布类:饼图, 散点图等比拟适合
(三)其余
文字类图表就如同名字含意一样,可用于展现文字相干信息,并且个性化定制水平,灵活性排布反对都十分高(得益于Markdown和HTML的弱小灵活性)
表格对于日志类型,或者是其余多维度数据展现较为适合,实用于整体性给出一个报表,并且具备排序等公共性能,不便数据疾速比拟。
数据与图表的增加与扩大
数据源与图表的扩大Grafana都采纳插件的模式,因而咱们想要扩大某个类型的数据源或者图表时,都须要先在Grafana插件市场找到指标插件,而后进行装置,如下图代码
FROM grafana/grafana:8.3.1USER rootRUN grafana-cli plugins install grafana-clickhouse-datasource //数据源插件RUN grafana-cli plugins install auxmoney-waterfall-panel //图表插
(一)数据源增加
关上Grafana平台,点击左侧“设置”图标,进入DataSource治理面板。
在“Add data source"面板中抉择适合的数据源,并配置数据库信息。下图以Promethrus为例,增加数据源须要进行必要的配置,例如数据源的ip,port以及鉴权信息等。
(二)图表插件增加
关上Grafana平台,点击左侧:“设置”图标,进入Plugins治理面板
在tab栏筛选曾经装置的插件,就能够看到曾经装置能够应用的插件
图表面板曾经装置,能够间接在创立面板的时候指定类型应用
Grafana入门应用
这里须要辨别两个概念:
- 看板(dashboard): 一个或多个数据图表造成的汇合
- 面板(panel):组成看板的其中一个图表
(一)创立一个看板 (dashboard)
创立一个数据可视化看板的前提是须要有数据源的接入, 具体具体接入办法见数据与图表的增加与扩大
关上Grafana平台,点击左侧"加号",点击Create类目下的Dashboard 按钮,新创建一个空表的看板, 会默认弹出四个增加panel的选项
- 增加一个空白面板
- 增加一个新的行,用于面板的分类
- 从面板库增加一个面板
- 从剪贴板增加一个面板,能够用来疾速复制一个已有的面板
点击看板右上角保留看板。
- 输出看板名称
- 输出简略形容文字
- 抉择看板所属目录(用来分类管理看板)
- 可选为看板设置Tag,标记看板的特色,前期可依据Tag来筛选看板
- 其余选项可按需自主定义
(二)创立面板 (panel)
点击上图所示的图表,会弹出创立面板的四种抉择,能够依据本人的需要自主创立,上面咱们以创立空白面板为例
击Add a new panel按钮,你就会创立一个空白数据的图表面板,如下图
(三)面板数据的获取
前文曾经提到, 创立一个数据可视化看板的前提是须要有数据源的接入,因而,咱们想要获取数据,必须要进行数据源的接入
- 抉择数据源(Data source)
配置抉择本人接入的数据源后,后续能力进行相干数据获取的语法编写,这里不同的数据源之前须要的语法也不一样,因而大家能够本人依据本人的条件自主抉择, 因为QQ直播接入的数据源是influxdb, 因而前面的例子将会以influxdb语法为例。
- SQL语句的编写
Grafana的面板语法编辑有两种模式, 繁难模式与高级模式
Grafana一个面板反对多条SQL语句
繁难模式:繁难模式数据的获取次要通过下拉框的模式抉择具体的指标以及判断条件, 反对增加多个条件
高级模式:通过点击编辑图标能够进行编辑模式的切换,高级模式下为全副的SQL语句的编书写,此模式对于语法有肯定的要求,然而获取数据会更加的灵便
(四)面板的根底配置
在编辑实现数据获取的SQL语句之后,面板上应该曾经有了相干数据的展现,此时能够依据本人的数据格式,以及展现诉求来抉择对应的图表,图表具体抉择参考上文数据与图表的搭配
咱们以默认的Time series的折线图为例,简述一下面板的根底配置
- 面板的根底信息
在通过SQL语句抉择加载实现数据后,图表会有默认的款式给到咱们,此时如果对面板无其余要求,只需配置一下面板的根底信息就可实现Grafana的看板配置
根底信息包含
- 题目
- 形容
- 背景是否通明
- 数据提醒
Tootip配置项用于配置当鼠标通过(hover)图表数据点的时候的提示信息, 可选为Single单个揭示, All显示所有数据, Hidden都不显示
- 图例(legend)显示设置
图例显示模式有三种
- List (默认), 图例数据横向顺次展现
- Table, 图例数据会依照表格模式展现
- Hidden, 不展现图例
图例的地位
- Bottom, 排列在图表底部
- Right, 排列在图表的右侧
图例值展现
此处会有一个下拉列表供咱们抉择图例的显示数据,默认不展现,用户也能够抉择数据展现模式,例如最大值,最小值,平均值等
- 坐标轴(Axis)配置
坐标轴的根底配置个别只须要设置一下坐标轴的名称(Label)即可,其余的设置能够依照默认值不必批改,上面简述一下配置的含意
- Width选项能够抉择设置坐标轴(Label)的占比宽度
- Soft min以及Soft max用来设置纵坐标的显示的最大值最小值
- Show gride lines能够设置是否显示背景的网格线
- Scale用来设置是否进行数据的放大,目标是让数据比照更加清晰
通过以上对一个图表面板的根底配置,咱们的一个图表基本上曾经成型,能够达到数据可视化的失常显示目标,剩下的就是增强对本人数据格式类型的剖析以及基于本人的可视化诉求来进行适合的图表面板的配置抉择,就能够通过多个图表的增加来实现本人初版的数据可视化看板。
Grafana进阶应用
当咱们抉择一个图表插件进行数据可视化的时候,图表的一些属性会帮咱们设置好了默认值,然而基于兼容性更广的个性,这些默认值兴许并不是咱们抉择图表最合适的展现成果,因而为了进一步晋升图表的展现性,咱们能够通过以下属性来进行面板的进一步丑化。
(一)图表属性配置 (Standard options)
此选项框中的属性配置,能够使得咱们的数据展现更加的精确,例如纵坐标的单位,咱们不想采纳通用意义上的在Label上进行命名标注单位例如耗时(ms), 那么就能够抉择此处的单位属性(Unit)进行更准确的展现
- 单位(Unit)
在单位选项中, 你能够进行十分精细化的抉择,选项框中简直蕴含了所有品类用到的单位属性,例如百分比,长度单位,工夫单位,角度单位等等
- 显示范畴(Min, Max)
在Min, Max 选项中,容许用户输出一个数字进行显示范畴的限度,那么图表上在显示范畴之外的数据将不会在图表中显示,例如我将耗时限度在0~3000范畴,那么3000以外的数据将会被暗藏
- Decimals 选项能够用来设置纵坐标数据的小数点范畴
- Display Name 选项则能够用来设置图例显示名字,然而因为限度,只能在只有一类数据时比拟实用,如果数据类别较多,单纯在此处设置会将全副图例数据笼罩,因而图例的名称最好在SQL语句编写的时候就做好展现。当然前面也会讲有别的办法进行多种图例数据别名的独自设置
- 图表色彩配置(Color scheme)
个别图表色彩的展现都会有默认值,不过咱们想要扭转当初图表曲线的色彩分类能够在此处进行设置。
咱们能够抉择整体图表的色彩走向或者是色彩散布,然而个别曲线展现的色彩还是会依据数据本人适配,因而如果咱们想要扭转某一条曲线的色彩,能够间接点击图例后面的色彩icon,进行色彩抉择。咱们能够依据提供选项进行抉择,也能够自定义设置色彩。
(二)阈值设置 (Thresholds)
有些图表插件是反对设置阈值的,阈值的设置能够使得咱们对数据的合规水平有清晰的比照,可能直观的掂量出以后数据的品质,因而阈值设置也是面板丑化展现的一个重要局部
如上图示例,咱们设置对耗时的图表设置了两个阈值,上图的意义是:
- 在3000ms和5000ms设置阈值
- 3000ms以下将视为衰弱,色彩标记为绿色
- 3000ms~5000ms视为亚健康,色彩标记黄色
- 5000ms以上视为警示,色彩标记为红色
阈值的模式有两种抉择
- 绝对值, 即依照标记的阈值数据进行比拟
- 百分比, 阈值为绝对于最大值的占比
阈值展现的模式有四种:
- 不展现(off)
- 只展现阈值线 (as lines)
- 只展现区域 (as filled regions)
- 同时展现阈值线和区域 (as filled regions and lines)
下图为咱们抉择绝对值模式下,展现线和区域的阈值示例图, 由图能够看出数据在不同阈值区间的散布,以及与阈值的比照,因而咱们能直观的评估出数据的品质
(三)数值映射 (Value mappings)
图表的展现都是由许多的值来组成的一个个点,连线,反过来讲,图表就是数据值的展示,在图表中,有时候有些数据并不是咱们现实的数值,或者说咱们想特异性的让某些值显示为其余值(写SQL语句也能够实现),这时候能够应用数值映射选项
数值映射的模式能够有以下四种:
- 单纯的某个值映射
- 一段范畴区间映射
- 正则表达式映射
- 针对某类值映射
例如在示例中,如果咱们衰弱波段数据具体值不关怀, 只是关怀整体的数据稳定范畴是否在衰弱范畴之内,咱们能够把0~3000ms的范畴映射为衰弱,那么再具体显示的时候,不再会有具体值给到咱们,对立会展现衰弱,如下图:
这个性能更加实用于表格数据,例如咱们明确的将空数据映射为空或0的场景,如下图
(四)数据笼罩 (Overrides)
数据笼罩容许咱们对之前曾经设置好的图表进行个性化设置,它相当于图表更高级的设置,笼罩的范畴能够是整个SQL语句获取的数据,也能够是数据中某一类图例数据
具体笼罩的数据类别:
- 某一类数据
- 正则匹配到的数据
- 某些类型的数据
- 整个SQL查问的数据
在设置了一个Override之后,就能够进一步进行子项的配置,子项外面的属性简直与上文介绍的图表属性统一
咱们通过笼罩属性的配置,能够让批改到之前咱们曾经在整体设置好的图标款式
例如咱们当初通过SQL查问,曾经获取到了js\_ready和css\_ready的耗时数据,然而咱们想让这两种数据比照更加明确,既可能清晰的看到整体的趋势,也能看到某类数据独自的变动,这时咱们能够通过override属性进行配置,让两个数据的纵坐标别离在左右两边,并且数据展现用折线和柱状图别离示意。
具体override配置属性如下图:
对css\_ready数据配置:
- 图表展现为柱状图, 柱状图数据点居中
- 纵坐标数据靠右展现,色彩为浅绿色
- 题目设置为CSS耗时(ms)
对js\_ready数据配置:
- 默认根底配置折线图
- 默认纵坐标靠左展现
- 设置色彩红色
- 题目设置为JS耗时(ms)
最终后果如下图:
(五)变量与模板
在Grafana外面,学会应用变量,会发现关上了新世界的大门,用好变量,可能你的工作量就会缩减一半,甚至更多。
变量的应用场景有很多,例如咱们编写SQL语句中的工夫选项($\_\_interval),就是内置的一个变量,通过这个工夫变量,能够管制多个图表在不同工夫范畴内的展现状况,因而一个好的变量的应用,能够让咱们只配置一个图表,达到展现不同条件下的数据的目标,而不必去为每一种状况设置一个图表。
模板在Grafana中最简略的含意就是任何一条蕴含变量的查问(query)。
【变量的设置】
变量的设置是基于看板的,看板内设置的变量,对看板内的所有面板是共享的
点击看板设置,进入变量设置页面
【变量的品种】
在增加一个变量的可选下拉框中,能够抉择增加的变量类型,共计有以下几种变量能够抉择
变量类型 | 形容 |
---|---|
query | 查问变量容许编写能够返回指标名称、标签值或键列表的数据源查问。例如,查问变量可能会返回服务器名称, ID 或数据中心的列表。变量值随着数据源查问动静获取选项而变动。 |
custom | 手动定义变量选项,应用逗号分隔的列表 |
text box | 显示具备可选默认值的自在文本输出字段 |
constant | 设置一个常量 |
data source | 疾速增加一个数据源的变量 |
interval | 代表时间跨度的变量 |
ad hoc filters | 主动增加到数据源的所有指标查问的键/值过滤器(仅限 InfluxDB、Prometheus 和 Elasticsearch) |
增加变量的其余输入框选项能够间接依据英文的意义十分直白的看出,例如设置面标签信息,形容信息,以及设置是否在看板中暗藏,对于某些变量类型还能够设置是否能够多选或者是否蕴含所有的值的选项等等,这些设置能够依据本人的需要来抉择。
【变量的应用】
设置实现变量之后,变量的应用有两种模式:
- $varname, 这是最间接的形式, 然而这种语法会有限度,就是不能在一个词的两头应用例如:apps.frontend.$varname.requests.count
- ${var\_name}, 如果想要在表达式两头插入变量,请应用此语法,另外这种语法还有一些高级用法,${var\_name:<format>},这种格局能够更好地管制 Grafana 如何插入值,具体的用法能够参考官网文档
【变量简略应用示例】
沿用上文的数据,咱们创立一个简略的自定义变量,url\_event,如下图
获取数据的时候,sql语法就能够写成如下
这样,咱们只建设了一个图表面板,因为应用了变量,因而能够只用变量的切换就实现看板数据的变动,如下
变量抉择 js\_ready
变量抉择css\_ready
(六)Link的应用
在Grafana中,能够应用链接来进行看板的跳转以及外链的跳转,并且link的应用也非常灵活。
在一个数据面板的设置中,link能够的设置次要有两种形式
整个面板设置链接
在数据面板的设置中,前文咱们没有细讲link的选项,这里其实是为整个数据面板设置跳转链接的入口,通过此处设置link,能够在面板上减少一个icon, 实现咱们在点击的时候进行跳转, 具体成果如下图
为具体数据设置link(data links)
data links属性设置个别只在柱状图、折线图、表格面板里才有,并且,如果没有搭配override属性进行个性化设置的话,默认每个数据点都会设置上跳转的链接,成果如下图
这样的设置其实和整个面板设置link相似,因而不同的data links 最好和override属性搭配,来进行个性化的数据链接跳转,以达到不通数据跳转不同链接的目标。
(七)Link与变量的搭配
Grafana的link设置非常灵活,在link设置中,能够间接应用曾经设置的看板变量以及零碎的变量来进行链接的组合。
甚至在data links的设置中,还能够间接应用SQL语句查问到的后果来进行链接的组合,这样也可达到不同数值设置不同的跳转链接的性能
在增加链接的时候,如果想查看可用变量列表,能够间接在数据链接URL字段中键入$来查看变量列表,成果如下图:
变量列表里的变量次要能够分为三个类型
- 全局内建的变量,例如工夫变量的 from, to
- 用户创立的模板变量,例如上文示例创立的url\_event
- 基于SQL语句查问进去的数据,个别都在fields字段下
通过援用变量来创立图表面板的跳转链接,能够较为灵便的实现基于数据的外链跳转以及更为高级的数据看板的之间的联动,下文要讲到的数据下钻就是基于data links与变量的搭配来实现。
Grafana高级应用
(一)妙用Transform
后面讲的一些Grafana的应用,都是以SQL语句查问到的数据为根底,在图表可视化上进行的设置与操作,而Transform的性能,大部分是更底层的操作,间接对数据的操作,来达到扭转图表展现的目标,是数据可视化之前的操作。
tranform能够实现将咱们查问到的数据进行进一步加工,例如能够进行数据筛选,计算,重命名,排序以及管制暗藏等性能。
本文以几个较为典型的性能简略介绍一下
通过计算增加数据(Add field from calculation)
数据的计算有两种模式:
- Reduce row: 别离对抉择的特定字段数据的每一行进行聚合计算
- Binary option: 选定的两个字段的值进行数学运算例如加减乘除
转换数据的类型(Convert field type)
能够将抉择的特定字段的值的类型指定为固定的数据类型
依据名称筛选数据展现(Filter data by name)
- 能够将SQL语句查问出的字段名称排列,并且自定义数据的展现与否
- 也能够间接依据正则表达式进行数据筛选
数据合并(Merge)
相似sql中的join,依据工夫序列来进行合并不同的字段数据成为个数据表
重命名(Rename by regex)
能够应用这个性能来进行查问后果名称的转换,容许咱们应用正则表达式来进行重命名内容的匹配
transform还有很多实用的性能,这里就不一一排列,如果有须要用到操作数据的性能,能够思考transform性能,全副的性能能够间接看官网文档
(二)面板的Repeat
面板的repeat也是须要搭配变量性能来应用,图表面板会依据用户抉择的变量个数来进行别离加载,因而,此性能应用的前提是变量的值要大于1个,并且设置了容许多个变量可选,见下图示例
当前提条件满足后,能够在面板的repeat属性进行设置
repeat可选加载的方向是横向还是纵向,并且能够设置最大的反复个数,来防止造成加载展现问题以及性能问题。
当设置实现后,并不会马上失效,须要保留而后退出此图表面板而后从新加载一下数据看板,而后数据图表就会依据咱们抉择的变量的个数来进行别离的展现。
以上文的示例设置之后,成果如图:
(三)数据下钻
要实现一个数据下钻,须要link搭配变量来进行看板之间的联动,次要的思路大体如下:
- 模板看板B中设置好须要的变量
- 模板看板B查问数据时援用变量
- 在源图表面板A中设置跳转到模板看板B的链接,链接上援用咱们设置或者是查问的变量内容
- 跳转至指标模板数据看板B时,模板看板B获取从link上带过去的变量值
- 变量赋值,模板看板B依据变量值刷新数据查问
通过下面的步骤,那么一个数据看板之间的联动就实现了,剩下的步骤就是丰盛变量的设置以及看板内图表面板的内容了。
那么如何从跳转过来的link上获取到携带过去的变量的值呢?
在上文咱们设置变量来控制数据面板repeat的时候,咱们设置了一个变量 url\_event
当控制变量为 js\_ready的时候,看板的整体URL是
当控制变量为 css\_ready的时候,看板的整体URL是
因而咱们能够看到,当咱们看板设置变量并且应用的时候,变量的内容是以query的格局显示在URL上的,并且命名的格局如下:
var-{your_var_name} = {your_var_value}
当变量在url下面显式的标记的时候,Grafana会被动获取链接下面申明的变量的值并赋值给模板变量。
因而依据下面的格局,咱们能够在link下面结构上述的数据query格局,为模板的看板变量赋值。
于是实现一个的数据下钻整体流程都变得清晰了,上面咱们还是以上文的例子来结构一个简略的数据下钻的例子
结构一个整体的page render数据看板A
将数据格式以table的模式展示,整体性的展现当天我的项目的render过程的各个事件均匀耗时状况,如下图:
设置一个具体指标数据的模板看板B
新建另一个数据详情的看板,而后建设一个事件的变量
编写具体事件具体数据的查问SQL语句,并援用变量
通过link实现看板之间的联动
配置数据看板A的data link, 使得每一行数据能够进行下钻详情展现
通过上述步骤,就实现可一个简略的数据下钻,实现可一个我的项目page render过程的整体数据的可视化,并且能够点击具体加载事件查看该事件具体的数据分布趋势
成果如下:
总结
Grafana是一款十分优良的开源可视化工具,能十分不便的将数据进行可视化,非常适合数据大盘建设,以及做数据监控和数据统计的工作。
本文基于理论业务中建设监控数据大盘的教训,介绍了Grafana根本的一些图表概念和应用办法,并对不同的数据类型选取适合的可视化图表提供了一些倡议和思考。
通过三个阶段的介绍,总结了Grafana进行数据可视化入门教程以及一些进阶应用技巧,心愿能在将来你的业务中,数据大盘的建设过程中提供一些便当和思路。
举荐浏览
10大性能陷阱!每个C++工程师都要晓得
AI绘画火了!一文看懂背地技术原理
CPU如何与内存交互?
揭秘go内存!