diff --git a/collector/sysinfo/sysinfo.go b/collector/sysinfo/sysinfo.go index 3836c47..c84939b 100644 --- a/collector/sysinfo/sysinfo.go +++ b/collector/sysinfo/sysinfo.go @@ -20,6 +20,7 @@ const ( hosnameFile = "/etc/hostname" osRealeaseFile = "/etc/os-release" versionFile = "/proc/version" + machineIDFile = "/etc/machine-id" ) var labels = []string{ @@ -28,6 +29,7 @@ var labels = []string{ "os", "distro", "distro_version", + "machine_id", } type SysinfoCollector struct { @@ -36,10 +38,12 @@ type SysinfoCollector struct { os string distro string distroVersion string + machineID string hostnameFile string osReleaseFile string versionFile string + machineIDFile string promExporter *prometheus.GaugeVec updateFreq time.Duration @@ -57,6 +61,7 @@ func (c *SysinfoCollector) labels() prometheus.Labels { "os": c.os, "distro": c.distro, "distro_version": c.distroVersion, + "machine_id": c.machineID, } } @@ -111,6 +116,16 @@ func (c *SysinfoCollector) updateDistro() error { return nil } +func (c *SysinfoCollector) updateMachineID() error { + machineIDContent, err := os.ReadFile(c.machineIDFile) + if err != nil { + return err + } + + c.machineID = strings.TrimSpace(string(machineIDContent)) + return nil +} + func (c *SysinfoCollector) update() error { if err := c.updateKernelVersion(); err != nil { return fmt.Errorf("failed to get kernel version: %w", err) @@ -121,6 +136,9 @@ func (c *SysinfoCollector) update() error { if err := c.updateDistro(); err != nil { return fmt.Errorf("failed to get distro info: %w", err) } + if err := c.updateMachineID(); err != nil { + return fmt.Errorf("failed to get machine-id: %w", err) + } c.promExporter.With(c.labels()).Set(1) return nil @@ -158,6 +176,7 @@ func New() *SysinfoCollector { hostnameFile: hosnameFile, osReleaseFile: osRealeaseFile, versionFile: versionFile, + machineIDFile: machineIDFile, promExporter: prometheus.NewGaugeVec(prometheus.GaugeOpts{Namespace: "system", Name: "info", Help: "System global information"}, labels), } }