Skip to content

Commit

Permalink
feature: add glustervolume metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
tbelda-ems committed Mar 9, 2023
1 parent 26fcb3f commit 7c140b5
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 10 deletions.
16 changes: 16 additions & 0 deletions METRICS.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,22 @@
- used (int) in bytes
- status (string)
- status_code (int) 0-active, 1-activating, 2-maintenance, 3-unknown, 4-detaching, 5-unattached, 6-mixed, 7-locked
- ovirtstat_glustervolume
- tags:
- clustername
- dcname
- name
- id
- ovirt-engine
- type
- fields:
- briks (int)
- disperse_count (int)
- redundancy_count (int)
- replica_count (int)
- status (string)
- status_code (int) 0-up, 1-unknown, 2-down
- stripe_count (int)
- ovirtstat_vm
- tags:
- clustername
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ Latest releases are built with a go-ovirt library version that should work with

#### collector names available are (details in METRICS.md) ####
## Datacenters: datacenter stats in ovirtstat_datacenter measurement
## GlusterVolumes: gluster volume stats in ovirtstat_glustervolume measurement
## Hosts: hypervisor/host stats in ovirtstat_host measurement
## StorageDomains: cluster stats in ovirtstat_storagedomains measurement
## VMs: virtual machine stats in ovirtstat_vm measurement
Expand Down Expand Up @@ -99,6 +100,7 @@ ovirtstat_datacenter,name=mydc,id=c3a7efc0-8417-4d1b-bc74-fa6f20d6bf1f,ovirt-eng
ovirtstat_host,clustername=mycluster,dcname=mydc,id=b3d53f5d-7ec3-43a8-a52a-15fe7dde25c2,name=myhyp01,ovirt-engine=myovirt,type=rhel cpu_threads=2i,memory_size=1622535045120i,status="up",status_code=0i,cpu_cores=16i,cpu_sockets=2i,cpu_speed=800,reinstallation_required=false,vm_active=5i,vm_migrating=0i,vm_total=5i 1677832224000000000
ovirtstat_storagedomain,id=072cba31-08f3-4a40-9f24-a5ca22ed1d74,name=ovirt-image-repository,ovirt-engine=myovirt,type=image available=0i,connections=0,committed=0i,external_status="ok",external_status_code=0,master=false,status="unattached",status_code=5i,used=0i 1677832224000000000
ovirtstat_storagedomain,id=ec413fb2-c6ce-4bea-a790-2533b728ac93,name=mysd01,ovirt-engine=myovirt,type=data available=3233036632064i,connections=7,committed=16603269824512i,external_status="ok",external_status_code=0,master=true,status="",status_code=3i,used=7761005903872i 1677832224000000000
ovirtstat_glustervolume,clustername=mycluster,dcname=mydc,id=a1d52f5d-6vc3-42a8-a52f-21fe7dde25c2,name=mygv1,ovirt-engine=myovirt,type=stripe briks=1i,disperse_count=0i,redundancy_count=0i,replica_count=0i,status="up",status_code=0i,stripe_count=1i 1677832224000000000
virtstat_vm,clustername=mycluster,dcname=mydc,hostname=myhyp01,id=125555e7-fa2c-4d95-a5c4-51f1b9a7f563,name=myvm01,ovirt-engine=myovirt,type=server cpu_cores=1i,cpu_threads=2i,run_once=false,status="up",cpu_sockets=2i,memory_size=40802189312i,stateless=false,status_code=0i 1677832224000000000
internal_ovirtstat,ovirt-engine=myovirt sessions_created=1i,gather_time_ns=803780400i 1677832224000000000
```
Expand Down
1 change: 1 addition & 0 deletions etc/ovirtstat.conf
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@

#### collector names available are (details in METRICS.md) ####
## Datacenters: datacenter stats in ovirtstat_datacenter measurement
## GlusterVolumes: gluster volume stats in ovirtstat_glustervolume measurement
## Hosts: hypervisor/host stats in ovirtstat_host measurement
## StorageDomains: cluster stats in ovirtstat_storagedomains measurement
## VMs: virtual machine stats in ovirtstat_vm measurement
48 changes: 39 additions & 9 deletions internal/ovirtcollector/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@ import (
)

type VcCache struct {
dcs *ovirtsdk.DataCenterSlice //nolint
clusters *ovirtsdk.ClusterSlice //nolint
sds *ovirtsdk.StorageDomainSlice //nolint
hosts *ovirtsdk.HostSlice //nolint
vms *ovirtsdk.VmSlice //nolint
lastDCUpdate time.Time //nolint
lastHoUpdate time.Time //nolint
lastSdUpdate time.Time //nolint
lastVmUpdate time.Time //nolint
dcs *ovirtsdk.DataCenterSlice
clusters *ovirtsdk.ClusterSlice
gvs *ovirtsdk.GlusterVolumeSlice
sds *ovirtsdk.StorageDomainSlice
hosts *ovirtsdk.HostSlice
vms *ovirtsdk.VmSlice
lastDCUpdate time.Time
lastHoUpdate time.Time
lastGvUpdate time.Time
lastSdUpdate time.Time
lastVmUpdate time.Time
}

func (c *OVirtCollector) getDatacentersAndClusters(ctx context.Context) error {
Expand Down Expand Up @@ -59,6 +61,34 @@ func (c *OVirtCollector) getDatacentersAndClusters(ctx context.Context) error {
return err
}

func (c *OVirtCollector) getAllDatacentersGlusterVolumes(ctx context.Context) error {
var err error

if time.Since(c.lastGvUpdate) < c.dataDuration {
return nil
}

if err = c.getDatacentersAndClusters(ctx); err != nil {
return err
}

// Get Gluster Volumes
clserv := ovirtsdk.NewClusterService(c.conn, "")
gvsService := clserv.GlusterVolumesService()
gvsResponse, err := gvsService.List().Send()
if err != nil {
return err
}
gvs, ok := gvsResponse.Volumes()
if !ok {
return fmt.Errorf("Could not get gluster volume list or it is empty")
}
c.gvs = gvs
c.lastGvUpdate = time.Now()

return nil
}

func (c *OVirtCollector) getAllDatacentersHosts(ctx context.Context) error {
var err error

Expand Down
6 changes: 5 additions & 1 deletion plugins/inputs/ovirtstat/ovirtstat.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ var sampleConfig = `
#### collector names available are ####
## Datacenters: datacenter stats in ovirtstat_datacenter measurement
## GlusterVolumes: gluster volume stats in ovirtstat_glustervolume measurement
## Hosts: hypervisor/host stats in ovirtstat_host measurement
## StorageDomains: cluster stats in ovirtstat_storagedomains measurement
## VMs: virtual machine stats in ovirtstat_vm measurement
Expand Down Expand Up @@ -312,6 +313,9 @@ func (ovc *OVirtstatConfig) gatherStorage(
if _, exist = ovc.collectors["StorageDomains"]; exist {
err = col.CollectDatastoresInfo(ctx, acc)
}
if _, exist = ovc.collectors["GlusterVolumes"]; exist {
err = col.CollectGlusterVolumeInfo(ctx, acc)
}

return err
}
Expand All @@ -334,7 +338,7 @@ func (ovc *OVirtstatConfig) gatherVM(ctx context.Context, acc telegraf.Accumulat

// setFilterCollectors sets collectors to use given the include and exclude filters
func (ovc *OVirtstatConfig) setFilterCollectors(include, exclude []string) error {
var allcollectors = []string{"Datacenters", "Hosts", "StorageDomains", "VMs"}
var allcollectors = []string{"Datacenters", "GlusterVolumes", "Hosts", "StorageDomains", "VMs"}
var err error

ovc.filterCollectors, err = filter.NewIncludeExcludeFilter(include, exclude)
Expand Down

0 comments on commit 7c140b5

Please sign in to comment.