Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## Unreleased

### Bug Fixes 🐛

* **loki.rules.kubernetes, mimir.rules.kubernetes:** Add a 30s timeout to remote ruler sync (ListRules) calls to prevent the event loop from hanging indefinitely on transient network issues.

Comment thread
QuentinBisson marked this conversation as resolved.
Outdated
## [1.15.0](https://github.com/grafana/alloy/compare/v1.14.0...v1.15.0) (2026-03-26)


Expand Down
7 changes: 7 additions & 0 deletions internal/component/common/kubernetes/event.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package kubernetes

import (
"time"

"github.com/go-kit/log"
"github.com/grafana/alloy/internal/runtime/logging/level"
"k8s.io/client-go/tools/cache"
Expand All @@ -18,6 +20,11 @@ type EventType string

const (
EventTypeResourceChanged EventType = "resource-changed"

// RulerSyncTimeout is the timeout applied to remote ruler API calls (e.g.
// listing rule groups) to prevent the event loop from blocking indefinitely
// on transient network issues.
RulerSyncTimeout = 30 * time.Second
)

type queuedEventHandler struct {
Expand Down
3 changes: 3 additions & 0 deletions internal/component/loki/rules/kubernetes/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ func (c *Component) processEvent(ctx context.Context, e kubernetes.Event) error
}

func (c *Component) syncLoki(ctx context.Context) error {
ctx, cancel := context.WithTimeout(ctx, kubernetes.RulerSyncTimeout)
defer cancel()

rulesByNamespace, err := c.lokiClient.ListRules(ctx, "")
if err != nil {
level.Error(c.log).Log("msg", "failed to list rules from loki", "err", err)
Expand Down
3 changes: 3 additions & 0 deletions internal/component/mimir/rules/kubernetes/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ func (e *eventProcessor) enqueueSyncMimir() {
}

func (e *eventProcessor) syncMimir(ctx context.Context) error {
ctx, cancel := context.WithTimeout(ctx, kubernetes.RulerSyncTimeout)
defer cancel()

rulesByNamespace, err := e.mimirClient.ListRules(ctx, "")
if err != nil {
level.Error(e.logger).Log("msg", "failed to list rules from mimir", "err", err)
Expand Down