For any label you don't want, set the label value to empty string. On Sunday, 26 June 2022 at 14:47:20 UTC+1 [email protected] wrote:
> Hi Brian, > > Thank you so much for your answer. I appreciate and agree with your > comments, for my use case using the second approach would be nice but using > the golang official lib https://github.com/prometheus/client_golang it's > not possible to create the same metric more than once even using different > labels. > > Thank you. > > Em sábado, 25 de junho de 2022 às 12:43:35 UTC-3, Brian Candler escreveu: > >> > But when the status is error I would like to add one more label: >> reason, to the same metric and it's not possible >> >> That's because it wouldn't be the same metric. >> >> In Prometheus, it's the metric name together with the complete set of >> labels which form the identity of a timeseries. If you add another label, >> then you've created a completely different timeseries. >> >> The normal way to handle this is to create separate counters (metrics) >> for each outcome: >> >> test_purposes{result="success",environment="dev"} 0 >> test_purposes{result="npe",environment="dev"} 0 >> test_purposes{result="oops",environment="dev"} 0 >> >> Then you increment the appropriate one, depending on the result. >> >> You could also use your scheme: >> >> test_purposes{status="success",environment="dev"} 0 >> test_purposes{status="error",reason="npe",environment="dev"} 0 >> test_purposes{status="error",reason="oops",environment="dev"} 0 >> >> Again you'd just create three counters as three separate metrics. >> Personally I find the first version easier to work with in queries, because >> it's easier to aggregate when the labels are consistent, but either way >> will work. >> >> On Saturday, 25 June 2022 at 15:41:04 UTC+1 [email protected] wrote: >> >>> Hi Guys, >>> I hope you are having a good weekend, I would like to have an >>> information about CounterVec, is there a way to dynamically add Labels >>> inside an already registered metric? >>> >>> For example: >>> >>> Creating a metric using two labels: status and environment >>> ```go >>> metricName := "test_purposes" >>> help := "tests" >>> >>> counter = promauto.NewCounterVec(prometheus.CounterOpts{ >>> Name: metricName, >>> Help: help, >>> }, []string{"status", "environment"}) >>> >>> counter.WithLabelValues("success", "dev") >>> ``` >>> >>> But when the status is error I would like to add one more label: reason, >>> to the same metric and it's not possible >>> >>> ```go >>> counter = promauto.NewCounterVec(prometheus.CounterOpts{ >>> Name: metricName, >>> Help: help, >>> }, []string{"status", "environment", "reason"}) >>> >>> counter.WithLabelValues("success", "dev", "npe") >>> ``` >>> >>> Just to explain why I need it, we're migrating an implementation of >>> datadog to prometheus and in the implementations based on datadog we have a >>> lot of microservices sending metrics using different tags (labels) to the >>> same metric, if I could do the same using the prometheus lib it would be >>> great because we could only change the client without any modifications on >>> metric publishers. >>> >> -- You received this message because you are subscribed to the Google Groups "Prometheus Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/prometheus-users/b975841a-c9e2-444d-a060-374cbb325b6fn%40googlegroups.com.

