Metrics now have expiration if not updated

This commit is contained in:
Jan Lošťák
2025-02-22 21:24:03 +01:00
parent 2ed310eef7
commit f78df9d3e3
10 changed files with 455 additions and 232 deletions

View File

@@ -21,6 +21,7 @@ type PveMetricsCollector interface {
type PveMetricsManager struct {
apiClient *proxmox.PveApiClient // Proxmox virtual environment API client instance.
collectors []PveMetricsCollector // Metrics collector instances.
registry *TTLRegistry // Registry which handles autoamtic dangling metrics deletion.
latencySummary *prometheus.SummaryVec // Collection latency summary.
interval int // Collection interval.
@@ -32,45 +33,46 @@ type PveMetricsManager struct {
func NewPveMetricsManager(apiClient *proxmox.PveApiClient, conf *configuration.PveConfiguration) *PveMetricsManager {
c := PveMetricsManager{apiClient: apiClient, interval: conf.Interval}
metricsCf := conf.Metrics
c.registry = NewTTLRegistry()
// Cluster state metrics collector.
if metricsCf.ClusterState {
c.RegisterCollector(NewPveClusterStateCollector(apiClient))
c.RegisterCollector(NewPveClusterStateCollector(apiClient, c.registry))
}
// Node state metrics collector.
if metricsCf.NodeStatus {
c.RegisterCollector(NewPveNodeStatusCollector(apiClient))
c.RegisterCollector(NewPveNodeStatusCollector(apiClient, c.registry))
}
// Node subscription state collector.
if metricsCf.Subscription {
c.RegisterCollector(NewPveSubscriptionCollector(apiClient))
c.RegisterCollector(NewPveSubscriptionCollector(apiClient, c.registry))
}
// Node disk collector.
if metricsCf.Disk {
c.RegisterCollector(NewPveNodeDiskCollector(apiClient))
c.RegisterCollector(NewPveNodeDiskCollector(apiClient, c.registry))
}
// Node SDN collector.
if metricsCf.SDN {
c.RegisterCollector(NewPveSdnCollector(apiClient))
c.RegisterCollector(NewPveSdnCollector(apiClient, c.registry))
}
// Node storage collector.
if metricsCf.Storage {
c.RegisterCollector(NewPveStorageCollector(apiClient))
c.RegisterCollector(NewPveStorageCollector(apiClient, c.registry))
}
// Node container collector.
if metricsCf.LXC {
c.RegisterCollector(NewPveContainerCollector(apiClient))
c.RegisterCollector(NewPveContainerCollector(apiClient, c.registry))
}
// Node virtual machine collector.
if metricsCf.QEMU {
c.RegisterCollector(NewPveVirtualMachineCollector(apiClient))
c.RegisterCollector(NewPveVirtualMachineCollector(apiClient, c.registry))
}
// Metrics collection latency summary.
@@ -79,6 +81,8 @@ func NewPveMetricsManager(apiClient *proxmox.PveApiClient, conf *configuration.P
Help: "Summary of metrics collection latency milliseconds from PVE API.",
}, []string{"collector"})
c.registry.StartCleanupLoop(5 * time.Second)
return &c
}