是否应在每个集合上实例化Prometheus Java simpleclient自定义收集器指标?

时间:2019-12-18 12:52:13

标签: java prometheus

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时实例化指标,还是将它们实例化一次然后在addMetric中调用collect是合理的吗?如果没有,这种方法会出现什么问题?

1 个答案:

答案 0 :(得分:0)

是的,MetricFamilies应该(几乎)总是在每个集合上重新实例化。

  

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

那不是线程安全的,您还需要做一些事情来清除各个集合中的内容。