diff --git a/systemd/systemd.go b/systemd/systemd.go index 7c518de..43345d0 100644 --- a/systemd/systemd.go +++ b/systemd/systemd.go @@ -67,6 +67,7 @@ type Collector struct { unitTasksCurrentDesc *prometheus.Desc unitTasksMaxDesc *prometheus.Desc unitActiveEnterTimeDesc *prometheus.Desc + unitActiveEnterMonotonicDesc *prometheus.Desc unitActiveExitTimeDesc *prometheus.Desc unitInactiveEnterTimeDesc *prometheus.Desc unitInactiveExitTimeDesc *prometheus.Desc @@ -140,6 +141,11 @@ func NewCollector(logger *slog.Logger) (*Collector, error) { "Last time the unit transitioned into the active state", []string{"name", "type"}, nil, ) + unitActiveEnterMonotonicDesc := prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "unit_active_enter_monotonic_seconds"), + "Monotonic time when the unit transitioned into the active state", + []string{"name", "type"}, nil, + ) unitActiveExitTimeDesc := prometheus.NewDesc( prometheus.BuildFQName(namespace, "", "unit_active_exit_time_seconds"), "Last time the unit transitioned out of the active state", @@ -237,6 +243,7 @@ func NewCollector(logger *slog.Logger) (*Collector, error) { unitTasksCurrentDesc: unitTasksCurrentDesc, unitTasksMaxDesc: unitTasksMaxDesc, unitActiveEnterTimeDesc: unitActiveEnterTimeDesc, + unitActiveEnterMonotonicDesc: unitActiveEnterMonotonicDesc, unitActiveExitTimeDesc: unitActiveExitTimeDesc, unitInactiveEnterTimeDesc: unitInactiveEnterTimeDesc, unitInactiveExitTimeDesc: unitInactiveExitTimeDesc, @@ -276,6 +283,11 @@ func (c *Collector) Describe(desc chan<- *prometheus.Desc) { desc <- c.unitStartTimeDesc desc <- c.unitTasksCurrentDesc desc <- c.unitTasksMaxDesc + desc <- c.unitActiveEnterTimeDesc + desc <- c.unitActiveEnterMonotonicDesc + desc <- c.unitActiveExitTimeDesc + desc <- c.unitInactiveEnterTimeDesc + desc <- c.unitInactiveExitTimeDesc desc <- c.nRestartsDesc desc <- c.timerLastTriggerDesc desc <- c.socketAcceptedConnectionsDesc @@ -473,6 +485,10 @@ func (c *Collector) collectUnitTimeMetrics(conn *dbus.Conn, ch chan<- prometheus if err != nil { return err } + err = c.collectUnitTimeMetric(conn, ch, unit, c.unitActiveEnterMonotonicDesc, "ActiveEnterTimestampMonotonic") + if err != nil { + return err + } err = c.collectUnitTimeMetric(conn, ch, unit, c.unitActiveExitTimeDesc, "ActiveExitTimestamp") if err != nil { return err