diff --git a/README.md b/README.md index 39faf84..9ec4436 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,17 @@ follows: => test_web__server_foo_bar{} +If the default metric help text is insufficient for your needs you may use the YAML +configuration to specify a custom help text for each mapping: +```yaml +mappings: +- match: http.request.* + help: "Total number of http requests" + labels: + name: "http_requests_total" + code: "$1" +``` + In the configuration, one may also set the timer type to "histogram". The default is "summary" as in the plain text configuration format. For example, to set the timer type for a single metric: diff --git a/exporter.go b/exporter.go index 5175906..6c026e1 100644 --- a/exporter.go +++ b/exporter.go @@ -71,13 +71,13 @@ func NewCounterContainer() *CounterContainer { } } -func (c *CounterContainer) Get(metricName string, labels prometheus.Labels) (prometheus.Counter, error) { +func (c *CounterContainer) Get(metricName string, labels prometheus.Labels, help string) (prometheus.Counter, error) { hash := hashNameAndLabels(metricName, labels) counter, ok := c.Elements[hash] if !ok { counter = prometheus.NewCounter(prometheus.CounterOpts{ Name: metricName, - Help: defaultHelp, + Help: help, ConstLabels: labels, }) if err := prometheus.Register(counter); err != nil { @@ -98,13 +98,13 @@ func NewGaugeContainer() *GaugeContainer { } } -func (c *GaugeContainer) Get(metricName string, labels prometheus.Labels) (prometheus.Gauge, error) { +func (c *GaugeContainer) Get(metricName string, labels prometheus.Labels, help string) (prometheus.Gauge, error) { hash := hashNameAndLabels(metricName, labels) gauge, ok := c.Elements[hash] if !ok { gauge = prometheus.NewGauge(prometheus.GaugeOpts{ Name: metricName, - Help: defaultHelp, + Help: help, ConstLabels: labels, }) if err := prometheus.Register(gauge); err != nil { @@ -125,14 +125,14 @@ func NewSummaryContainer() *SummaryContainer { } } -func (c *SummaryContainer) Get(metricName string, labels prometheus.Labels) (prometheus.Summary, error) { +func (c *SummaryContainer) Get(metricName string, labels prometheus.Labels, help string) (prometheus.Summary, error) { hash := hashNameAndLabels(metricName, labels) summary, ok := c.Elements[hash] if !ok { summary = prometheus.NewSummary( prometheus.SummaryOpts{ Name: metricName, - Help: defaultHelp, + Help: help, ConstLabels: labels, }) if err := prometheus.Register(summary); err != nil { @@ -155,7 +155,7 @@ func NewHistogramContainer(mapper *metricMapper) *HistogramContainer { } } -func (c *HistogramContainer) Get(metricName string, labels prometheus.Labels, mapping *metricMapping) (prometheus.Histogram, error) { +func (c *HistogramContainer) Get(metricName string, labels prometheus.Labels, help string, mapping *metricMapping) (prometheus.Histogram, error) { hash := hashNameAndLabels(metricName, labels) histogram, ok := c.Elements[hash] if !ok { @@ -166,7 +166,7 @@ func (c *HistogramContainer) Get(metricName string, labels prometheus.Labels, ma histogram = prometheus.NewHistogram( prometheus.HistogramOpts{ Name: metricName, - Help: defaultHelp, + Help: help, ConstLabels: labels, Buckets: buckets, }) @@ -244,10 +244,19 @@ func (b *Exporter) Listen(e <-chan Events) { return } for _, event := range events { + var help string metricName := "" prometheusLabels := event.Labels() mapping, labels, present := b.mapper.getMapping(event.MetricName()) + if mapping == nil { + mapping = &metricMapping{} + } + if mapping.HelpText == "" { + help = defaultHelp + } else { + help = mapping.HelpText + } if present { metricName = labels["name"] for label, value := range labels { @@ -273,6 +282,7 @@ func (b *Exporter) Listen(e <-chan Events) { counter, err := b.Counters.Get( metricName, prometheusLabels, + help, ) if err == nil { counter.Add(event.Value()) @@ -287,6 +297,7 @@ func (b *Exporter) Listen(e <-chan Events) { gauge, err := b.Gauges.Get( metricName, prometheusLabels, + help, ) if err == nil { @@ -316,6 +327,7 @@ func (b *Exporter) Listen(e <-chan Events) { histogram, err := b.Histograms.Get( metricName, prometheusLabels, + help, mapping, ) if err == nil { @@ -330,6 +342,7 @@ func (b *Exporter) Listen(e <-chan Events) { summary, err := b.Summaries.Get( metricName, prometheusLabels, + help, ) if err == nil { summary.Observe(event.Value()) diff --git a/mapper.go b/mapper.go index 4cda9c1..ef98d6c 100644 --- a/mapper.go +++ b/mapper.go @@ -52,6 +52,7 @@ type metricMapping struct { TimerType timerType `yaml:"timer_type"` Buckets []float64 `yaml:"buckets"` MatchType matchType `yaml:"match_type"` + HelpText string `yaml:"help"` } func (m *metricMapper) initFromYAMLString(fileContents string) error {