feat: add workspace build timing metrics (#15771)

This PR introduces a new prometheus metrics for
`workspace_build_timing_seconds`, which specifically reports workspace
build times. To reduce cardinality, this metrics excludes
`workspace_name` and `workspace_owner` that are present on the
`workspace_builds_total` metrics.
This commit is contained in:
Kevin Ha
2024-12-11 16:36:48 +11:00
committed by GitHub
parent ea9e39d87c
commit c5287910f9
2 changed files with 24 additions and 1 deletions

View File

@ -178,6 +178,22 @@ func NewMetrics(reg prometheus.Registerer) Metrics {
Name: "workspace_builds_total",
Help: "The number of workspaces started, updated, or deleted.",
}, []string{"workspace_owner", "workspace_name", "template_name", "template_version", "workspace_transition", "status"}),
WorkspaceBuildTimings: auto.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "coderd",
Subsystem: "provisionerd",
Name: "workspace_build_timings_seconds",
Help: "The time taken for a workspace to build.",
Buckets: []float64{
1, // 1s
10,
30,
60, // 1min
60 * 5,
60 * 10,
60 * 30, // 30min
60 * 60, // 1hr
},
}, []string{"template_name", "template_version", "workspace_transition", "status"}),
},
}
}

View File

@ -86,7 +86,8 @@ type Metrics struct {
// JobTimings also counts the total amount of jobs.
JobTimings *prometheus.HistogramVec
// WorkspaceBuilds counts workspace build successes and failures.
WorkspaceBuilds *prometheus.CounterVec
WorkspaceBuilds *prometheus.CounterVec
WorkspaceBuildTimings *prometheus.HistogramVec
}
type JobUpdater interface {
@ -189,6 +190,12 @@ func (r *Runner) Run() {
build.Metadata.WorkspaceTransition.String(),
status,
).Inc()
r.metrics.WorkspaceBuildTimings.WithLabelValues(
build.Metadata.TemplateName,
build.Metadata.TemplateVersion,
build.Metadata.WorkspaceTransition.String(),
status,
).Observe(time.Since(start).Seconds())
}
r.metrics.JobTimings.WithLabelValues(r.job.Provisioner, status).Observe(time.Since(start).Seconds())
}()