【问题标题】:Custom prometheus metric without Spring没有 Spring 的自定义 prometheus 指标
【发布时间】:2019-12-06 16:39:41
【问题描述】:

我需要为 Web 应用程序提供自定义指标。问题是我不能使用 Spring,但我必须使用 jax-rs 端点。要求非常简单。想象一下,您有一个包含键值对的映射,其中键是指标名称,值是一个简单的整数,它是一个计数器。代码是这样的:

public static Map<String, Integer> metrics = Map.of(
    "logged_in_users_today", 123
);

@GET
@Path("/metrics/{metricId}")
public Integer getMetric(@PathParam("metricId") String metricId) {
    int count = metrics.get(metricId);
    return count;
}

但现在我需要使用一些 API 来发布这些指标。我查阅了一些教程,但只能找到使用千分尺注释导出指标的基于 Spring 的演示。我怎样才能以编程方式做到这一点?

【问题讨论】:

  • 没有太多 Java 经验,但应该足够简单,可以使用 Java 客户端并使用它注册指标并将其发布到运行的 prometheus 服务器上。 sysdig.com/blog/prometheus-metrics参考这个链接,它有一个java例子
  • 我还有一个一般性的问题。我是否需要为要发布的每个指标创建一个端点,还是只有一个端点用于/metrics
  • 您只需要一个端点/metrics,所有的计数器、仪表等都会发布到该端点,然后服务器会进行必要的聚合以显示一段时间内指标的结果值跨度>

标签: java prometheus


【解决方案1】:

这确实相当容易。这是代码:

public static double metricValue = 123;

@GET
@Path("/metrics")
public String getMetrics() {
    Writer writer = new StringWriter();
    CollectorRegistry registry = new CollectorRegistry();
    Gauge gauge = Gauge.build().name("logged_in_users").help("Logged in users").register(registry);
    gauge.set(metricValue);
    TextFormat.write004(writer, registry.metricFamilySamples());
    return writer.toString();
}

我一直在为 metricFamilySamples 方法的名称而苦苦挣扎,因为我认为它只会输出样本数据;)。但这确实有效。

【讨论】:

  • 对于这样一个简单的案例,我不会费心去拉 prometheus 库。我宁愿以开放度量格式编写页面。
猜你喜欢
  • 2020-08-22
  • 2018-10-28
  • 1970-01-01
  • 2021-09-04
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2019-07-13
相关资源
最近更新 更多