该存储库已存档,以支持 Grafana 9+ 版本中提供的内置插件:状态历史记录和状态时间线。这些插件被社区用作 flant-statusmap 的替代品,请参阅问题 #302 了解更多信息。如果您认为这个插件适合您的需求并想继续开发它,请随意创建一个分支。我们很高兴看到您更进一步!
显示多个目标随时间变化的离散状态的面板。
运行
docker compose up
并在浏览器中打开 http://localhost:3000 以查看简单的演示。
我们迫切需要可视化一段时间内的一组时间序列状态,以便我们可以看到对象状态变化的历史记录。由于我们维护大量 Kubernetes 集群(以及相关基础设施),因此我们的主要案例是服务器和 Kubernetes Pod 健康状态的可视化以及 HTTP 服务健康检查。我们尝试了各种可用的 Grafana 插件(它们在下面的致谢中列出),但它们都无法提供真正接近我们一直在寻找的功能和可视化功能。
注意:您可以在这篇文章中找到有关我们创建插件的过程的更多详细信息。
使用此插件可视化的对象可能会有所不同:不仅是 IT 组件(例如服务器主机和 Kubernetes Pod),还包括您可以想象到的任何东西,例如上图中的咖啡机。这些对象应该具有离散状态,即预定义值的集合,例如ok
= 0、 off
= 1、 fail
= 2 等。
要创建整洁的图表,您的数据源应该返回良好的数据。插件根据面板选项中的存储桶宽度调整$__interval
变量。您的查询应该在$__interval
上聚合状态。
为了使多值模式按预期工作,您应该定义多个查询:每个可能的状态都有一个查询。
插件目前不会及时聚合数据,它仅将输入数据呈现为存储桶。因此,数据应包含时间范围内每个时间戳的点以及每个可能目标(y 轴标签)的相等时间戳。此限制已由问题 #53 解决。
要使用来自 Prometheus 的数据,您需要为对象设置离散状态。将这些状态存储在指标中的要求如下:
0
和1
;完成后,您可以通过查询收集所有数据,例如:
(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) *
如果在查询间隔期间没有这样的状态(
),Prometheus 将不会返回任何内容。否则,将返回状态值。
例如,如果2
3
4
0
1
coffee_maker_status
),则应使用以下规则转换此指标:
- record: coffee_maker_status:discrete
expr: |
count_values("status", coffee_maker_status)
这就是值为3
coffee_maker_status
指标将如何转换为新指标:
coffee_maker_status:discrete{status="3"} 1
现在,当 Prometheus 的每个状态都有0
和1
值时,所有这些指标都可以聚合,因此您将随着时间的推移获得对象的所有可用状态。
在“格式为”中选择“时间序列”,并在查询中使用GROUP BY ($__interval)
。 $tag_
可在“别名”中使用来定义 y 轴标签。
通过$__interval
进行聚合的示例查询如下(您需要对每个可能的状态值进行一个查询):
SELECT
$__timeGroupAlias(date_insert,$__interval),
name AS metric,
min(statusi) AS "statusi"
FROM coffee_makers
WHERE
$__timeFilter(date_insert) AND statusi=1
GROUP BY 1,2
ORDER BY $__timeGroup(date_insert,$__interval)
metric
列用作 y 轴标签。
首先,应该为每个可能的状态值创建单独的查询。每个查询还应该有类似的分组图例:
然后,应在离散颜色模式下定义状态值的颜色映射:
用户可以使用预设来定义交通灯颜色或日光调色板中的 8 种颜色:
注意:光谱和不透明度颜色模式的功能与热图插件中的功能相同。
多个值复选框指定它们的显示方式:
显示空值可以被视为空桶或以0
值的颜色显示。
最小宽度和间距用于指定最小桶宽度和桶之间的间距。倒圆角可用于使边缘变圆。
值索引设置为正数以仅显示指定时间序列中的值。
显示图例复选框可切换面板底部的图例。
行排序可用于对 Y 轴上的标签进行排序。指标 — 按照“指标”选项卡上定义的方式对 y 标签进行排序。 a→z 和 z→a 按自然顺序降序或升序对标签进行排序。
启用分页可切换图表上的分页控件。
每页行数在图表上显示的行数。
显示工具提示可切换鼠标悬停在存储桶上时工具提示的显示。
单击时冻结可在单击时切换工具提示“冻结”。冻结工具提示可用于将数据与浮动工具提示进行比较或跟踪 URL。
显示项目切换工具提示中其他项目的显示。
Items是在工具提示中显示 URL 的定义列表。
每个 URL 都有一个模板、图标、标签和格式选项:变量的小写和日期格式。
在某些情况下,状态面板用于从一个仪表板转到更具体的仪表板,例如在执行根本/原因分析时。在这种情况下,用户可能希望缩小时间跨度的范围,同时保持所需事件的中心(以便能够分析之前/之后的时间段)。这些值是通过__bucket_from
和__bucket_to
引入的。
__bucket_from
:它是bucket.from
的值减去百分比bucket。 __bucket_to
:它是bucket.to
的值加上百分比bucket。
该插件的首次公开发布完全由 Flant 工程师制作。整个想法来自 Dmitry Stolyarov (@distol),初始版本由 Sergey Gnuskov (@gsmetal) 编写,最终更改由 Ivan Mikheykin (@diafour) 进行。
该插件基于 Grafana 的“热图”面板,部分灵感来自地毯图、离散面板、状态面板、状态点、状态按组的想法。