.NET Core 3.1应用仅启用HTTP2时Prometheus探测失败如何解决?
问题根因
Prometheus默认抓取指标时使用HTTP/1.1协议,不会主动发起HTTP/2请求,你日志中出现的http2=false就是指本次抓取没有使用HTTP/2协议,发往仅支持HTTP/2的Kestrel服务端的HTTP/1.1请求会被直接拒绝,所以会出现探测失败的情况。
解决步骤
- 修改Prometheus的抓取任务配置,主动开启HTTP/2支持
在你的prometheus.yml对应job配置中新增enable_http2: true字段,修改后完整配置如下:- job_name: "service" # metrics_path defaults to '/metrics' scheme: https enable_http2: true # 新增此行开启HTTP2抓取 tls_config: insecure_skip_verify: true static_configs: - targets: - localhost:5001 - 确认Kestrel配置符合纯HTTP/2的要求
.NET Core 3.1的Kestrel开启纯HTTP/2模式时,默认要求必须走TLS加密,你配置的scheme: https是符合要求的,开发环境用自签名证书配合insecure_skip_verify: true可以正常运行,生产环境建议替换为正规可信证书。 - 重启Prometheus服务生效配置
配置修改完成后重启Prometheus,再到UI查询up指标即可看到服务状态为正常。
内容的提问来源于stack exchange,提问作者Swaroop
相关产品推荐
相关产品推荐

