Prometheus remote write对接AWS API Gateway报415错误排查咨询
问题根因与缺失配置
415 Unsupported Media Type是API Gateway侧二进制媒体类型匹配规则和Prometheus remote write请求头不匹配导致的,你漏了3个关键配置:
- 仅添加
application/x-protobuf到二进制媒体类型列表不生效。Prometheus发remote write请求(包括metadata请求和指标数据请求)时,Content-Type头会携带proto协议版本参数,实际值类似application/x-protobuf;proto=prometheus.WriteRequest(v1协议)、application/x-protobuf;proto=io.prometheus.write.v2.Request(v2协议,Prometheus 2.40+默认启用)。API Gateway的媒体类型匹配是严格字符串全等匹配,不会自动忽略分号后的参数,直接判定为不支持的类型返回415。 - 若你使用的是REST API类型的API Gateway,必须在对应集成(Lambda、HTTP代理、VPC Link等)的请求配置中,将「内容处理」选项修改为
CONVERT_TO_BINARY。默认的CONVERT_TO_TEXT模式会直接拦截二进制请求体,不会转发到后端。 - 若开启了API Gateway请求校验,需关闭对应接口的Content-Type强制校验规则,默认的校验规则仅允许
application/json等文本类型,会直接拦截protobuf请求。
排查流程(按优先级走,10分钟内定位问题)
- 优先开API Gateway执行日志,把日志级别调到全量,记录请求/响应的完整头信息。日志里会直接打印API Gateway实际收到的Content-Type完整字符串,直接把这个串加到二进制媒体类型列表即可,不用猜版本差异。
- 登录EKS集群的Prometheus Pod,直接发curl请求验证API Gateway配置,排除Prometheus侧干扰:
# 可先抓包拿到Prometheus发出的真实请求体存为test.bin,也可直接构造空请求测头校验 curl -v -X POST "https://你的API Gateway端点" \ -H "Content-Type: application/x-protobuf" \ -H "X-Prometheus-Remote-Write-Version: 0.1.0" \ --data-binary @test.bin
如果curl请求返回415,问题100%在API Gateway侧,不用排查Prometheus配置。
- 若curl请求正常但Prometheus仍报错,检查Prometheus的remote_write配置块,不要手动覆写Content-Type头,默认配置即可;如果之前在headers字段自定义过Content-Type,删掉自定义配置恢复默认。
避坑提示
- 如果你用的是新版HTTP API类型的API Gateway(非REST API),不需要配置集成的内容处理选项,二进制媒体类型支持通配符,直接配置
application/x-protobuf*即可覆盖所有带参数的Content-Type场景,不用逐个加版本。 - 配置完API Gateway后必须重新部署对应阶段,否则新的媒体类型规则不会生效。
内容的提问来源于stack exchange,提问作者Daniel Wasserlauf
相关产品推荐
相关产品推荐

