@@ -63,37 +63,55 @@ func (cmd *PrometheusAnalyseCommand) run(k *kingpin.ParseContext) error {
63
63
}
64
64
log .Infof ("Found %d metric names\n " , len (metricNames ))
65
65
66
- inUseMetrics := map [string ]int {}
66
+ inUseMetrics := map [string ]struct {
67
+ totalCount int
68
+ jobCount map [string ]int
69
+ }{}
67
70
inUseCardinality := 0
68
71
69
72
for _ , metric := range grafanaMetrics .MetricsUsed {
70
73
ctx , cancel := context .WithTimeout (context .Background (), cmd .readTimeout )
71
74
defer cancel ()
72
75
73
- query := "count(" + metric + ")"
76
+ query := "count by (job) (" + metric + ")"
74
77
result , _ , err := v1api .Query (ctx , query , time .Now ())
75
78
if err != nil {
76
79
return errors .Wrap (err , "error querying " + query )
77
80
}
78
81
79
82
vec := result .(model.Vector )
80
83
if len (vec ) == 0 {
81
- inUseMetrics [metric ] += 0
82
- log .Debugln (metric , 0 )
84
+ counts := inUseMetrics [metric ]
85
+ counts .totalCount += 0
86
+ inUseMetrics [metric ] = counts
87
+ log .Debugln ("in use" , metric , 0 )
83
88
84
89
continue
85
90
}
86
91
87
- inUseMetrics [metric ] += int (vec [0 ].Value )
88
- inUseCardinality += int (vec [0 ].Value )
92
+ for _ , sample := range vec {
93
+ counts := inUseMetrics [metric ]
94
+ if counts .jobCount == nil {
95
+ counts .jobCount = make (map [string ]int )
96
+ }
97
+
98
+ counts .totalCount += int (sample .Value )
99
+ counts .jobCount [string (sample .Metric ["job" ])] += int (sample .Value )
100
+ inUseMetrics [metric ] = counts
101
+
102
+ inUseCardinality += int (sample .Value )
103
+ }
89
104
90
105
log .Debugln ("in use" , metric , vec [0 ].Value )
91
106
}
92
107
93
108
log .Infof ("%d active series are being used in dashboards" , inUseCardinality )
94
109
95
110
// Count the not-in-use active series.
96
- additionalMetrics := map [string ]int {}
111
+ additionalMetrics := map [string ]struct {
112
+ totalCount int
113
+ jobCount map [string ]int
114
+ }{}
97
115
additionalMetricsCardinality := 0
98
116
for _ , metricName := range metricNames {
99
117
metric := string (metricName )
@@ -104,22 +122,35 @@ func (cmd *PrometheusAnalyseCommand) run(k *kingpin.ParseContext) error {
104
122
ctx , cancel := context .WithTimeout (context .Background (), cmd .readTimeout )
105
123
defer cancel ()
106
124
107
- query := "count(" + metric + ")"
125
+ query := "count by (job) (" + metric + ")"
108
126
result , _ , err := v1api .Query (ctx , query , time .Now ())
109
127
if err != nil {
110
128
return errors .Wrap (err , "error querying " + query )
111
129
}
112
130
113
131
vec := result .(model.Vector )
114
132
if len (vec ) == 0 {
115
- additionalMetrics [metric ] += 0
116
- log .Debugln (metric , 0 )
133
+ counts := additionalMetrics [metric ]
134
+ counts .totalCount += 0
135
+ additionalMetrics [metric ] = counts
136
+
137
+ log .Debugln ("additional" , metric , 0 )
117
138
118
139
continue
119
140
}
120
141
121
- additionalMetrics [metric ] += int (vec [0 ].Value )
122
- additionalMetricsCardinality += int (vec [0 ].Value )
142
+ for _ , sample := range vec {
143
+ counts := additionalMetrics [metric ]
144
+ if counts .jobCount == nil {
145
+ counts .jobCount = make (map [string ]int )
146
+ }
147
+
148
+ counts .totalCount += int (sample .Value )
149
+ counts .jobCount [string (sample .Metric ["job" ])] += int (sample .Value )
150
+ additionalMetrics [metric ] = counts
151
+
152
+ additionalMetricsCardinality += int (sample .Value )
153
+ }
123
154
124
155
log .Debugln ("additional" , metric , vec [0 ].Value )
125
156
}
@@ -131,15 +162,36 @@ func (cmd *PrometheusAnalyseCommand) run(k *kingpin.ParseContext) error {
131
162
output .InUseActiveSeries = inUseCardinality
132
163
output .AdditionalActiveSeries = additionalMetricsCardinality
133
164
134
- for metric , count := range inUseMetrics {
135
- output .InUseMetricCounts = append (output .InUseMetricCounts , analyse.MetricCount {Metric : metric , Count : count })
165
+ for metric , counts := range inUseMetrics {
166
+ jobCounts := make ([]analyse.JobCount , 0 , len (counts .jobCount ))
167
+ for job , count := range counts .jobCount {
168
+ jobCounts = append (jobCounts , analyse.JobCount {
169
+ Job : job ,
170
+ Count : count ,
171
+ })
172
+ }
173
+ sort .Slice (jobCounts , func (i , j int ) bool {
174
+ return jobCounts [i ].Count > jobCounts [j ].Count
175
+ })
176
+
177
+ output .InUseMetricCounts = append (output .InUseMetricCounts , analyse.MetricCount {Metric : metric , Count : counts .totalCount , JobCounts : jobCounts })
136
178
}
137
179
sort .Slice (output .InUseMetricCounts , func (i , j int ) bool {
138
180
return output .InUseMetricCounts [i ].Count > output .InUseMetricCounts [j ].Count
139
181
})
140
182
141
- for metric , count := range additionalMetrics {
142
- output .AdditionalMetricCounts = append (output .AdditionalMetricCounts , analyse.MetricCount {Metric : metric , Count : count })
183
+ for metric , counts := range additionalMetrics {
184
+ jobCounts := make ([]analyse.JobCount , 0 , len (counts .jobCount ))
185
+ for job , count := range counts .jobCount {
186
+ jobCounts = append (jobCounts , analyse.JobCount {
187
+ Job : job ,
188
+ Count : count ,
189
+ })
190
+ }
191
+ sort .Slice (jobCounts , func (i , j int ) bool {
192
+ return jobCounts [i ].Count > jobCounts [j ].Count
193
+ })
194
+ output .AdditionalMetricCounts = append (output .AdditionalMetricCounts , analyse.MetricCount {Metric : metric , Count : counts .totalCount , JobCounts : jobCounts })
143
195
}
144
196
sort .Slice (output .AdditionalMetricCounts , func (i , j int ) bool {
145
197
return output .AdditionalMetricCounts [i ].Count > output .AdditionalMetricCounts [j ].Count
0 commit comments