当前位置:网站首页>【Prometheus】 Grafana数据与可视化
【Prometheus】 Grafana数据与可视化
2022-08-11 09:38:00 【Young丶】
“You can’t fix what you can’t see”。可视化是监控的核心目标之一,在本章中我们将介绍Prometheus下的可视化技术。例如,Prometheus自身提供的Console Template能力以及Grafana这一可视化工具实现监控数据可视化。Prometheus UI提供了基本的数据可视化能力,可以帮助用户直接使用PromQL查询数据,并将数据通过可视化图表的方式进行展示,而实际的应用场景中往往不同的人对于可视化的需求不一样,关注的指标也不一样,因此我们需要能够有能力,构建出不同的可视化报表页面。 本章学习的内容就主要解决以上问题。
Grafana的基本概念
在[【Prometheus】 Prometheus 入门到实战搭建监控系统]中我们已经尝试通过Grafana快速搭建过一个主机监控的Dashboard,在本章中将会带来读者学习如何使用Grafana创建更加精美的可视化报表。
首先Grafana是一个通用的可视化工具。‘通用’意味着Grafana不仅仅适用于展示Prometheus下的监控数据,也同样适用于一些其他的数据可视化需求。在开始使用Grafana之前,我们首先需要明确一些Grafana下的基本概念,以帮助用户能够快速理解Grafana。
数据源(Data Source)
对于Grafana而言,Prometheus这类为其提供数据的对象均称为数据源(Data Source)。目前,Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch的支持。对于Grafana管理员而言,只需要将这些对象以数据源的形式添加到Grafana中,Grafana便可以轻松的实现对这些数据的可视化工作。
仪表盘(Dashboard)
通过数据源定义好可视化的数据来源之后,对于用户而言最重要的事情就是实现数据的可视化。在Grafana中,我们通过Dashboard来组织和管理我们的数据可视化图表:
如上所示,在一个Dashboard中一个最基本的可视化单元为一个Panel(面板),Panel通过如趋势图,热力图的形式展示可视化数据。 并且在Dashboard中每一个Panel是一个完全独立的部分,通过Panel的**Query Editor(查询编辑器)**我们可以为每一个Panel自己查询的数据源以及数据查询方式,例如,如果以Prometheus作为数据源,那在Query Editor中,我们实际上使用的是PromQL,而Panel则会负责从特定的Prometheus中查询出相应的数据,并且将其可视化。由于每个Panel是完全独立的,因此在一个Dashboard中,往往可能会包含来自多个Data Source的数据。
Grafana通过插件的形式提供了多种Panel的实现,常用的如:Graph Panel,Heatmap Panel,SingleStat Panel以及Table Panel等。用户还可通过插件安装更多类型的Panel面板。
除了Panel以外,在Dashboard页面中,我们还可以定义一个Row(行),来组织和管理一组相关的Panel。
除了Panel, Row这些对象以外,Grafana还允许用户为Dashboard定义Templating variables(模板参数),从而实现可以与用户动态交互的Dashboard页面。同时Grafana通过JSON数据结构管理了整个Dasboard的定义,因此这些Dashboard也是非常方便进行共享的。Grafana还专门为Dashboard提供了一个共享服务:https://grafana.com/dashboards,通过该服务用户可以轻松实现Dashboard的共享,同时我们也能快速的从中找到我们希望的Dashboard实现,并导入到自己的Grafana中。
组织和用户
作为一个通用可视化工具,Grafana除了提供灵活的可视化定制能力以外,还提供了面向企业的组织级管理能力。在Grafana中Dashboard是属于一个Organization(组织),通过Organization,可以在更大规模上使用Grafana,例如对于一个企业而言,我们可以创建多个Organization,其中**User(用户)**可以属于一个或多个不同的Organization。 并且在不同的Organization下,可以为User赋予不同的权限。 从而可以有效的根据企业的组织架构定义整个管理模型。
Grafana与数据可视化
对于Grafana而言,Prometheus就是一个用于存储监控样本数据的数据源(Data Source)通过使用PromQL查询特定Prometheus实例中的数据并且在Panel中实现可视化。
接下来,我们将带领读者了解如何通过Panel创建精美的可视化图表。
认识面板(Panel)
Panel是Grafana中最基本的可视化单元。每一种类型的面板都提供了相应的查询编辑器(Query Editor),让用户可以从不同的数据源(如Prometheus)中查询出相应的监控数据,并且以可视化的方式展现。
Grafana中所有的面板均以插件的形式进行使用,当前内置了5种类型的面板,分别是:Graph
,Singlestat
,Heatmap
, Dashlist
,Table
以及Text
。
其中像Graph这样的面板允许用户可视化任意多个监控指标以及多条时间序列。而Siglestat则必须要求查询结果为单个样本。Dashlist和Text相对比较特殊,它们与特定的数据源无关。
通过Grafana UI用户可以在一个Dashboard下添加Panel,点击Dashboard右上角的“Add Panel”按钮,如下所示,将会显示当前系统中所有可使用的Panel类型:
选择想要创建的面板类型即可。这里以Graph面板为例,创建Panel之后,并切换到编辑模式,就可以进入Panel的配置页面。对于一个Panel而言,一般来说会包含2个主要的配置选项:General(通用设置)、Metrics(度量指标)。其余的配置则根据Panel类型的不同而不同。
在通用设置中,除了一些Panel的基本信息以外,最主要的能力就是定义动态Panel的能力,这部分内容会在本章的“模板化Dashboard”小结中详细介绍。
对于使用Prometheus作为数据源的用户,最主要的需要了解的就是Metrics设置的使用。在Metric选项中可以定义了Grafana从哪些数据源中查询样本数据。Data Source中指定当前查询的数据源,Grafana会加载当前组织中添加的所有数据源。其中还会包含两个特殊的数据源:Mixed和Grafana。 Mixed用于需要从多个数据源中查询和渲染数据的场景,Grafana则用于需要查询Grafana自身状态时使用。
当选中数据源时,Panel会根据当前数据源类型加载不同的Query Editor界面。这里我们主要介绍Prometheus Query Editor,如下所示,当选中的数据源类型为Prometheus时,会显示如下界面:
Grafana提供了对PromQL的完整支持,在Query Editor中,可以添加任意个Query,并且使用PromQL表达式从Prometheus中查询相应的样本数据。
参看node_export cpu使用率
sum by(instance) (avg without(cpu) (irate(node_cpu_seconds_total{mode!="idle"}[5m])))
每个PromQL表达式都可能返回多条时间序列。Legend format用于控制如何格式化每条时间序列的图例信息。Grafana支持通过模板的方式,根据时间序列的标签动态生成图例名称,例如:使用表示使用当前时间序列中的instance标签的值作为图例名称:
{ {instance}}-{ {mode}}
当查询到的样本数据量非常大时可以导致Grafana渲染图标时出现一些性能问题,通过Min Step可以控制Prometheus查询数据时的最小步长(Step),从而减少从Prometheus返回的数据量。
Resolution选项,则可以控制Grafana自身渲染的数据量。例如,如果Resolution的值为1/10,Grafana会将Prometeus返回的10个样本数据合并成一个点。因此Resolution越小可视化的精确性越高,反之,可视化的精度越低。
Format as选项定义如何格式化Prometheus返回的样本数据。这里提供了3个选项:Table,Time Series和Heatmap,分别用于Tabel面板,Graph面板和Heatmap面板的数据可视化。
除此以外,Query Editor还提供了调试相关的功能,点击Query Inspector可以展开相关的调试面板:
变化趋势:Graph面板
在面板中,可以查看当前Prometheus返回的样本数据,用户也可以提供Mock数据渲染图像。
Graph面板是最常用的一种可视化面板,其通过折线图或者柱状图的形式显示监控样本随时间而变化的趋势。Graph面板天生适用于Prometheus中Gauge和Counter类型监控指标的监控数据可视化。例如,当需要查看主机CPU、内存使用率的随时间变化的情况时,可以使用Graph面板。同时,Graph还可以非常方便的支持多个数据之间的对比。
PS: 现在已更名为 Time series
Graph面板与Prometheus
Graph面板通过折线图或者柱状图的形式,能够展示监控样本数据在一段时间内的变化趋势,因此其天生适合Prometheus中的Counter和Gauge类型的监控指标的可视化,对于Histogram类型的指标也可以支持,不过可视化效果不如Heatmap Panel来的直观。
使用Graph面板可视化Counter/Gauge
以主机为例,CPU使用率的变化趋势天然适用于使用Grapn面板来进行展示:
在Metrics选项中,我们使用以下PromQL定义如何从Prometheus中读取数据:
sum by(instance) (avg without(cpu) (irate(node_cpu_seconds_total{mode!="idle"}[5m])))
根据当前Prometheus的数据采集情况,该PromQL会返回多条时间序列(在示例中会返回3条)。Graph面板会从时间序列中获取样本数据,并绘制到图表中。 为了让折线图有更好的可读性,我们可以通过定义Legend format为{ { instance }}
控制每条线的图例名称:
由于当前使用的PromQL的数据范围为0~1表示CPU的使用率,为了能够更有效的表达出度量单位的概念,我们需要对Graph图表的坐标轴显示进行优化。如下所示,在Axes选项中可以控制图标的X轴和Y轴相关的行为:
除了在Metrics设置图例的显示名称以外,在Graph面板的Legend选项可以进一步控制图例的显示方式,如下所示:
Thresholds,Threshold主要用于一些自定义一些样本的阈值,例如,定义一个Threshold规则,如果CPU超过50%的区域显示为warning状态,可以添加如下配置:
Graph面板则会在图表中显示一条阈值,并且将所有高于该阈值的区域显示为warining状态,通过可视化的方式直观的在图表中显示一些可能出现异常的区域。
需要注意的是,如果用户为该图表自定义了Alert(告警)配置,Thresholds将会被警用,并且根据Alert中定义的Threshold在图形中显示阈值内容。关于Alert的使用会在后续部分,详细介绍。
当前状态:SingleStat面板
Singlem Panel侧重于展示系统的当前状态而非变化趋势。如下所示,在以下场景中特别适用于使用SingleStat:
当前系统中所有服务的运行状态;
当前基础设施资源的使用量;
当前系统中某些事件发生的次数或者资源数量等。
当前系统中某些事件发生的次数或者资源数量等。
如下所示,是使用SingleStat进行数据可视化的显示效果:
使用SingleStat Panel
从Dashboardc创建Singlestat Panel,并进入编辑页面, 如下所示:
对于SingleStat Panel而言,其只能处理一条时间序列,否则页面中会提示“Multiple Series Error”错误信息。这里使用如下PromQL查询当前主机负载:
node_load1{instance="localhost:9100"}
默认情况下,当前面板中会显示当前时间序列中所有样本的平均值,而实际情况下,我们需要显示的是当前主机当前的负载情况,因此需要通过SingleStat Panel的Options选项控制当前面板的显示模式:
如上所示,通过Value配置项组可以控制当前面板中显示的值,以及字体大小等。对于主机负载而言,我们希望能够显示当前的最新值,因此修改Calculation 为**Last * **即可。
如果希望面板能够根据不同的值显示不同的颜色的话,则可以定义Thresholds与Colors的映射关系,例如,定义Thresholds的分割区间值为“0,1”,则当Value的值落到不同的范围内时,将显示不同的颜色。
如果希望能够显示当前时间序列的样本值变化情况,则可以启用Spark lines配置。启用之后,Singlestat面板中除了会显示当前的最新样本值以外,也会同时将时间序列中的数据已趋势图的形式进行展示。
除了通过数字大小反应当前状态以外,在某些场景下我们可能更关心的是这些数字表示的意义。例如,在Promthues监控服务的健康状态时,在样本数据中会通过0表示不健康,1表示健康。 但是如果直接将0或1显示在面板中,那么可视化效果将缺乏一定的可读性。
为了提升数字的可读性,可以在Singlestat Panel中可以通过Value Mappings定义值的映射关系。Siglesta支持值映射(value to text)和区间映射(range to text)两种方式。 如下所示:
变量
在Grafana中用户可以为Dashboard定义一组变量(Variables),变量一般包含一个到多个可选值。如下所示,Grafana通过将变量渲染为一个下拉框选项,从而使用户可以动态的改变变量的值:
例如,这里定义了一个名为node的变量,用户可以通过在PromQL表达式或者Panel的标题中通过以下形式使用该变量:
sum (avg without(cpu) (irate(node_cpu_seconds_total{mode!="idle",instance=~"$node"}[5m])))
变量的值可以支持单选或者多选,当对接Prometheus时,Grafana会自动将$node的值格式化为如“host1|host2|host3”的形式。配合使用PromQL的标签正则匹配“=~”,通过动态改变PromQL从而实现基于标签快速对时间序列进行过滤。
变量定义
通过Dashboard页面的Settings选项,可以进入Dashboard的配置页面并且选择Variables子菜单:
用户需要指定变量的名称,后续用户就可以通过$variable_name的形式引用该变量。Grafana目前支持6种不同的变量类型,而能和Prometheus一起工作的主要包含以下5种类型:
类型 | 工作方式 |
---|---|
Query | 允许用户通过Datasource查询表达式的返回值动态生成变量的可选值 |
Interval | 该变量代表时间跨度,通过Interval类型的变量,可以动态改变PromQL区间向量表达式中的时间范围。如rate(node_cpu[2m]) |
Datasource | 允许用户动态切换当前Dashboard的数据源,特别适用于同一个Dashboard展示多个数据源数据的情况 |
Custom | 用户直接通过手动的方式,定义变量的可选值 |
Constant | 常量,在导入Dashboard时,会要求用户设置该常量的值 |
Label属性用于指定界面中变量的显示名称,Hide属性则用于指定在渲染界面时是否隐藏该变量的下拉框。
使用变量过滤时间序列
当Prometheus同时采集了多个主机节点的监控样本数据时,用户希望能够手动选择并查看其中特定主机的监控数据。这时我们需要使用Query类型的变量。
如上所示,这里我们为Dashboard创建了一个名为node的变量,并且指定其类型为Query。Query类型的变量,允许用户指定数据源以及查询表达式,并通过正则匹配(Regex)的方式对查询结果进行处理,从而动态生成变量的可选值。在这里指定了数据源为Prometheus,通过使用node_load1我们得到了三条时间序列:
node_load1{instance="193.168.0.183:9100",job="node"}
node_load1{instance="193.168.0.192:9100",job="node"}
node_load1{instance="193.168.0.30:9100",job="node"}
通过指定正则匹配表达式为/.*instance="([^"]*).*/
从而匹配出标签instance的值作为node变量的所有可选项,即:
193.168.0.183:9100
193.168.0.192:9100
193.168.0.30:9100
Selection Options选项中可以指定该变量的下拉框是否支持多选,以及是否包含全选(All)选项。
保存变量后,用户可以在Panel的General或者Metrics中通过$node的方式使用该变量,如下所示:
边栏推荐
- halcon实例
- WordpressCMS主题开发02-制作顶部header.php和footer.php
- Open Office XML 格式中的 Style 设计原理
- HDRP Custom Pass Shader Get world coordinates and near clipping plane coordinates
- Typescrip编译选项
- Song of the Cactus - Massive Rapid Expansion (1)
- 游戏服务器中集群网关的设计
- 数据库事务
- 深度学习100例 —— 卷积神经网络(CNN)识别眼睛状态
- 无代码平台助力中山医院搭建“智慧化管理体系”,实现智慧医疗
猜你喜欢
A few days ago, Xiaohui went to Guizhou
OAK-FFC Series Product Getting Started Guide
Three handshakes and four waves
单元测试系统化讲解之PowerMock
深度神经网络与人脑神经网络哪些区域有一定联系?
Open Office XML 格式中的 Style 设计原理
Continuous Integration/Continuous Deployment (2) Jenkins & SonarQube
unity shader 测试执行时间
Data middle platform program analysis and development direction
Validate the execution flow of the interceptor
随机推荐
最强大脑(2)
tar 命令使用
游戏服务器中集群网关的设计
pycharm 取消msyql表达式高亮
全新FIDE 编译简单评测
企业展厅制作要具备的六大功能
MongoDB 对索引的创建查询修改删除 附代码
刷题错题录2-向上取整、三角形条件、字符串拼接匹配、三数排序思路
仙人掌之歌——大规模高速扩张(1)
Network model (U - net, U - net++, U - net++ +)
QTableWidget 使用方法
Typora和基本的Markdown语法
PowerMock for Systematic Explanation of Unit Testing
Continuous Integration/Continuous Deployment (2) Jenkins & SonarQube
VideoScribe stuck solution
mysql中查询多个表中的数据量
网络模型(DeepLab, DeepLabv3)
Primavera Unifier advanced formula usage sharing
Primavera Unifier custom report creation and print sharing
IPQ4019/IPQ4029 support WiFi6 MiniPCIe Module 2T2R 2×2.4GHz 2x5GHz MT7915 MT7975