Skip to content
This repository has been archived by the owner on Apr 18, 2023. It is now read-only.

pre-defining gRPC call metrics #79

Open
vespian opened this issue Aug 16, 2019 · 4 comments
Open

pre-defining gRPC call metrics #79

vespian opened this issue Aug 16, 2019 · 4 comments

Comments

@vespian
Copy link

vespian commented Aug 16, 2019

Currently, the vector metrics are created on the fly - i.e. once the call is made, the corresponding metric label is registered. So for example, if I have a unary gRPC service "Foo", only after I make a call to "Foo", the metrics with labels grpc_method=Foo grpc_service=FooService will appear in Prometheus' /metrics endpoint.

Would it be possible to add a method/function to pre-warm metrics in the case when one needs a complete set of possible metrics up-front? My use case is integration testing - while checking whether all the metrics are present/registered during integration test, I need to account for all gRPC calls that have been made during that test, which makes it flaky.

Prometheus Go client itself allows calling <metrics_object>.WithLabelValues(...) in order to achieve this.

Thanks in advance for a reply.

@brancz
Copy link
Collaborator

brancz commented Aug 16, 2019

Are you looking for .InitializeMetrics?

@vespian
Copy link
Author

vespian commented Aug 16, 2019

@brancz Thanks for a reply. Yes, something like that but for a client.

@brancz
Copy link
Collaborator

brancz commented Aug 16, 2019

I don’t believe it exists, but I think I’d be a great addition! :)

@bennetty
Copy link

bennetty commented Mar 5, 2021

hi @brancz im looking to implement something to initialise the metrics for the client side and was wondering if you had any suggestions? Im think a function that initialises a particular method could be acceptable? let me know your suggestions!

// preRegisterMethod can be invoked on a client method to pre-populate a client method.
func (m *ClientMetrics) PreRegisterMethod(fullMethod string, methodType grpcType) {
	serviceName, methodName := splitMethodName(fullMethod)

	m.clientStartedCounter.GetMetricWithLabelValues(methodType, serviceName, methodName)
	m.clientStreamMsgReceived.GetMetricWithLabelValues(methodType, serviceName, methodName)
	m.clientStreamMsgSent.GetMetricWithLabelValues(methodType, serviceName, methodName)
	if m.clientHandledHistogramEnabled {
		m.clientHandledHistogram.GetMetricWithLabelValues(methodType, serviceName, methodName)
	}
	for _, code := range allCodes {
		m.clientHandledCounter.GetMetricWithLabelValues(methodType, serviceName, methodName, code.String())
	}
}

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants