观察Grafana中的Service一致性状态



我们有微服务,它们需要一组配置,当配置有更新时,这些配置会由一个单独的系统(比如publisher)广播给主机。

接收主机正在发布以下指标-

{
"host": "h1",
"configName": "c1",
"configNameVersion": "v1",
}

在将这些配置推送到所有主机时可能会有延迟,并且主机可能在一段时间内处于不一致的状态。我们希望在grafana中将这种不一致状态捕获为Yes/No。

这可以很容易地完成使用SQL查询:(如果任意configigname的不同主机的configVersion计数大于1,则不一致状态)

select distinct count configNameVersion as "version_count"
from table_name
group by configName
having (distinct count configNameVersion)>1

我如何在Prometheus中表示相同的内容并在grafana仪表板中显示它?

假设发布者系统没有发布任何指标。

任何解决这个问题的替代方法(以最小的临界性)或指向适当的文档/示例的指针将是非常好的。如果我能补充更多信息,请随时评论:)

这是一个想法=它可能行不通,所以你可能仍然需要努力改进它。

保存到Prometheus,结构为:

metric name: config_name_version
labels: host=h1, config_name=c1 
value: 1 (integer only not a string v1)
time: timestamp

使用数学-人口标准差=普罗米修斯聚合算子stddev

如果版本值相同,则std dev为0(例如stddev(100,100,100,100) = 0),如果单个值不同,则它不会为0(例如stddev(101,100,100,100) = 0.433)。当然,您需要在PromQL中编写每个config_name分组,例如:

stddev by (config_name) (config_name_version{})

Grafana将添加配置/dashboard时间条件。

您可以在Grafana级别上将数值转换为YES/NO字符串(特征"值映射")。你也有主机标签,所以你可以添加更多的过滤器(例如主机的仪表板变量,配置名称选择)到仪表板有更多的用户友好的仪表板,显示主机的旧版本,可视化更新随着时间的推移,…

最新更新