go-kratos / kratos

Your ultimate Go microservices framework for the cloud-native era.
https://go-kratos.dev
MIT License
23.43k stars 4.01k forks source link

[Question] Middleware appears to use HTTP error codes even when the request was originally gRPC - is this intended? #3442

Closed wscalf closed 1 month ago

wscalf commented 1 month ago

While working with the metrics middleware, we noticed that all the error codes showing up in Prometheus were HTTP status codes (400, 504, etc) even though only the gRPC endpoints were being exercised, which surprised us at first, but it looks like all the middlewares behave this way:

Which left us wondering: is this intentional behavior? It seems like it could be meant to abstract logged error codes from the actual protocol used, maybe favoring HTTP because it's more widely recognized, but we wanted to reach out and check.

We also noticed that OK responses are logged as 0, which would be the correct status code for gRPC but is inconsistent with the HTTP ones and likely just an empty value.

shenqidebaozi commented 1 month ago

Yes, because HTTP and gRPC are isomorphic, they use the same identifier and are converted according to gRPC's conventions

wscalf commented 1 month ago

Okay, and so it's intentional then that logging and metrics always report HTTP status codes?

shenqidebaozi commented 1 month ago

Yes, the code for errors corresponds to the HTTP codes