@@ -17,6 +17,7 @@ package metrics
1717import (
1818 "fmt"
1919 "regexp"
20+ "sort"
2021 "strconv"
2122 "time"
2223
@@ -1877,18 +1878,30 @@ func (c *PrometheusCollector) collectContainersInfo(session *prometheus.CollectS
18771878 if err != nil {
18781879 return err
18791880 }
1880- rawLabels := map [string ]struct {}{}
1881+
1882+ rawLabelsDup := map [string ]struct {}{}
18811883 for _ , container := range containers {
18821884 for l := range c .containerLabelsFunc (container ) {
1883- rawLabels [l ] = struct {}{}
1885+ rawLabelsDup [l ] = struct {}{}
18841886 }
18851887 }
18861888
1889+ rawLabels := make ([]string , 0 , len (rawLabelsDup ))
1890+ for r := range rawLabelsDup {
1891+ rawLabels = append (rawLabels , r )
1892+ }
1893+ sort .Strings (rawLabels )
1894+
1895+ values := make ([]string , 0 , len (rawLabels ))
1896+ labels := make ([]string , 0 , len (rawLabels ))
1897+
1898+ clabels := make ([]string , 0 , len (rawLabels ))
1899+ cvalues := make ([]string , 0 , len (rawLabels ))
18871900 for _ , cont := range containers {
1888- values := make ([] string , 0 , len ( rawLabels ))
1889- labels := make ([] string , 0 , len ( rawLabels ))
1901+ values := values [: 0 ]
1902+ labels := labels [: 0 ]
18901903 containerLabels := c .containerLabelsFunc (cont )
1891- for l := range rawLabels {
1904+ for _ , l := range rawLabels {
18921905 duplicate := false
18931906 sl := sanitizeLabelName (l )
18941907 for _ , x := range labels {
@@ -1950,18 +1963,27 @@ func (c *PrometheusCollector) collectContainersInfo(session *prometheus.CollectS
19501963 continue
19511964 }
19521965 for _ , metricValue := range cm .getValues (stats ) {
1966+ labels = append (labels , cm .extraLabels ... )
1967+ values = append (values , metricValue .labels ... )
19531968 session .MustAddMetric (
1954- cm .name , cm .help ,
1955- append (labels , cm .extraLabels ... ), append (values , metricValue .labels ... ),
1956- cm .valueType , metricValue .value , & metricValue .timestamp ,
1969+ cm .name , cm .help , labels , values , cm .valueType , metricValue .value , & metricValue .timestamp ,
19571970 )
1971+ labels = labels [:len (labels )- len (cm .extraLabels )]
1972+ values = values [:len (values )- len (metricValue .labels )]
19581973 }
19591974 }
19601975 if c .includedMetrics .Has (container .AppMetrics ) {
1961- for metricLabel , v := range stats .CustomMetrics {
1976+ metricLabels := make ([]string , 0 , len (stats .CustomMetrics ))
1977+ for metricLabel := range stats .CustomMetrics {
1978+ metricLabels = append (metricLabels , metricLabel )
1979+ }
1980+ sort .Strings (metricLabels )
1981+
1982+ for _ , metricLabel := range metricLabels {
1983+ v := stats .CustomMetrics [metricLabel ]
19621984 for _ , metric := range v {
1963- clabels := make ([] string , len (rawLabels ), len ( rawLabels ) + len ( metric . Labels ))
1964- cvalues := make ([] string , len (rawLabels ), len ( rawLabels ) + len ( metric . Labels ))
1985+ clabels = clabels [: len (rawLabels )]
1986+ cvalues = cvalues [: len (rawLabels )]
19651987 copy (clabels , labels )
19661988 copy (cvalues , values )
19671989 for label , value := range metric .Labels {
0 commit comments