diff --git a/metrics/label.go b/metrics/label.go index 6c6b02ed7f..f59c149d02 100644 --- a/metrics/label.go +++ b/metrics/label.go @@ -1,11 +1,8 @@ package metrics -import "encoding/json" - // Label hold an map[string]interface{} value that can be set arbitrarily. type Label interface { Value() map[string]interface{} - String() string Mark(map[string]interface{}) } @@ -26,8 +23,7 @@ func NewStandardLabel() *StandardLabel { // StandardLabel is the standard implementation of a Label. type StandardLabel struct { - value map[string]interface{} - jsonStr string + value map[string]interface{} } // Value returns label values. @@ -37,12 +33,5 @@ func (l *StandardLabel) Value() map[string]interface{} { // Mark records the label. func (l *StandardLabel) Mark(value map[string]interface{}) { - buf, _ := json.Marshal(value) - l.jsonStr = string(buf) l.value = value } - -// String returns label by JSON format. -func (l *StandardLabel) String() string { - return l.jsonStr -} diff --git a/metrics/prometheus/collector.go b/metrics/prometheus/collector.go index 25c7b4f4c4..1921a0c37c 100644 --- a/metrics/prometheus/collector.go +++ b/metrics/prometheus/collector.go @@ -100,7 +100,11 @@ func (c *collector) addResettingTimer(name string, m metrics.ResettingTimer) { } func (c *collector) addLabel(name string, m metrics.Label) { - c.writeLabel(mutateKey(name), m.String()) + labels := make([]string, 0, len(m.Value())) + for k, v := range m.Value() { + labels = append(labels, fmt.Sprintf(`%s="%s"`, mutateKey(k), fmt.Sprint(v))) + } + c.writeLabel(mutateKey(name), "{"+strings.Join(labels, ", ")+"}") } func (c *collector) writeLabel(name string, value interface{}) { @@ -126,5 +130,7 @@ func (c *collector) writeSummaryPercentile(name, p string, value interface{}) { } func mutateKey(key string) string { - return strings.Replace(key, "/", "_", -1) + key = strings.Replace(key, "/", "_", -1) + key = strings.Replace(key, "-", "_", -1) + return key }