我们有微服务,它们需要一组配置,当配置有更新时,这些配置会由一个单独的系统(比如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字符串(特征"值映射")。你也有主机标签,所以你可以添加更多的过滤器(例如主机的仪表板变量,配置名称选择)到仪表板有更多的用户友好的仪表板,显示主机的旧版本,可视化更新随着时间的推移,…