Skip to content

Commit 275f773

Browse files
authored
Add a worker time-spent-idle counter to the ruler (#727)
Should allow us to measure utilisation without sampling issues
1 parent cc8cdf4 commit 275f773

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

pkg/ruler/ruler.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ var (
5555
Name: "blocked_workers",
5656
Help: "How many workers are waiting on an item to be ready.",
5757
})
58+
workerIdleTime = prometheus.NewCounter(prometheus.CounterOpts{
59+
Namespace: "cortex",
60+
Name: "worker_idle_seconds_total",
61+
Help: "How long workers have spent waiting for work.",
62+
})
5863
evalLatency = prometheus.NewHistogram(prometheus.HistogramOpts{
5964
Namespace: "cortex",
6065
Name: "group_evaluation_latency_seconds",
@@ -68,6 +73,7 @@ func init() {
6873
prometheus.MustRegister(evalLatency)
6974
prometheus.MustRegister(rulesProcessed)
7075
prometheus.MustRegister(blockedWorkers)
76+
prometheus.MustRegister(workerIdleTime)
7177
}
7278

7379
// Config is the configuration for the recording rules server.
@@ -460,15 +466,18 @@ func (w *worker) Run() {
460466
return
461467
default:
462468
}
469+
waitStart := time.Now()
463470
blockedWorkers.Inc()
464471
level.Debug(util.Logger).Log("msg", "waiting for next work item")
465472
item := w.scheduler.nextWorkItem()
466473
blockedWorkers.Dec()
474+
waitElapsed := time.Now().Sub(waitStart)
467475
if item == nil {
468476
level.Debug(util.Logger).Log("msg", "queue closed and empty; terminating worker")
469477
return
470478
}
471479
evalLatency.Observe(time.Since(item.scheduled).Seconds())
480+
workerIdleTime.Add(waitElapsed.Seconds())
472481
level.Debug(util.Logger).Log("msg", "processing item", "item", item)
473482
w.ruler.Evaluate(item.userID, item)
474483
w.scheduler.workItemDone(*item)

0 commit comments

Comments
 (0)