diff --git a/collectors/domain_stats.go b/collectors/domain_stats.go index 4d8f59b..f3e9c46 100644 --- a/collectors/domain_stats.go +++ b/collectors/domain_stats.go @@ -27,8 +27,9 @@ import ( type DomainStatsCollector struct { prometheus.Collector - Connection *libvirt.Connect - Nova bool + LibvirtURI string + + Nova bool DomainSeconds *prometheus.Desc @@ -85,9 +86,9 @@ type NovaMetadata struct { } // nolint:funlen -func NewDomainStatsCollector(conn *libvirt.Connect, nova bool) (*DomainStatsCollector, error) { +func NewDomainStatsCollector(nova bool, libvirtURI string) (*DomainStatsCollector, error) { return &DomainStatsCollector{ - Connection: conn, + LibvirtURI: libvirtURI, Nova: nova, DomainSeconds: prometheus.NewDesc( @@ -307,7 +308,14 @@ func (c *DomainStatsCollector) describeBlock(ch chan<- *prometheus.Desc) { } func (c *DomainStatsCollector) Collect(ch chan<- prometheus.Metric) { - stats, err := c.Connection.GetAllDomainStats( + conn, err := libvirt.NewConnect(c.LibvirtURI) + if err != nil { + log.Errorln(err) + return + } + defer conn.Close() + + stats, err := conn.GetAllDomainStats( []*libvirt.Domain{}, libvirt.DOMAIN_STATS_STATE|libvirt.DOMAIN_STATS_CPU_TOTAL|libvirt.DOMAIN_STATS_BALLOON| libvirt.DOMAIN_STATS_VCPU|libvirt.DOMAIN_STATS_INTERFACE|libvirt.DOMAIN_STATS_BLOCK, diff --git a/collectors/version.go b/collectors/version.go index d298db0..100c454 100644 --- a/collectors/version.go +++ b/collectors/version.go @@ -25,14 +25,14 @@ import ( type VersionCollector struct { prometheus.Collector - Connection *libvirt.Connect + LibvirtURI string Version *prometheus.Desc } -func NewVersionCollector(conn *libvirt.Connect) (*VersionCollector, error) { +func NewVersionCollector(libvirtURI string) (*VersionCollector, error) { return &VersionCollector{ - Connection: conn, + LibvirtURI: libvirtURI, Version: prometheus.NewDesc( "libvirtd_info", @@ -47,19 +47,26 @@ func (c *VersionCollector) Describe(ch chan<- *prometheus.Desc) { } func (c *VersionCollector) Collect(ch chan<- prometheus.Metric) { - hypervisorType, err := c.Connection.GetType() + conn, err := libvirt.NewConnect(c.LibvirtURI) + if err != nil { + log.Errorln(err) + return + } + defer conn.Close() + + hypervisorType, err := conn.GetType() if err != nil { log.Errorln(err) return } - hypervisorVersion, err := c.Connection.GetVersion() + hypervisorVersion, err := conn.GetVersion() if err != nil { log.Errorln(err) return } - libvirtVersion, err := c.Connection.GetLibVersion() + libvirtVersion, err := conn.GetLibVersion() if err != nil { log.Errorln(err) return diff --git a/libvirtd_exporter.go b/libvirtd_exporter.go index 9e5fd25..bc39f47 100644 --- a/libvirtd_exporter.go +++ b/libvirtd_exporter.go @@ -17,7 +17,6 @@ package main import ( "net/http" - "github.com/libvirt/libvirt-go" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/common/log" @@ -51,18 +50,12 @@ func main() { kingpin.HelpFlag.Short('h') kingpin.Parse() - conn, err := libvirt.NewConnect(*libvirtURI) - if err != nil { - log.Fatalln(err) - } - defer conn.Close() - - versionCollector, err := collectors.NewVersionCollector(conn) + versionCollector, err := collectors.NewVersionCollector(*libvirtURI) if err != nil { log.Fatalln(err) } - domainStats, err := collectors.NewDomainStatsCollector(conn, *libvirtNova) + domainStats, err := collectors.NewDomainStatsCollector(*libvirtNova, *libvirtURI) if err != nil { log.Fatalln(err) }