Skip to content

Commit 3036828

Browse files
Merge pull request #467 from zhangtbj/buildrunname_label
Add buildrunname label for custom metric
2 parents c2e796a + 76d3882 commit 3036828

File tree

4 files changed

+67
-50
lines changed

4 files changed

+67
-50
lines changed

docs/metrics.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ Following build metrics are exposed at service `build-operator-metrics` on port
1414
| ---- | ---- | ----------- | ------ | ------ |
1515
| `build_builds_registered_total` | Counter | Number of total registered Builds. | buildstrategy=<build_buildstrategy_name> | experimental |
1616
| `build_buildruns_completed_total` | Counter | Number of total completed BuildRuns. | buildstrategy=<build_buildstrategy_name> | experimental |
17-
| `build_buildrun_establish_duration_seconds` | Histogram | BuildRun establish duration in seconds. | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup> | experimental |
18-
| `build_buildrun_completion_duration_seconds` | Histogram | BuildRun completion duration in seconds. | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup> | experimental |
19-
| `build_buildrun_rampup_duration_seconds` | Histogram | BuildRun ramp-up duration in seconds | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup> | experimental |
20-
| `build_buildrun_taskrun_rampup_duration_seconds` | Histogram | BuildRun taskrun ramp-up duration in seconds. | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup> | experimental |
21-
| `build_buildrun_taskrun_pod_rampup_duration_seconds` | Histogram | BuildRun taskrun pod ramp-up duration in seconds. | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup> | experimental |
17+
| `build_buildrun_establish_duration_seconds` | Histogram | BuildRun establish duration in seconds. | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup><br>buildrun=<buildrun_name> <sup>1</sup> | experimental |
18+
| `build_buildrun_completion_duration_seconds` | Histogram | BuildRun completion duration in seconds. | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup><br>buildrun=<buildrun_name> <sup>1</sup> | experimental |
19+
| `build_buildrun_rampup_duration_seconds` | Histogram | BuildRun ramp-up duration in seconds | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup><br>buildrun=<buildrun_name> <sup>1</sup> | experimental |
20+
| `build_buildrun_taskrun_rampup_duration_seconds` | Histogram | BuildRun taskrun ramp-up duration in seconds. | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup><br>buildrun=<buildrun_name> <sup>1</sup> | experimental |
21+
| `build_buildrun_taskrun_pod_rampup_duration_seconds` | Histogram | BuildRun taskrun pod ramp-up duration in seconds. | buildstrategy=<build_buildstrategy_name> <sup>1</sup><br>namespace=<buildrun_namespace> <sup>1</sup><br>buildrun=<buildrun_name> <sup>1</sup> | experimental |
2222

2323
<sup>1</sup> Labels for histograms are disabled by default. See [Configuration of histogram labels](#configuration-of-histogram-labels) to enable them.
2424

@@ -57,6 +57,7 @@ As the amount of buckets and labels has a direct impact on the number of Prometh
5757

5858
* buildstrategy
5959
* namespace
60+
* buildrun
6061

6162
Use a comma-separated value to enable multiple labels. For example:
6263

@@ -68,7 +69,7 @@ make local
6869
or
6970

7071
```bash
71-
export PROMETHEUS_HISTOGRAM_ENABLED_LABELS=buildstrategy,namespace
72+
export PROMETHEUS_HISTOGRAM_ENABLED_LABELS=buildstrategy,namespace,buildrun
7273
make local
7374
```
7475

pkg/controller/buildrun/buildrun_controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ func (r *ReconcileBuildRun) Reconcile(request reconcile.Request) (reconcile.Resu
345345
buildmetrics.BuildRunRampUpDurationObserve(
346346
buildRun.Status.BuildSpec.StrategyRef.Name,
347347
buildRun.Namespace,
348+
buildRun.Name,
348349
generatedTaskRun.CreationTimestamp.Time.Sub(buildRun.CreationTimestamp.Time),
349350
)
350351
} else {
@@ -401,6 +402,7 @@ func (r *ReconcileBuildRun) Reconcile(request reconcile.Request) (reconcile.Resu
401402
buildmetrics.BuildRunEstablishObserve(
402403
buildRun.Status.BuildSpec.StrategyRef.Name,
403404
buildRun.Namespace,
405+
buildRun.Name,
404406
buildRun.Status.StartTime.Time.Sub(buildRun.CreationTimestamp.Time),
405407
)
406408
}
@@ -413,6 +415,7 @@ func (r *ReconcileBuildRun) Reconcile(request reconcile.Request) (reconcile.Resu
413415
buildmetrics.BuildRunCompletionObserve(
414416
buildRun.Status.BuildSpec.StrategyRef.Name,
415417
buildRun.Namespace,
418+
buildRun.Name,
416419
buildRun.Status.CompletionTime.Time.Sub(buildRun.CreationTimestamp.Time),
417420
)
418421

@@ -429,6 +432,7 @@ func (r *ReconcileBuildRun) Reconcile(request reconcile.Request) (reconcile.Resu
429432
buildmetrics.TaskRunPodRampUpDurationObserve(
430433
buildRun.Status.BuildSpec.StrategyRef.Name,
431434
buildRun.Namespace,
435+
buildRun.Name,
432436
lastInitPod.State.Terminated.FinishedAt.Sub(pod.CreationTimestamp.Time),
433437
)
434438
}
@@ -438,6 +442,7 @@ func (r *ReconcileBuildRun) Reconcile(request reconcile.Request) (reconcile.Resu
438442
buildmetrics.TaskRunRampUpDurationObserve(
439443
buildRun.Status.BuildSpec.StrategyRef.Name,
440444
buildRun.Namespace,
445+
buildRun.Name,
441446
pod.CreationTimestamp.Time.Sub(lastTaskRun.CreationTimestamp.Time),
442447
)
443448

pkg/metrics/metrics.go

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ import (
1515
)
1616

1717
const (
18-
buildStrategyLabel string = "buildstrategy"
19-
namespaceLabel string = "namespace"
18+
BuildStrategyLabel string = "buildstrategy"
19+
NamespaceLabel string = "namespace"
20+
BuildRunLabel string = "buildrun"
2021
)
2122

2223
var (
@@ -25,14 +26,14 @@ var (
2526
Name: "build_builds_registered_total",
2627
Help: "Number of total registered Builds.",
2728
},
28-
[]string{buildStrategyLabel})
29+
[]string{BuildStrategyLabel})
2930

3031
buildRunCount = prometheus.NewCounterVec(
3132
prometheus.CounterOpts{
3233
Name: "build_buildruns_completed_total",
3334
Help: "Number of total completed BuildRuns.",
3435
},
35-
[]string{buildStrategyLabel})
36+
[]string{BuildStrategyLabel})
3637

3738
buildRunEstablishDuration *prometheus.HistogramVec
3839
buildRunCompletionDuration *prometheus.HistogramVec
@@ -43,6 +44,7 @@ var (
4344

4445
histogramBuildStrategyLabelEnabled = false
4546
histogramNamespaceLabelEnabled = false
47+
histogramBuildRunLabelEnabled = false
4648

4749
initialized = false
4850
)
@@ -56,14 +58,18 @@ func InitPrometheus(config *config.Config) {
5658
initialized = true
5759

5860
var histogramLabels []string
59-
if contains(config.Prometheus.HistogramEnabledLabels, buildStrategyLabel) {
60-
histogramLabels = append(histogramLabels, buildStrategyLabel)
61+
if contains(config.Prometheus.HistogramEnabledLabels, BuildStrategyLabel) {
62+
histogramLabels = append(histogramLabels, BuildStrategyLabel)
6163
histogramBuildStrategyLabelEnabled = true
6264
}
63-
if contains(config.Prometheus.HistogramEnabledLabels, namespaceLabel) {
64-
histogramLabels = append(histogramLabels, namespaceLabel)
65+
if contains(config.Prometheus.HistogramEnabledLabels, NamespaceLabel) {
66+
histogramLabels = append(histogramLabels, NamespaceLabel)
6567
histogramNamespaceLabelEnabled = true
6668
}
69+
if contains(config.Prometheus.HistogramEnabledLabels, BuildRunLabel) {
70+
histogramLabels = append(histogramLabels, BuildRunLabel)
71+
histogramBuildRunLabelEnabled = true
72+
}
6773

6874
buildRunEstablishDuration = prometheus.NewHistogramVec(
6975
prometheus.HistogramOpts{
@@ -126,14 +132,17 @@ func contains(slice []string, element string) bool {
126132
return false
127133
}
128134

129-
func createHistogramLabels(buildStrategy string, namespace string) prometheus.Labels {
135+
func createHistogramLabels(buildStrategy string, namespace string, buildRun string) prometheus.Labels {
130136
labels := prometheus.Labels{}
131137

132138
if histogramBuildStrategyLabelEnabled {
133-
labels[buildStrategyLabel] = buildStrategy
139+
labels[BuildStrategyLabel] = buildStrategy
134140
}
135141
if histogramNamespaceLabelEnabled {
136-
labels[namespaceLabel] = namespace
142+
labels[NamespaceLabel] = namespace
143+
}
144+
if histogramBuildRunLabelEnabled {
145+
labels[BuildRunLabel] = buildRun
137146
}
138147

139148
return labels
@@ -152,36 +161,36 @@ func BuildRunCountInc(buildStrategy string) {
152161
}
153162

154163
// BuildRunEstablishObserve sets the build run establish time
155-
func BuildRunEstablishObserve(buildStrategy string, namespace string, duration time.Duration) {
164+
func BuildRunEstablishObserve(buildStrategy string, namespace string, buildRun string, duration time.Duration) {
156165
if buildRunEstablishDuration != nil {
157-
buildRunEstablishDuration.With(createHistogramLabels(buildStrategy, namespace)).Observe(duration.Seconds())
166+
buildRunEstablishDuration.With(createHistogramLabels(buildStrategy, namespace, buildRun)).Observe(duration.Seconds())
158167
}
159168
}
160169

161170
// BuildRunCompletionObserve sets the build run completion time
162-
func BuildRunCompletionObserve(buildStrategy string, namespace string, duration time.Duration) {
171+
func BuildRunCompletionObserve(buildStrategy string, namespace string, buildRun string, duration time.Duration) {
163172
if buildRunCompletionDuration != nil {
164-
buildRunCompletionDuration.With(createHistogramLabels(buildStrategy, namespace)).Observe(duration.Seconds())
173+
buildRunCompletionDuration.With(createHistogramLabels(buildStrategy, namespace, buildRun)).Observe(duration.Seconds())
165174
}
166175
}
167176

168177
// BuildRunRampUpDurationObserve processes the observation of a new buildrun ramp-up duration
169-
func BuildRunRampUpDurationObserve(buildStrategy string, namespace string, duration time.Duration) {
178+
func BuildRunRampUpDurationObserve(buildStrategy string, namespace string, buildRun string, duration time.Duration) {
170179
if buildRunRampUpDuration != nil {
171-
buildRunRampUpDuration.With(createHistogramLabels(buildStrategy, namespace)).Observe(duration.Seconds())
180+
buildRunRampUpDuration.With(createHistogramLabels(buildStrategy, namespace, buildRun)).Observe(duration.Seconds())
172181
}
173182
}
174183

175184
// TaskRunRampUpDurationObserve processes the observation of a new taskrun ramp-up duration
176-
func TaskRunRampUpDurationObserve(buildStrategy string, namespace string, duration time.Duration) {
185+
func TaskRunRampUpDurationObserve(buildStrategy string, namespace string, buildRun string, duration time.Duration) {
177186
if taskRunRampUpDuration != nil {
178-
taskRunRampUpDuration.With(createHistogramLabels(buildStrategy, namespace)).Observe(duration.Seconds())
187+
taskRunRampUpDuration.With(createHistogramLabels(buildStrategy, namespace, buildRun)).Observe(duration.Seconds())
179188
}
180189
}
181190

182191
// TaskRunPodRampUpDurationObserve processes the observation of a new taskrun pod ramp-up duration
183-
func TaskRunPodRampUpDurationObserve(buildStrategy string, namespace string, duration time.Duration) {
192+
func TaskRunPodRampUpDurationObserve(buildStrategy string, namespace string, buildRun string, duration time.Duration) {
184193
if taskRunPodRampUpDuration != nil {
185-
taskRunPodRampUpDuration.With(createHistogramLabels(buildStrategy, namespace)).Observe(duration.Seconds())
194+
taskRunPodRampUpDuration.With(createHistogramLabels(buildStrategy, namespace, buildRun)).Observe(duration.Seconds())
186195
}
187196
}

pkg/metrics/metrics_test.go

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ import (
1818

1919
var _ = Describe("Custom Metrics", func() {
2020
type buildRunLabels struct {
21-
namespace string
2221
buildStrategy string
22+
namespace string
23+
buildRun string
2324
}
2425

2526
var (
@@ -30,11 +31,12 @@ var _ = Describe("Custom Metrics", func() {
3031
var result = buildRunLabels{}
3132
for _, label := range in {
3233
switch *label.Name {
33-
case "buildstrategy":
34+
case BuildStrategyLabel:
3435
result.buildStrategy = *label.Value
35-
36-
case "namespace":
36+
case NamespaceLabel:
3737
result.namespace = *label.Value
38+
case BuildRunLabel:
39+
result.buildRun = *label.Value
3840
}
3941
}
4042

@@ -45,8 +47,8 @@ var _ = Describe("Custom Metrics", func() {
4547
BeforeSuite(func() {
4648
var (
4749
testLabels = []buildRunLabels{
48-
{namespace: "default", buildStrategy: "kaniko"},
49-
{namespace: "default", buildStrategy: "buildpacks"},
50+
{buildStrategy: "kaniko", namespace: "default", buildRun: "kaniko-buildrun"},
51+
{buildStrategy: "buildpacks", namespace: "default", buildRun: "buildpacks-buildrun"},
5052
}
5153

5254
knownCounterMetrics = []string{
@@ -75,22 +77,22 @@ var _ = Describe("Custom Metrics", func() {
7577

7678
// initialize prometheus (second init should be no-op)
7779
config := config.NewDefaultConfig()
78-
config.Prometheus.HistogramEnabledLabels = []string{"buildstrategy", "namespace"}
80+
config.Prometheus.HistogramEnabledLabels = []string{BuildStrategyLabel, NamespaceLabel, BuildRunLabel}
7981
InitPrometheus(config)
8082
InitPrometheus(config)
8183

8284
// and fire some examples
8385
for _, entry := range testLabels {
84-
buildStrategy, namespace := entry.buildStrategy, entry.namespace
86+
buildStrategy, namespace, buildRun := entry.buildStrategy, entry.namespace, entry.buildRun
8587

8688
// tell prometheus some things have happened
8789
BuildCountInc(buildStrategy)
8890
BuildRunCountInc(buildStrategy)
89-
BuildRunEstablishObserve(buildStrategy, namespace, time.Duration(1)*time.Second)
90-
BuildRunCompletionObserve(buildStrategy, namespace, time.Duration(200)*time.Second)
91-
BuildRunRampUpDurationObserve(buildStrategy, namespace, time.Duration(1)*time.Second)
92-
TaskRunRampUpDurationObserve(buildStrategy, namespace, time.Duration(2)*time.Second)
93-
TaskRunPodRampUpDurationObserve(buildStrategy, namespace, time.Duration(3)*time.Second)
91+
BuildRunEstablishObserve(buildStrategy, namespace, buildRun, time.Duration(1)*time.Second)
92+
BuildRunCompletionObserve(buildStrategy, namespace, buildRun, time.Duration(200)*time.Second)
93+
BuildRunRampUpDurationObserve(buildStrategy, namespace, buildRun, time.Duration(1)*time.Second)
94+
TaskRunRampUpDurationObserve(buildStrategy, namespace, buildRun, time.Duration(2)*time.Second)
95+
TaskRunPodRampUpDurationObserve(buildStrategy, namespace, buildRun, time.Duration(3)*time.Second)
9496
}
9597

9698
// gather metrics from prometheus and fill the result maps
@@ -130,22 +132,22 @@ var _ = Describe("Custom Metrics", func() {
130132

131133
It("should record the kaniko buildrun establish time", func() {
132134
Expect(histogramMetrics).To(HaveKey("build_buildrun_establish_duration_seconds"))
133-
Expect(histogramMetrics["build_buildrun_establish_duration_seconds"][buildRunLabels{"default", "kaniko"}]).To(Equal(1.0))
135+
Expect(histogramMetrics["build_buildrun_establish_duration_seconds"][buildRunLabels{"kaniko", "default", "kaniko-buildrun"}]).To(Equal(1.0))
134136
})
135137

136138
It("should record the kaniko buildrun completion time", func() {
137139
Expect(histogramMetrics).To(HaveKey("build_buildrun_completion_duration_seconds"))
138-
Expect(histogramMetrics["build_buildrun_completion_duration_seconds"][buildRunLabels{"default", "kaniko"}]).To(Equal(200.0))
140+
Expect(histogramMetrics["build_buildrun_completion_duration_seconds"][buildRunLabels{"kaniko", "default", "kaniko-buildrun"}]).To(Equal(200.0))
139141
})
140142

141143
It("should record the kaniko ramp-up durations", func() {
142144
Expect(histogramMetrics).To(HaveKey("build_buildrun_rampup_duration_seconds"))
143145
Expect(histogramMetrics).To(HaveKey("build_buildrun_taskrun_rampup_duration_seconds"))
144146
Expect(histogramMetrics).To(HaveKey("build_buildrun_taskrun_pod_rampup_duration_seconds"))
145147

146-
Expect(histogramMetrics["build_buildrun_rampup_duration_seconds"][buildRunLabels{"default", "kaniko"}]).To(BeNumerically(">", 0.0))
147-
Expect(histogramMetrics["build_buildrun_taskrun_rampup_duration_seconds"][buildRunLabels{"default", "kaniko"}]).To(BeNumerically(">", 0.0))
148-
Expect(histogramMetrics["build_buildrun_taskrun_pod_rampup_duration_seconds"][buildRunLabels{"default", "kaniko"}]).To(BeNumerically(">", 0.0))
148+
Expect(histogramMetrics["build_buildrun_rampup_duration_seconds"][buildRunLabels{"kaniko", "default", "kaniko-buildrun"}]).To(BeNumerically(">", 0.0))
149+
Expect(histogramMetrics["build_buildrun_taskrun_rampup_duration_seconds"][buildRunLabels{"kaniko", "default", "kaniko-buildrun"}]).To(BeNumerically(">", 0.0))
150+
Expect(histogramMetrics["build_buildrun_taskrun_pod_rampup_duration_seconds"][buildRunLabels{"kaniko", "default", "kaniko-buildrun"}]).To(BeNumerically(">", 0.0))
149151
})
150152
})
151153

@@ -163,22 +165,22 @@ var _ = Describe("Custom Metrics", func() {
163165

164166
It("should record the buildpacks buildrun establish time", func() {
165167
Expect(histogramMetrics).To(HaveKey("build_buildrun_establish_duration_seconds"))
166-
Expect(histogramMetrics["build_buildrun_establish_duration_seconds"][buildRunLabels{"default", "buildpacks"}]).To(Equal(1.0))
168+
Expect(histogramMetrics["build_buildrun_establish_duration_seconds"][buildRunLabels{"buildpacks", "default", "buildpacks-buildrun"}]).To(Equal(1.0))
167169
})
168170

169171
It("should record the buildpacks buildrun completion time", func() {
170172
Expect(histogramMetrics).To(HaveKey("build_buildrun_completion_duration_seconds"))
171-
Expect(histogramMetrics["build_buildrun_completion_duration_seconds"][buildRunLabels{"default", "buildpacks"}]).To(Equal(200.0))
173+
Expect(histogramMetrics["build_buildrun_completion_duration_seconds"][buildRunLabels{"buildpacks", "default", "buildpacks-buildrun"}]).To(Equal(200.0))
172174
})
173175

174176
It("should record the buildpacks ramp-up durations", func() {
175177
Expect(histogramMetrics).To(HaveKey("build_buildrun_rampup_duration_seconds"))
176178
Expect(histogramMetrics).To(HaveKey("build_buildrun_taskrun_rampup_duration_seconds"))
177179
Expect(histogramMetrics).To(HaveKey("build_buildrun_taskrun_pod_rampup_duration_seconds"))
178180

179-
Expect(histogramMetrics["build_buildrun_rampup_duration_seconds"][buildRunLabels{"default", "buildpacks"}]).To(BeNumerically(">", 0.0))
180-
Expect(histogramMetrics["build_buildrun_taskrun_rampup_duration_seconds"][buildRunLabels{"default", "buildpacks"}]).To(BeNumerically(">", 0.0))
181-
Expect(histogramMetrics["build_buildrun_taskrun_pod_rampup_duration_seconds"][buildRunLabels{"default", "buildpacks"}]).To(BeNumerically(">", 0.0))
181+
Expect(histogramMetrics["build_buildrun_rampup_duration_seconds"][buildRunLabels{"buildpacks", "default", "buildpacks-buildrun"}]).To(BeNumerically(">", 0.0))
182+
Expect(histogramMetrics["build_buildrun_taskrun_rampup_duration_seconds"][buildRunLabels{"buildpacks", "default", "buildpacks-buildrun"}]).To(BeNumerically(">", 0.0))
183+
Expect(histogramMetrics["build_buildrun_taskrun_pod_rampup_duration_seconds"][buildRunLabels{"buildpacks", "default", "buildpacks-buildrun"}]).To(BeNumerically(">", 0.0))
182184
})
183185
})
184186
})

0 commit comments

Comments
 (0)