Grafana 状态时间线面板,其中包含由标签提供的值(状态)

roo*_*099 17 grafana prometheus

我确实有一个普罗米修斯时间序列,其中包含如下示例:

a_metric{band="1", state="A"} 1
a_metric{band="2", state="C"} 1
a_metric{band="1", state="A"} 1
a_metric{band="2", state="C"} 1
a_metric{band="1", state="B"} 1
a_metric{band="1", state="B"} 1
...
Run Code Online (Sandbox Code Playgroud)

我想在状态时间线面板中可视化该时间序列,以便bands 成为水平带,而states 成为这些带内的离散状态。为此,我必须从标签中提取值state(并使用它们而不是值 1)。

这可能吗?这样的可视化可以实现吗?

如果我理解正确的话,普罗米修斯label_values()不能在这里服务,因为它仅限于模板。我怀疑 Grafana 转换可能会发挥作用,但我还没有这方面的经验。由于 Prometheus 没有字符串类型的指标,因此也出现了复杂性。

更新这是一个基本图像,应@JanGaray 的要求。

基本形象

Waa*_*als 35

怀疑 Grafana 转换可能会发挥作用

通过转换确实可以实现。

简而言之

  1. 将查询格式设置为table
  2. 添加变换Grouping to matrix
    • 将列设置为band
    • 将行设置为time
    • 将单元格值设置为state
  3. 添加变换Convert field type
    • 将字段设置为Time/<column>
    • 作为Time
  4. Value mappings为您拥有的每个状态进行配置

解释

我将展示转换如何工作要了解转换中发生的情况,启用表视图切换设置为活动状态因为这将显示实际返回的数据到可视化。还可以使用以下命令打开和关闭转换眼睛的象征转型确实有助于了解正在发生的事情。

状态时间线可视化最适合使用表作为数据源。虽然它确实支持时间序列,但我们要显示的信息不是时间序列。

当数据如下时,可视化效果最佳。

时间 频段 1 乐队 2
T1 状态A 状态B
T2 C 状态 状态A

但是,当数据格式化为时间序列时,数据将如下所示:

时间 {频段 1,状态 A} {频段 1,状态 C} ...
T1 1
T2 1

因此,首先我们需要将查询格式设置为 from Timeseriesto Table。展开查询选项,并将格式设置为Table.

当这样做时,我们的表格将如下所示。

时间 乐队 状态 价值
T1 频段 1 状态A 1
T1 乐队 2 状态B 1
T2 频段 1 C 状态 1
T2 频段 1 状态A 1

下一步是旋转表格。为此,我们添加Grouping to matrix转换。

  • 将列设置为band
  • 将行设置为time
  • 将单元格值设置为state
时间 频段 1 乐队 2
1000 状态A 状态B
2000年 C 状态 状态A

现在只剩下一个问题了。第一列应该是数据类型time,但它的类型是string。您可以通过列名称前面的图标看到这一点。在我的示例中用表情符号表示。

但这是一个简单的解决方法。Convert field type只需在变换下面添加变换即可Grouping to matrix

  • 将字段设置为Time/<column>
  • 作为Time

现在该表应如下所示:

时间 频段 1 乐队 2
T1 状态A 状态B
T2 C 状态 状态A

例子

下面显示了 ArgoCD 的示例。它显示每个应用程序随时间的同步状态。

prometheus从ArgoCD导出的数据如下:

argocd_app_info{name="Application A", sync_state="Synced", ...} 1
argocd_app_info{name="Application B", sync_state="OufOfSync", ...} 1
argocd_app_info{name="Application C", sync_state="Unknown", ...} 1
argocd_app_info{name="Application D", sync_state="Synced", ...} 1
Run Code Online (Sandbox Code Playgroud)

状态时间线可视化示例


Bra*_*ure 2

我认为这是不可能的,因为正如您所说,普罗米修斯并不是设计为使用字符串作为值的。如果您可以控制为您提供这些指标的导出器,则可以将状态更改为不带状态标签的不同值,然后使用值映射进行映射:1 == State A; 2==状态B;ETC

band以这种方式呈现它也将消除给定时间处于多个状态的问题。将状态存储为标签意味着您的应用除了打开下一个状态之外还需要关闭给定的标签/状态。如果您忘记执行此操作,则指标将band同时显示 2 种状态。

对于黑盒导出器,我们通过查询获得如下所示的指标probe_success。这只能是 1/0,但如果您还有更多状态,该示例也可以工作。

probe_success{instance="https://app1.example.com", job="blackbox"}  0
probe_success{instance="https://app2.example.com", job="blackbox"}  0
probe_success{instance="https://app3.example.com", job="blackbox"}  1
probe_success{instance="https://app4.example.com", job="blackbox"}  1
Run Code Online (Sandbox Code Playgroud)

设置值映射以从数字映射到字符串

简单的值映射

统计时间线即