无法让Prometheus使用Sping Boot 2.0.3

jecbmhm3  于 2022-11-05  发布在  Spring
关注(0)|答案(5)|浏览(209)

我使用的是Sping Boot 2.0.3.RELEASE,具有以下依赖项:

spring-boot-starter-actuator:2.0.3.RELEASE
micrometer-core:1.0.6
micrometer-registry-prometheus:1.0.6

但当我召唤普罗米修斯时我得到的只是

{
    "timestamp": 1532426317772,
    "status": 406,
    "error": "Not Acceptable",
    "message": "Could not find acceptable representation",
    "path": "/actuator/prometheus"
}

* and/or from browser*

There was an unexpected error (type=Not Acceptable, status=406).
Could not find acceptable representation

我也试过以前的Prometheus发布的1.0.X系列的Sping Boot 2,但是没有运气。有人能给我一些见解吗?非常感谢。

mklgxw1f

mklgxw1f1#

我们最近遇到了同样的问题。在调试Sping Boot 时,我发现我们没有注册可以处理“text/plain”媒体类型的HttpMessageConverter,只有“application/json”。因为Prometheus端点返回“text/plain”媒体类型,所以我们添加了一些配置作为临时解决方案。我们添加了一个链接到特定媒体类型的StringHttpMessageConverter。

@Configuration
public class ApplicationConfiguration implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        StringHttpMessageConverter converter = new StringHttpMessageConverter();
        converter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN));
            converters.add(converter);
    }
}

希望这对你有帮助

unftdfkk

unftdfkk2#

可能是406状态码,也可以通过指定的接受头由客户端解析。如下所示:curl -v -H "Accept: text/plain" url

kse8i1jr

kse8i1jr3#

出现此错误的另一个原因是无效的Spring XML配置文件包含类似以下内容:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </list>
    </property>
</bean>

上面的XML覆盖了RequestMappingHandlerAdapter中的messageConverters列表,因此只有列出的转换器可用,在我的例子中,这删除了在请求/actuator/prometheus时导致406错误响应的字符串转换器。

pbwdgjma

pbwdgjma4#

可能不是一个明确的答案,但希望这是一些帮助。我把prometheus集成到一个我没有开发的服务中,也遇到了同样的问题。我把它缩小到这个代码块(删除它使它工作)

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
    converter.setGson(GSON);
    converters.add(converter);
}

所以检查一下你的转换方法可能会有点帮助。我做的回购是用Jackson而不是gson来做这类事情,所以这就是我要走的路。不是一个理想的解决方案,但缺乏更好的解决方案...

w8ntj3qf

w8ntj3qf5#

如果其他答案没有帮助,可以将配置添加到ContentNegotiationConfigurer中。您可以将defaultContentType设置为“MediaType.TEXT_PLAIN”。

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.defaultContentType(MediaType.TEXT_PLAIN);
        configurer.favorParameter(false);
        configurer.favorPathExtension(false);
        configurer.parameterName("mediaType");
        configurer.useJaf(false);
    }
}

相关问题