diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c9bfc12b437..f5b006ea0998 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,10 @@ Main (unreleased) - Flow: Add a new stage `non_indexed_labels` to attach non-indexed labels from extracted data to log line entry. (@vlad-diachenko) +- `loki.write` now exposes basic WAL support. (@thepalbi) + +- `loki.write` WAL now exposes a last segment reclaimed metric. (@thepalbi) + - New Grafana Agent Flow components: - `prometheus.exporter.gcp` - scrape GCP metrics. (@tburgessdev) @@ -55,7 +59,6 @@ Main (unreleased) - `discovery.eureka` discovers targets from a Eureka Service Registry. (@spartan0x117) - `discovery.openstack` - service discovery for OpenStack. (@marctc) - `discovery.hetzner` - service discovery for Hetzner Cloud. (@marctc) - - `loki.write` now exposes basic WAL support. (@thepalbi) ### Bugfixes diff --git a/component/common/loki/wal/writer.go b/component/common/loki/wal/writer.go index 17cde54bec49..80c105e9e3ad 100644 --- a/component/common/loki/wal/writer.go +++ b/component/common/loki/wal/writer.go @@ -58,6 +58,7 @@ type Writer struct { writeSubscribers []WriteEventSubscriber reclaimedOldSegmentsSpaceCounter *prometheus.CounterVec + lastReclaimedSegment *prometheus.GaugeVec closeCleaner chan struct{} } @@ -89,8 +90,16 @@ func NewWriter(walCfg Config, logger log.Logger, reg prometheus.Registerer) (*Wr Help: "Number of bytes reclaimed from storage.", }, []string{}) + wrt.lastReclaimedSegment = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: "loki_write", + Subsystem: "wal_writer", + Name: "last_reclaimed_segment", + Help: "Last reclaimed segment number", + }, []string{}) + if reg != nil { _ = reg.Register(wrt.reclaimedOldSegmentsSpaceCounter) + _ = reg.Register(wrt.lastReclaimedSegment) } wrt.start(walCfg.MaxSegmentAge) @@ -202,6 +211,7 @@ func (wrt *Writer) cleanSegments(maxAge time.Duration) error { for _, subscriber := range wrt.cleanupSubscribers { subscriber.SeriesReset(maxReclaimed) } + wrt.lastReclaimedSegment.WithLabelValues().Set(float64(maxReclaimed)) } return nil }