首页 > 解决方案 > prometheus 服务器抛出数据不以 #EOF 结尾

问题描述

我使用此处指定的基于文本的简单展示格式展示我的应用程序指标EXPOSITION FORMATS。我的 http 端点的输出如下

user@host-ubuntu:~/scripts$ curl -X GET http://172.17.0.23:8181/rest/metrics 
# HELP my_new_metric my_new_metric
# TYPE my_new_metric gauge
my_new_metric{container_id="xyz",container_name="blah",instance="abc",job="blah"} 0
user@host-ubuntu:~/scripts$ 

HELP、TYPE 和 metric 后面有换行符 我的 https 服务器的 java 代码如下

    public String metrics() {
        return "# HELP my_new_metric my_new_metric\n" +
                "# TYPE my_new_metric gauge\n" +
                "my_new_metric{container_id=\"xyz\",container_name=\"blah\",instance=\"abc\",job=\"blah\"} 0\n";
    }

但是 Prometheus 服务器正在记录以下警告,并且我的指标没有被收集。

level=warn ts=2021-02-12T14:45:16.377Z caller=scrape.go:972 component="scrape manager" 
scrape_pool=kubernetes-pods target=http://172.17.0.23:8181/rest/metrics
 msg="append failed" err="data does not end with # EOF"

如何将 EOF 添加到我的字符串?我错过了什么明显的东西吗?

标签: javarestprometheus

解决方案


问题是我缺少@javax.ws.rs.Produces(MediaType.TEXT_PLAIN)REST 接口上的注释,并且 http 响应标头默认情况下将响应标记为八位字节字符串。

一旦我放了注释,问题就得到了解决。


推荐阅读