diff --git a/metric/common.go b/metric/common.go index 5ca63e6..996b2d1 100644 --- a/metric/common.go +++ b/metric/common.go @@ -9,6 +9,7 @@ import ( "math" "os" "path" + "sort" "strings" "sync/atomic" @@ -67,11 +68,26 @@ func NewMetric(mt MetricType, name string, help string, constLabels map[string]s return MetricWriterNil } - hash := md5.New() - hash.Write([]byte(name)) + var disorder []struct { + k string + v string + } for k, v := range constLabels { - hash.Write([]byte(k)) - hash.Write([]byte(v)) + disorder = append(disorder, struct { + k string + v string + }{k: strings.ToLower(k), v: strings.ToLower(v)}) + } + + sort.Slice(disorder, func(i, j int) bool { + return disorder[i].k < disorder[j].k + }) + + hash := md5.New() + hash.Write([]byte(strings.ToLower(name))) + for _, d := range disorder { + hash.Write([]byte(d.k)) + hash.Write([]byte(d.v)) } key := hex.EncodeToString(hash.Sum(nil))[:metric_key_size]