如何在 Prometheus (k8s) 中动态定义指标

How to dynamically define metrics in Prometheus (k8s)

我正在编写一个导出器,但我的收集器的指标有问题。据我所知,Prometheus 中的指标需要事先定义。有没有办法在运行时动态定义它们?在代码为 运行 之前,我不知道我将拥有多少指标或我需要哪些指标。 (例如,如果 k8s 找到连接到集群的所有卷,我需要每个卷来获得自己的 total_capacity/available_capacity 指标)。

到目前为止我只使用了Python和Java Prometheus客户端,但是预先定义指标不只是建议吗?在 Java 中,我可以在 run-time 内部方法或任何我想要的地方创建指标。我只需要确保不再创建相同的指标,否则库将抛出异常。

您可以使用动态标签值而不是动态指标名称来处理此问题。也就是说,您可以在运行时调用 prometheus.Register() 就好了,client_golang 不会知道区别。