Camel Spring Boot:如何阻止REST请求数据进入Prometheus端点?
Camel Spring Boot Prometheus端点避免大请求数据OOM的解决方案
核心原因
Prometheus端点返回的Metrics中若包含大体积请求数据(如业务请求的大JSON),会导致内存堆积大量冗余指标数据,持续累积后引发堆内存溢出。
解决方案
禁用请求数据的Metrics采集
若业务不需要监控请求体内容,直接排除相关Metrics采集:- 针对Camel Metrics,在
application.yml中配置排除规则:camel: metrics: exclude-patterns: "*.requestBody" - 针对Spring Boot Actuator的HTTP请求Metrics,关闭请求体相关标签的自动采集:
management: metrics: web: server: request: autotime: enabled: false
- 针对Camel Metrics,在
限制Metrics标签内容长度
若需保留部分请求信息,通过配置截断过长的标签值,避免大JSON占用内存:management: metrics: tags: max-length: 100 # 标签值最大长度设为100,超出部分自动截断启用Metrics过期清理
配置Micrometer的Prometheus注册表,自动清理过期的时间序列指标,防止内存堆积:@Bean public PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig config) { PrometheusMeterRegistry registry = new PrometheusMeterRegistry(config); registry.config().meterFilter(new MeterFilter() { @Override public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) { return DistributionStatisticConfig.builder() .expiry(Duration.ofHours(1)) // 设置1小时后过期 .build().merge(config); } }); return registry; }优化Camel路由的Metrics采集
在Camel路由中仅监控必要指标(如响应时间、状态码),明确排除请求体相关标签:from("rest:get:/api/data") .routeId("data-api-route") .metrics().name("data_api_requests").excludeTags("requestBody") .to("bean:dataService");使用流处理大请求
配置Camel REST组件采用流模式处理请求,避免将整个大JSON请求体加载到内存:camel: rest: binding-mode: off enable-stream-cache: true
内容的提问来源于stack exchange,提问作者Jestino Sam
相关产品推荐
相关产品推荐

