乐趣区

关于运维:Grafana-系列统一展示3Prometheus-仪表板

系列文章

  • Grafana 系列文章

常识储备

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 编写.

退出移动版