现状(证据 + 根因)
rate_limit.go deny 与 circuit_breaker.go 开路均无专属信号:deny→codes.ResourceExhausted、开路→codes.Unavailable,与 handler 自身返回的同 code 在 grpc_server_requests_total 上不可区分,限流/熔断场景 SLO 告警无法归因。
- 代码根因:拦截器 deny/open 路径未 emit counter(也无 log)。
- 架构根因:是否在 GRPCCollector 扩展
RecordRateLimit/RecordCircuitBreaker 或共享 grpc_protection_rejected_total{type,method,cell}——影响所有 collector 实现,需设计。
修复方向
- minimal:deny/open 路径加 Debug/Warn 结构化日志(method/cell,IP key 注意 PII/采样)。
- thorough:新增
grpc_protection_rejected_total{type=ratelimit|circuit, method, cell} 闭值集 label(与 HTTP CB metric 对称),archtest 锁 emit 路径。
Files
- framework/runtime/grpc/interceptor/rate_limit.go:65-93
- framework/runtime/grpc/interceptor/circuit_breaker.go:113-147
Source
PR #2479 review (运维 F3/F5)。Discovered via /ship #1155。
现状(证据 + 根因)
rate_limit.godeny 与circuit_breaker.go开路均无专属信号:deny→codes.ResourceExhausted、开路→codes.Unavailable,与 handler 自身返回的同 code 在grpc_server_requests_total上不可区分,限流/熔断场景 SLO 告警无法归因。RecordRateLimit/RecordCircuitBreaker或共享grpc_protection_rejected_total{type,method,cell}——影响所有 collector 实现,需设计。修复方向
grpc_protection_rejected_total{type=ratelimit|circuit, method, cell}闭值集 label(与 HTTP CB metric 对称),archtest 锁 emit 路径。Files
Source
PR #2479 review (运维 F3/F5)。Discovered via /ship #1155。