当前位置: 首页 > 知识库问答 >
问题:

带有普罗米修斯的Spring执行器,自定义MetricWriter从不调用

松俊美
2023-03-14

根据示例,我应该实现自定义的MetricWriter来更新PrometheusCollectorRegistry中相应的CounterGauge。如下所示:

class PrometheusMetricWriter implements MetricWriter {

    CollectorRegistry registry

    private final ConcurrentMap<String, Gauge> counters = new ConcurrentHashMap<>()
    private final ConcurrentHashMap<String, Gauge> gauges = new ConcurrentHashMap<>()

    @Autowired
    PrometheusMetricWriter(CollectorRegistry registry) {
        this.registry = registry
    }

    @Override
    void increment(Delta<?> delta) {
        counter(delta.name).inc(delta.value.doubleValue())
    }

    @Override
    void reset(String metricName) {
        counter(metricName).clear()
    }

    @Override
    void set(Metric<?> value) {
        println "inside metric writer"
        gauge(value.name).set(value.value.doubleValue())
    }

    private Counter counter(String name) {
        def key = sanitizeName(name)
        counters.computeIfAbsent key, { k ->
            Counter.build().name(k).help(k).register(registry)
        }
    }

    private Gauge gauge(String name) {
        def key = sanitizeName(name)
        gauges.computeIfAbsent key, { k ->
            Gauge.build().name(k).help(k).register(registry)
        }
    }

    private String sanitizeName(String name) {
        return name.replaceAll("[^a-zA-Z0-9_]", "_")
    }
}

其他3个必需元素是:PrometheusEndpointPrometheusMvcEndpointPrometheusEndpointContextConfiguration

毕竟,可以通过调用“http://localhost:8080/prometheus”URL来查看收集到的指标。

# HELP gauge_com_egalacoral_spark_stage_vto gauge_com_egalacoral_spark_stage_vto
# TYPE gauge_com_egalacoral_spark_stage_vto gauge
gauge_com_egalacoral_spark_stage_vto 4.0
# HELP gauge_com_egalacoral_spark_test_vfl gauge_com_egalacoral_spark_test_vfl
# TYPE gauge_com_egalacoral_spark_test_vfl gauge
gauge_com_egalacoral_spark_test_vfl 16.0
class Runner {

    @Autowired
    GaugeService gaugeService

    private static final Logger logger = LoggerFactory.getLogger(Runner.class)

    private ZoneId zoneId = ZoneId.of('Europe/London')

    private Integer delay = 10

    @Scheduled(fixedDelay = 10000L)
    void runOnTest() throws Exception {

        def now = ZonedDateTime.now(zoneId)
        println "collect metrics"
        gaugeService.submit("test", 2.0)

    }
}

共有1个答案

皇甫聪
2023-03-14

因此,我找到了GaugeServiceDropWizardMetricServices实现使用的原因。

根据Spring文件:

50.10 Dropwizard度量

 类似资料:
  • 我需要为web应用程序提供自定义度量。问题是我不能使用Spring,而是必须使用jax-rsendpoint。要求非常简单。假设您有一个带有键值对的映射,其中键是度量名称,值是一个简单的整数,它是一个计数器。代码如下所示:

  • 我使用Spring-Boot2.0.0并尝试公开/acturet/prometheusendpoint。我启用了所有web管理endpoint,但只有prometheusendpoint未公开。有什么帮助吗?

  • 我在这里得到的错误是 而如果我对springboot执行器提供的任何其他endpoint重复相同的请求,我就会正确地获得响应,例如,我尝试了/acturet/health,/acturet/info,/acturet/metrics等。 只有在使用@springboot注释的集成测试中才会出现这种情况,这很奇怪,因为如果我运行应用程序并用postman向地址localhost:8080/actul

  • null 使用默认配置和轻微的定制。 我可以访问prometheus、grafana和alertmanager,查询度量标准并查看精美的图表。 但是prometheus-adapter在启动时不断抱怨它不能访问/发现度量: 在我的设置中,对于prometheus-adapter的正确值是什么?

  • 我将我的GKE API服务器升级到1.6,并正在将节点升级到1.6,但遇到了一个障碍... 我有一个prometheus服务器(版本1.5.2),运行在一个由Kubernetes部署管理的pod中,其中两个节点运行版本1.5.4Kubelet,一个新节点运行版本1.6。 但普罗米修斯仍然得到401。 更新:就像乔丹所说的kubernetes认证问题。在这里看到新的、更集中的问题;https://s