不知道如何更改 Prometheus 内容类型 header

Can't figure out how to change Prometheus content type header

所以我的指标都显示在我 end-point 的一行中,而不是每个指标换行。 我使用千分尺、spring、prometheus 和 scala。

我的控制器:

@RequestMapping(Array(""))
class MetricsController @Inject() (prometheusRegistry: PrometheusMeterRegistry) {

  @RequestMapping(value = Array("/metrics"), method = Array(RequestMethod.GET))
  def metricses(): String = {
    prometheusRegistry.scrape()
  }

}

是否足以改变我自己编写指标的方式?

我尝试添加 scrape(TextFormat.CONTENT_TYPE_004),但没有任何改变。 它与 HTTP 响应 header 有关系吗? 是否可以添加:

   .putHeader(HttpHeaders.CONTENT_TYPE, TextFormat.CONTENT_TYPE_004)
   .end(registry.scrape());

如果是这样,我该怎么做?

谢谢

Prometheus(或其他兼容后端)将向您发送一个您不应忽略的 Accept header(请阅读内容协商),但如果您想忽略它:

@GetMapping(path = "/metrics", produces = MediaType.TEXT_PLAIN_VALUE)
@ResponseBody String metrics() {
    return registry.scrape();
}

如果您不想忽略它,TextFormat 有一个 chooseContentType 方法,您可以使用该方法根据 Accept header 获取内容类型:

@GetMapping(path = "/metrics")
@ResponseBody ResponseEntity<String> metrics(@RequestHeader("accept") String accept) {
    String contentType = TextFormat.chooseContentType(accept);
    return ResponseEntity
            .ok()
            .contentType(MediaType.valueOf(contentType))
            .body(registry.scrape(contentType));
}

或者您也可以set-up内容协商:https://www.baeldung.com/spring-mvc-content-negotiation-json-xml