mirror of
https://github.com/coder/coder.git
synced 2025-07-15 22:20:27 +00:00
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:
@ -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"}),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -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())
|
||||
}()
|
||||
|
Reference in New Issue
Block a user