首页 > 解决方案 > 是否应该在每个集合上实例化 Prometheus Java simpleclient Custom Collector 指标?

问题描述

simpleclient Java README中,示例Collector如下所示:

class YourCustomCollector extends Collector {
  List<MetricFamilySamples> collect() {
    List<MetricFamilySamples> mfs = new ArrayList<MetricFamilySamples>();
    // With no labels.
    mfs.add(new GaugeMetricFamily("my_gauge", "help", 42));
    // With labels
    GaugeMetricFamily labeledGauge = new GaugeMetricFamily("my_other_gauge", "help", Arrays.asList("labelname"));
    labeledGauge.addMetric(Arrays.asList("foo"), 4);
    labeledGauge.addMetric(Arrays.asList("bar"), 5);
    mfs.add(labeledGauge);
    return mfs;
  }
}

// Registration
static final YourCustomCollector requests = new YourCustomCollector().register()

必须在每次调用时实例化指标,还是实例化collect一次然后只调用是否合理?如果不是,这种方法会有什么问题?addMetriccollect

标签: javaprometheus

解决方案


是的,MetricFamilies 应该(几乎)总是在每次收集时重新实例化。

将它们实例化一次然后在collect中调用addMetric是否合理?

那不是线程安全的,您还需要做一些事情来跨集合清除它。


推荐阅读