1

我们有一个MonitorApp运行在 docker 容器中的 java 应用程序。这个应用程序的目的是执行某些任务,将指标推送到最后Pushgateway

此 MonitorApp作为Kubernetes Cron Job. 这意味着在发布矩阵后,它会被杀死,一段时间后会出现一个新实例。

我正在使用Java PushgatewayAPI发布矩阵。这是我的示例代码:

class MonitorApp {

   public void static main(String args[]) {
       
        List<String> labelKeys = Arrays.asList("key01", "key02");
        List<String> labelValues = Arrays.asList("value01", "value01");

        PushGateway client = new PushGateway("localhost:9091");
        CollectorRegistry registry = CollectorRegistry.defaultRegistry;

        String jobName = "midm_monitor_app";
        String metric = "metrin_name";
        String help = "metric_help";


        Counter counter = Counter.build()
                .name(metric)
                .help(help)
                .labelNames(labelKeys.toArray(new String[0]))
                .register(registry);
        counter.labels(labelValues.toArray(new String[0])).inc();

        client.push(registry,jobName);
     }
}

问题是我无法增加 Counter 指标的值。我无法找到一种方法来获取以前的计数器值,以便我可以增加它。

我已经阅读了 的目的Pushgateway是处理这种用例。

请建议我应该如何处理这个?

4

1 回答 1

1

据我了解,您希望在实例的多次运行之间增加一个指标。这不是推送网关的目标:它只会存储您推送的值 - 除了添加/替换指标组之外,不会以任何方式聚合它们。

虽然我从未使用过它们,但有一些解决方案可以使用其他监控堆栈(如 statd)或特定项目(如pushprom )进行聚合。您还可以将运行作为事件推送(例如在弹性搜索中)以进行进一步聚合。

如果它确实是您应用程序监控的敏感部分,我建议您远离 SPOF 解决方案。您可以使用任何(分布式)键/值存储来滚动您自己的指标缓存。

于 2021-08-12T12:39:47.673 回答