java - 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 添加到我的字符串?我错过了什么明显的东西吗?
解决方案
问题是我缺少@javax.ws.rs.Produces(MediaType.TEXT_PLAIN)
REST 接口上的注释,并且 http 响应标头默认情况下将响应标记为八位字节字符串。
一旦我放了注释,问题就得到了解决。
推荐阅读
- python - python依赖项仅在CI机器上失败
- python - Sublime text 3.1.1 中的 Pylinter 仍然不使用 Python2.7
- javascript - JavaScript 回调函数未执行
- python - 使用solve_ivp代替odeint求解初始问题值
- android - 我无法从活动中调用对象方法
- c++ - cv::Exception * swig 错误?或 aruco 错误?
- .net-core - 从 SignalR Hub 调用 Web-Api
- python - 如何在windows机器上删除文本文件中的空白行
- javascript - 如何在字体端应用中使用常用的 JS 模块?
- powerbi - 计算上个月不适用于 PowerBI 中的切片器