prometheus/client_golang

Propose to add GetMetricWithLabelvaluesIfExist fuction to XXXVec struct

ethanvc opened this issue · 2 comments

Occasionally, developer will set label values that unable to converge, which make lots of metric series. In the worst case, it will oom the target process or consume lots of cpu/memory.

So I want to add a policy to protect my system, the step is:

  1. If the total metric series less then xx count, just do as before(Inc or Add).
  2. If the total metric series above xx count, add an extra check: if the metric already exist, do as before(because just +/-, no extra memory need), otherwise drop the monitor request and report a error monitor event.

To fulfill above protection policy, I need to know if a specified Counter already exist.

So, I hope maybe we can add function like GetMetricWithLabelvaluesIfExist(maybe not this name but have same meaning) to acquire this information: if i get the metric successfully, return the Counter, otherwise return error.

The Gatherer interface, implemented by the registry, has the method Gather that returns all metric families that were already collected by the registry.

One could already implement the described behavior by filtering the result by name, but I agree there's a huge inefficiency if you have to loop over all metrics every time you want to do something like that.

I'd agree that extending the Gatherer interface with a method that returns metrics using an array of names as an argument isn't a bad idea. The Registry already has a map of metric descriptor by metric.fqName, so it should be possible?