系列文章

知识储备

Prometheus Template Variables

你可以使用变量来代替硬编码的细节,如 server、app 和 pod_name 在 metric 查询中。Grafana 在仪表盘顶部的下拉选择框中列出这些变量,帮助你改变仪表盘中显示的数据。Grafana 将这类变量称为模板变量。

Query Variables

使用 Query 类型的变量来查询 Prometheus 的指标 (metrics)、标签 (labels) 或标签值 (label values) 的列表。

选择一个 Prometheus 数据源查询类型并输入所需的输入:

Variable Syntax

Prometheus 数据源支持在 Query 字段中使用两种变量语法:

  • $<varname>, 如:rate(http_requests_total{job=~"$job"}[$_rate_interval]), 它更容易读和写,但不允许你在词的中间使用变量。一般使用这种变量就够用了。
  • [[varname]], 如:rate(http_requests_total{job=~"[[job]]"}[$_rate_interval])

如果你启用了 Multi-valueInclude all 选项,Grafana 会将标签从纯文本转换为与 regex 兼容的字符串,这需要你使用=~而不是=。所以推荐在 Grafana 中使用 PromQL 组合 Grafana 变量时,首选 =~.

Annotations

注释 (Annotations) 在图表上面叠加丰富的事件信息。你可以在 Dashboard 菜单的 Annotations 视图中添加注释查询。

Prometheus 支持两种方式来查询注释。

  • 一个常规的 metric 查询
  • 一个 Prometheus 的 pending 和 firing 的告警(详见 在运行期间检查警报), 示例为:ALERTS{alertname="<alert name>", alertstate="<pending or firing>", <additional alert labels>}

Step 选项对于限制从你的查询中返回的事件数量很有用。

Ad Hoc Filters Variable

Prometheus 支持特殊的 ad hoc filters 变量类型,你可以用它来临时指定任何数量的 标签/值 过滤器。这些过滤器会自动应用于你所有的 Prometheus 查询。

实战

我们直接从 Grafana Dashboards 中选择一个 Dashboard - JVM(Micrometer) (ID: 4701) 来进行说明演示。

Notes:

这就是选择使用 Grafana 的一个巨大好处,它拥有丰富的生态。

我们一般不需要从零开始构建仪表板,可以站在巨人的肩上,再进行部分调整。

最终效果如下:

细节优化

这里有一些小的仪表板优化细节和大家分享:

  • 对于变量,谨慎启用:Multi-valueInclude all 选项。避免查询数据量过大。
  • 对于展示 Panel 数量特别多的单一 Dashboard, 可以根据 Panel 的类型添加 Row, 并将部分 Row 收起。实现 Lazy Load, 减少查询数据量,优化用户体验。
  • 对于右上角时间范围,建议在合理范围内尽可能小;同时如果查询数据量特别大,建议禁用 auto refresh

配置 JVM Restart Annotation

在这个 Dashboard 里,可以配置关于 JVM Restart 的 Annotation, 具体配置示例如下:

  • Name: Restart Detection
  • Data source: Prometheus
  • Enabled: ️
  • Color: Red
  • Query
    • Expr: resets(process_uptime_seconds{app="$app", pod_name="$pod_name"}[1m]) > 0, 这里是基于 process_uptime_seconds 来实现。
    • Step: 1m
  • Field formats, 这里 title 和 text 字段,可以使用变量,如:{{instance}}
    • Title: Restart
    • Tags: restart-tag
    • Text: uptime reset

最终效果如下(这里一直没有复现 JVM Restart), 用 Grafana Play 的 Demo 演示:

变量

Label Value

具体配置如下,如需要根据 app 的值进行选择,则配置如下:

Name: app

Type: Query

Query: label_values(app)

如果要新增另一个变量 pod_name, 需要基于 app 的结果进行过滤,则配置如下:

Name: pod_name

Query: label_values(jvm_memory_used_bytes{app="$app"}, pod_name)

如果需要对变量根据自己的实际情况进行调整,如,需要将 pod_name 变量改为 instance 变量。

Instance 变量如下:

Name: instance

Query: label_values(jvm_memory_used_bytes{app="$app"}, instance)

则可以进入该 Dashboard 的 Settings -> JSON Model, 中,对pod_name pod_name=\"$pod_name\" 等批量替换为 instance instance=\"$instance\"

Interval

也可以设置时间间隔 (Interval) 作为变量。具体如下:

  • Name: interval
  • Type: Interval
  • Values: 不同的时间间隔用,, 如:5s,10s,30s,1m,10m,30m,1h,6h,12h,1d,7d,14d,30d

然后 Dashboard 下的 Query 可以通过 $__interval$__interval_ms 来使用。

EOF

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

Grafana 系列-统一展示-3-Prometheus 仪表板的更多相关文章

  1. 如何将Prometheus仪表板添加到Grafana

    Grafana是可视化的时间序列的基础设施和应用程序指标领先的图形和仪表盘构建的,但在许多其他领域,包括工业传感器,家庭自动化,天气和过程控制使用.它为您的团队和全世界提供了一种强大而优雅的方式来创建 ...

  2. Grafana 系列文章(十二):如何使用Loki创建一个用于搜索日志的Grafana仪表板

    概述 创建一个简单的 Grafana 仪表板, 以实现对日志的快速搜索. 有经验的直接用 Grafana 的 Explore 功能就可以了. 但是对于没有经验的人, 他们如何能有一个已经预设了简单的标 ...

  3. kong插件Prometheus+grafana图形化展示

    目录 1. 准备工作 3. 为kong添加 prometheus插件 4. 打开kong的metrics支持 4. 配置prometheus.yml添加kong提供的数据信息 5. 在 Grafana ...

  4. Grafana 系列文章(四):Grafana Explore

    ️URL: https://grafana.com/docs/grafana/latest/explore/ Description: Explore Grafana 的仪表盘 UI 是关于构建可视化 ...

  5. Grafana 系列文章(十四):Helm 安装Loki

    前言 写或者翻译这么多篇 Loki 相关的文章了, 发现还没写怎么安装 现在开始介绍如何使用 Helm 安装 Loki. 前提 有 Helm, 并且添加 Grafana 的官方源: helm repo ...

  6. Grafana 系列文章(一):基于 Grafana 的全栈可观察性 Demo

    ️Reference: https://github.com/grafana/intro-to-mlt 这是关于 Grafana 中可观察性的三个支柱的一系列演讲的配套资源库. 它以一个自我封闭的 D ...

  7. Grafana 系列文章(二):使用 Grafana Agent 和 Grafana Tempo 进行 Tracing

    ️URL: https://grafana.com/blog/2020/11/17/tracing-with-the-grafana-cloud-agent-and-grafana-tempo/ ✍A ...

  8. Grafana 系列文章(三):Tempo-使用 HTTP 推送 Spans

    ️URL: https://grafana.com/docs/tempo/latest/api_docs/pushing-spans-with-http/ Description: 有时,使用追踪系统 ...

  9. Grafana 系列文章(五):Grafana Explore 查询管理

    ️URL: https://grafana.com/docs/grafana/latest/explore/query-management/ Description: Explore 中的查询管理 ...

  10. Grafana 系列文章(六):Grafana Explore 中的日志

    ️URL: https://grafana.com/docs/grafana/latest/explore/logs-integration/#labels-and-detected-fields D ...

随机推荐

  1. Windows Oracle 启动OracleDBConsoleorcl 服务时报 Window不能在 本地计算机启动 OracleDBConsoleorcl 。有关更多信息,查阅系统事件日志。如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码 2 。

    一.报错信息如图 二.原因分析: 计算机主机名或IP地址有变化 三.解决方法 依次输入命令: Microsoft Windows [版本 10.0.22000.795](c) Microsoft Co ...

  2. KLatexformula - MathType在Mac上的替代品

    KLatexformula - MathType alternative for MAC 1. KLatexformular 好用! 买了Mac, 升级了系统, MathType安装不了, 寻寻觅觅- ...

  3. c++方便的输出vector和map_重载的应用 【python一样写c++、二】

    写程序,尤其是调试的时候,会想着直接输出一个map或者vector来调错. 但本来的cout<<没有这种功能.我们就会想了,要是c++能和python一样,直接输出一个列表(vector) ...

  4. Redis6.0.9集群搭建

    前提条件: Redis版本:6.0.9(因为5.0之前创建用的是redis-trib,还需要ruby,ruby-gem) 安装环境: Centos7 1. 准备配置文件 一个是通用文件:redis-c ...

  5. OVS学习博客推荐

    博客学习 大致看一遍 openvswitch处理upcall过程分析 upcall-cost分析 连接跟踪(conntrack):原理.应用及 Linux 内核实现 ovs upcall处理流程 Li ...

  6. 算法学习笔记(19): 树上启发式合并(DSU on tree)

    树上启发式合并 DSU on tree,我也不知道DSU是啥意思 这是一种看似特别玄学的优化 可以把树上部分问题由 \(O(n^2)\) 优化到 \(O(n \log n)\). 例如 CodeFor ...

  7. Java输入与输出语句详细解析

    前言 我们在前面的文章中,学习了如何创建Java文件,也学习了Java里的标识符.运算符.进制等内容.有些同学觉得还不够过瘾,给壹哥发来了好多私信,期待我能够把进度更新的再快一点.这不,新内容这就给大 ...

  8. java网络编程--2 IP,端口,通信协议,TCP/UDP对比

    java网络编程--2 IP,端口,通信协议,TCP/UDP对比 1.3.IP ip地址:InetAddress 唯一定位一台网络上的计算机 127.0.0.1 :本机localhost IP地址的分 ...

  9. 集成Health Kit时因证书问题出现错误码50063的解决方案

    一.问题描述及操作 应用集成Health Kit SDK后,在华为手机上进行登录授权时,返回错误码50063. 1.查看相关错误码.'50063'在Health Kit错误码中的描述是"安装 ...

  10. 从pcap文件中提取pcma音频

    操作系统 :Windows10_x64 .CentOS 7.6.1810_x64 wireshark版本:3.6.12 Python 版本  :  3.9.12 一.背景描述 工作中有时候会遇到需要从 ...