暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术干货|Grafana及Graph面板全解释

西安川石 2022-12-05
3471



GUIDE

导读


Console Teamplet虽然能满足一定的可视化需求,但是也仅仅是对Prometheus的基本能力的补充。同时使用也会有许多问题,首先用户需要学习和了解Go Template模板语言,其它其支持的可视化图表类型也非常有限,最后其管理也有一定的成本。这里将会带来读者学习如何使用Grafana创建更加精美的可视化报表。

Grafana基本概念

首先Grafana是一个通用的可视化工具。‘通用’意味着Grafana不仅仅适用于展示Prometheus下的监控数据,也同样适用于一些其他的数据可视化需求。在开始使用Grafana之前,我们首先需要明确一些Grafana下的基本概念,以帮助用户能够快速理解Grafana。

01

数据源(Data Source)

对于Grafana而言,Prometheus这类为其提供 数据的对象均称为数据源(Data Source)。目前,Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch的支持。对于Grafana管理员而言,只需要将这些对象以数据源的形式添加到Grafana中,Grafana便可以轻松的实现对这些 数据的可视化工作。

02

仪表盘(Dashboard)

通过数据源定义好可视化的数据来源之后,对于用户而言最重要的事情就是实现数据的可视化。在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中。

03

组织和用户

作为一个通用可视化工具,Grafana除了提供灵活的可视化定制能力以外,还提供了面向企业的组织级管理能力。在Grafana中Dashboard是属于一个Organization(组织),通过Organization,可以在更大规模上使用Grafana,例如对于一个企业而言,我们可以创建多个Organization,其中User(用户)可以属于一个或多个不同的Organization。并且在不同的Organization下,可以为User赋予不同的权限。从而可以有效的根据企业的组织架构定义整个管理模型。

认识面板(Panel)

Panel是Grafana中最基本的可视化单元。每一种类型的面板都提供了相应的查询编辑器(QueryEditor),让用户可以从不同的数据源(如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中查询相应的样本数据。
    avg (irate(node_cpu{mode!='idle'}[2m])) without (cpu)
    复制

    每个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,TimeSeries和Heatmap,分别用于Tabel面板,Graph面板和Heatmap面板的数据可视化。除此以外,Query Editor还提供了调试相关的功能,点击Query Inspector可以展开相关的调试面板:

      (调试面板)

      在面板中,可以查看当前Prometheus返回的样本数据,用户也可以提供Mock数据 渲染图像。

      Graph面板

      Graph面板是最常用的一种可视化面板,其通过折线图或者柱状图的形式显示监控样本随时间而变化的趋势。Graph面板天生适用于Prometheus中Gauge和Counter类型监控指标的监控数据可视化。例如,当需要查看主机CPU、内存使用率的随时间变化的情况时,可以使用Graph面板。同时,Graph还可以非常方便的支持多个数据之间的对比。





      Graph面板与Prometheus

      Graph面板通过折线图或者柱状图的形式,能够展示监控样本数据在一段时间内的变化趋势,因此其天生适合Prometheus中的Counter和Gauge类型的监控指标的可视化,对于Histogram类型的指标也可以支持,不过可视化效果不如Heatmap Panel来的直观。



      使用Graph面板可视化Counter/Gauge

      以主机为例, CPU使用率的变化趋势天然适用于使用Grapn面板来进行展示:

      (Prometheus Counter可视化)

      在Metrics选项中,我们使用以下PromQL定义 如何从Prometheus中读取数据:
        1 - (avg(irate(node_cpu{mode='idle'}[5m])) without (cpu))
        复制
        如下所示:

        根据当前Prometheus的数据采集情况,该PromQL会返回多条时间序列(在示例中会返回3条)。Graph面板会从时间序列中获取样本数据,并绘制到图表中。为了让折线图有更好的可读性,我们可以通过定义Legend format为{{ instance }} 控制每条线的图例名称:

        由于当前使用的PromQL的数据范围为0~1表示CPU的使用率,为了能够更有效的表达出度量单位的概念,我们需要对Graph图表的坐标轴显示进行优化。如下所示,在Axes选项中可以控制图标的X轴和Y轴相关的行为:

        (Axes选项)

        默认情况下,Y轴会直接显示当前样本的值,通过Left Y的Unit可以让Graph面板自动格式化样本值。当前表达式返回的当前主机CPU使用率的小数表示,因此,这里选择单位为percent(0.0.-1.0)。除了百
        分比以外,Graph面板支持如日期、货币、重量、面积等各种类型单位的自换算,用户根据自己当前样本的值含义选择即可。
        除了在Metrics设置图例的显示名称以外,在Graph面板的Legend选项可以进一步控制图例的显示方式,如下所示:

        (Legend选项)
        Options中可以设置图例的显示方式以及展示位置,Values中可以设置是否显示当前时间序列的最小值,平均值等。Decimals用于配置这些值显示时保留的小数位,如下所示:

        除了以上设置以外,我们可能还需要对图表进行一些更高级的定制化,以便能够更直观的从可视化图表中获取信息。在Graph面板中Display选项可以帮助我们实现更多的可视化定制的能力,其中包含三个部分:Draw options、Series overrides和Thresholds。

        Draw Options用于设置当前图标的展示形式、样式以及交互提示行为。其中,Draw Modes用于控制图形展示形式:Bar(柱状)、Lines(线条)、Points(点),用户可以根据自己的需求同时启用多种模式。Mode Options则设置各个展示模式下的相关样式。Hover tooltip用于控制当鼠标移动到图形时,显示提示框中的内容。
        如果希望当前图表中的时间序列以不同的形式展示,则可以通过Series overrides控制,顾名思义,可以为指定的时间序列指定自定义的Draw Options配置,从而让其以不同的样式展示。例如:

        这里定义了一条自定义规则,其匹配图例名称满足/localhost/的时间序列,并定义其以点的形式显示在图表中,修改后的图标显示效果如下:

        Display选项中的最后一个是Thresholds,Threshold主要用于一些自定义一些样本的阈值,例如,定义一个Threshold规则,如果CPU超过50%的区域显示为warning状态,可以添加如下配置:

        Graph面板则会在 图表中显示一条阈值,并且将所有高于该阈值的区域显示为warining状态,通过可视化的方式直观的在图表中显示一些可能出现异常的区域。
        需要注意的是,如果用户为该图表自定义了Alert(告警)配置,Thresholds将会被警用,并且根据Alert中定义的Threshold在图形中显示阈值内容。关于Alert的使用会在后续部分,详细介绍。



        使用Graph面板可视化Histogram

        以Prometheus自身的监控指标prometheus_tsdb_compaction_duration为例,该监控指标记录了Prometheus进行数据压缩任务的运行耗时的分布统计情况。如下所示,是Prometheus返回的样本数据:
          # HELP prometheus_tsdb_compaction_duration Duration of compaction runs.
          # TYPE prometheus_tsdb_compaction_duration histogram
          prometheus_tsdb_compaction_duration_bucket{le="1"} 2
          prometheus_tsdb_compaction_duration_bucket{le="2"} 36
          prometheus_tsdb_compaction_duration_bucket{le="4"} 36
          prometheus_tsdb_compaction_duration_bucket{le="8"} 36
          prometheus_tsdb_compaction_duration_bucket{le="16"} 36
          prometheus_tsdb_compaction_duration_bucket{le="32"} 36
          prometheus_tsdb_compaction_duration_bucket{le="64"} 36
          prometheus_tsdb_compaction_duration_bucket{le="128"} 36
          prometheus_tsdb_compaction_duration_bucket{le="256"} 3
          复制
          之前我们已经介绍过Histogram的指标,Histogram用于统计样本数据的
          分布情况,其中标签le定义了分布桶Bucket的边界,如上所示,表示当前Prometheus共进行了36次数据压缩,总耗时为51.31017077500001ms。其中任务耗时在0~1ms区间内的为2次、在0~2ms区间范围内为36次,以此类推。
          如下所示,如果需要在Graph中显示Histogram类型的监控指标,需要在Query Editor中定义查询结果的Format as为Heatmap。通过该设置Grafana会自动计算Histogram中的Bucket边界范围以及该范围内的值:

          Graph面板重新计算了Bucket边界,如下所示,在0~1ms范围内的任务次数为2,在1~2ms范围内的运行任务次数为34。通过图形的面积,可以反映出各个Bucket下的大致数据分布情况:

          不过通过Graph面板展示Histogram也并不太直观,其并不能直接反映出Bucket的 大小以及分布情况,因此在Grafana V5版本以后更推荐使用Heatmap面板的方式展示Histogram样本数据。关于Heatmap面板的使用将会在接下来的部分介绍。

          往/期/回/顾



          Prometheus(普罗米修斯)核心组件


          Prometheus(普罗米修斯)自定义查询语言PromQL


          Prometheus(普罗米修斯)之PromQL完全解释


          Prometheus(普罗米修斯)PromQL查询语言之操作符


          PromQL查询语言之聚合操作&内置函数


          Prometheus 在HTTP API中使用PromQL


          Prometheus监控4个黄金指标和USE方法


          Prometheus告警及告警规则


          Prometheus部署Alertmanager


          Prometheus之Alertmanager路由配置


          Prometheus定义告警模板&告警通知&性能优化


          Prometheus之Console Template创建可视化监控平台实例

          -End-

          「有用就扩散」

          「有用就点在看」

          更多课程咨询或免费资料领取,扫下方二维码即可!

          文章转载自西安川石,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论