无法使Prometheus与Spring Boot 2.0.3一起使用

时间:2018-07-24 10:45:12

标签: spring-boot prometheus

我正在使用具有以下依赖项的Spring Boot 2.0.3.RELEASE:

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

但是当我调用Prometheus时,我得到的只是

{
    "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

我还尝试了Spring Boot 2发行的范围为1.0.X的Prometheus,但是没有运气。有人可以提出一些见解吗?非常感谢。

5 个答案:

答案 0 :(得分:1)

我们最近遇到了同样的问题。在调试Spring Boot时,我发现我们没有注册可以处理“文本/纯文本” MediaType的HttpMessageConverter,只有“ application / json”。因为Prometheus端点返回“文本/纯文本” MediaType,所以我们添加了一些配置作为临时解决方法。我们添加了一个链接到特定MediaType的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);
    }

}

希望这对您有帮助

答案 1 :(得分:1)

此错误的另一个原因是无效的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覆盖了messageConvertersRequestMappingHandlerAdapter的列表,因此只有列出的转换器可用,在我的情况下,它删除了当/actuator/prometheus被使用时导致406错误响应的字符串转换器。请求。

答案 2 :(得分:0)

可能不是一个明确的答案,但希望这会有所帮助。 我正在将Prometheus集成到我没有开发的服务中,并且遇到了同样的问题。我将其范围缩小到此代码块(删除使其起作用)

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

因此检查您的转换方法可能会有所帮助。我制作的存储库是使用jackson而不是gson进行的,所以这就是我要采用的方法。不是理想的解决方案,但缺少更好的解决方案...

答案 3 :(得分:0)

可能是406状态代码,也可以由客户端使用指定的accept标头来解决。 像这样:curl -v -H "Accept: text/plain" url

答案 4 :(得分:0)

如果其他答案没有帮助,则可以将配置添加到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);
    }
}