Merge "Add support for new balloon memory stats"

This commit is contained in:
Zuul 2020-08-13 22:23:09 +00:00 committed by Gerrit Code Review
commit 4c96215c79
2 changed files with 157 additions and 3 deletions

View File

@ -42,6 +42,17 @@ type DomainStatsCollector struct {
DomainBalloonCurrent *prometheus.Desc
DomainBalloonMaximum *prometheus.Desc
DomainBalloonSwapIn *prometheus.Desc
DomainBalloonSwapOut *prometheus.Desc
DomainBalloonMajorFault *prometheus.Desc
DomainBalloonMinorFault *prometheus.Desc
DomainBalloonUnused *prometheus.Desc
DomainBalloonAvailable *prometheus.Desc
DomainBalloonRss *prometheus.Desc
DomainBalloonUsable *prometheus.Desc
DomainBalloonDiskCaches *prometheus.Desc
DomainBalloonHugetlbPgAlloc *prometheus.Desc
DomainBalloonHugetlbPgFail *prometheus.Desc
DomainVcpuState *prometheus.Desc
DomainVcpuTime *prometheus.Desc
@ -134,6 +145,61 @@ func NewDomainStatsCollector(nova bool, connection *libvirt.Connect) (*DomainSta
"the maximum memory in kiB allowed",
[]string{"uuid"}, nil,
),
DomainBalloonSwapIn: prometheus.NewDesc(
"libvirtd_domain_balloon_swap_in",
"kiB of memory swapped in",
[]string{"uuid"}, nil,
),
DomainBalloonSwapOut: prometheus.NewDesc(
"libvirtd_domain_balloon_swap_out",
"kiB of memory swapped out",
[]string{"uuid"}, nil,
),
DomainBalloonMajorFault: prometheus.NewDesc(
"libvirtd_domain_balloon_major_fault",
"number of page faults where disk I/O was required",
[]string{"uuid"}, nil,
),
DomainBalloonMinorFault: prometheus.NewDesc(
"libvirtd_domain_balloon_minor_fault",
"number of page faults where disk I/O was not required",
[]string{"uuid"}, nil,
),
DomainBalloonUnused: prometheus.NewDesc(
"libvirtd_domain_balloon_unused",
"KiB of memory left unused by the system",
[]string{"uuid"}, nil,
),
DomainBalloonAvailable: prometheus.NewDesc(
"libvirtd_domain_balloon_available",
"KiB of memory usable by the domain",
[]string{"uuid"}, nil,
),
DomainBalloonRss: prometheus.NewDesc(
"libvirtd_domain_balloon_rss",
"resident set size of domain in KiB",
[]string{"uuid"}, nil,
),
DomainBalloonUsable: prometheus.NewDesc(
"libvirtd_domain_balloon_usable",
"KiB of memory that can be reclaimed without swapping",
[]string{"uuid"}, nil,
),
DomainBalloonDiskCaches: prometheus.NewDesc(
"libvirtd_domain_balloon_disk_caches",
"KiB of memory used by disk caches",
[]string{"uuid"}, nil,
),
DomainBalloonHugetlbPgAlloc: prometheus.NewDesc(
"libvirtd_domain_balloon_hugetlb_pgalloc",
"number of successful huge page allocations done by virtio balloon",
[]string{"uuid"}, nil,
),
DomainBalloonHugetlbPgFail: prometheus.NewDesc(
"libvirtd_domain_balloon_hugetlb_pgfail",
"number of failed huge page allocations done by virtio balloon",
[]string{"uuid"}, nil,
),
DomainVcpuState: prometheus.NewDesc(
"libvirtd_domain_vcpu_state",
@ -275,6 +341,17 @@ func (c *DomainStatsCollector) describeCPU(ch chan<- *prometheus.Desc) {
func (c *DomainStatsCollector) describeBalloon(ch chan<- *prometheus.Desc) {
ch <- c.DomainBalloonCurrent
ch <- c.DomainBalloonMaximum
ch <- c.DomainBalloonSwapIn
ch <- c.DomainBalloonSwapOut
ch <- c.DomainBalloonMajorFault
ch <- c.DomainBalloonMinorFault
ch <- c.DomainBalloonUnused
ch <- c.DomainBalloonAvailable
ch <- c.DomainBalloonRss
ch <- c.DomainBalloonUsable
ch <- c.DomainBalloonDiskCaches
ch <- c.DomainBalloonHugetlbPgAlloc
ch <- c.DomainBalloonHugetlbPgFail
}
func (c *DomainStatsCollector) describeVcpu(ch chan<- *prometheus.Desc) {
@ -431,6 +508,83 @@ func (c *DomainStatsCollector) collectBalloon(uuid string, stat libvirt.DomainSt
prometheus.GaugeValue,
float64(stat.Balloon.Maximum), uuid,
)
if stat.Balloon.SwapInSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonSwapIn,
prometheus.CounterValue,
float64(stat.Balloon.SwapIn), uuid,
)
}
if stat.Balloon.SwapOutSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonSwapOut,
prometheus.CounterValue,
float64(stat.Balloon.SwapOut), uuid,
)
}
if stat.Balloon.MajorFaultSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonMajorFault,
prometheus.CounterValue,
float64(stat.Balloon.MajorFault), uuid,
)
}
if stat.Balloon.MinorFaultSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonMinorFault,
prometheus.CounterValue,
float64(stat.Balloon.MinorFault), uuid,
)
}
if stat.Balloon.UnusedSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonUnused,
prometheus.GaugeValue,
float64(stat.Balloon.Unused), uuid,
)
}
if stat.Balloon.AvailableSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonAvailable,
prometheus.GaugeValue,
float64(stat.Balloon.Available), uuid,
)
}
if stat.Balloon.RssSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonRss,
prometheus.GaugeValue,
float64(stat.Balloon.Rss), uuid,
)
}
if stat.Balloon.UsableSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonUsable,
prometheus.GaugeValue,
float64(stat.Balloon.Usable), uuid,
)
}
if stat.Balloon.DiskCachesSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonDiskCaches,
prometheus.GaugeValue,
float64(stat.Balloon.DiskCaches), uuid,
)
}
if stat.Balloon.HugetlbPgAllocSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonHugetlbPgAlloc,
prometheus.CounterValue,
float64(stat.Balloon.HugetlbPgAlloc), uuid,
)
}
if stat.Balloon.HugetlbPgFailSet {
ch <- prometheus.MustNewConstMetric(
c.DomainBalloonHugetlbPgFail,
prometheus.CounterValue,
float64(stat.Balloon.HugetlbPgFail), uuid,
)
}
}
func (c *DomainStatsCollector) collectVcpu(uuid string, stat libvirt.DomainStats, ch chan<- prometheus.Metric) {

2
go.mod
View File

@ -3,7 +3,7 @@ module opendev.org/vexxhost/libvirtd_exporter
go 1.13
require (
github.com/libvirt/libvirt-go v5.10.0+incompatible
github.com/libvirt/libvirt-go v6.6.0+incompatible
github.com/prometheus/client_golang v1.0.0
github.com/prometheus/common v0.7.0
gopkg.in/alecthomas/kingpin.v2 v2.2.6