From 0ee871072a88c42c979d5712a96d16ed3947f33c Mon Sep 17 00:00:00 2001 From: Rahul Gupta Date: Fri, 3 Nov 2023 15:02:34 +0530 Subject: [PATCH 1/4] feat: add labels defined in harvest config to metadata metrics --- cmd/poller/collector/collector.go | 6 ++++++ cmd/poller/exporter/exporter.go | 12 +++++++++++- cmd/poller/poller.go | 11 +++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/cmd/poller/collector/collector.go b/cmd/poller/collector/collector.go index 0350f00a1..8afc547a5 100644 --- a/cmd/poller/collector/collector.go +++ b/cmd/poller/collector/collector.go @@ -217,6 +217,12 @@ func Init(c Collector) error { md.SetGlobalLabel("object", object) md.SetGlobalLabel("datacenter", params.GetChildContentS("datacenter")) + if params.HasChildS("labels") { + for _, l := range params.GetChildS("labels").GetChildren() { + md.SetGlobalLabel(l.GetNameS(), l.GetContentS()) + } + } + _, _ = md.NewMetricInt64("poll_time") _, _ = md.NewMetricInt64("task_time") _, _ = md.NewMetricInt64("api_time") diff --git a/cmd/poller/exporter/exporter.go b/cmd/poller/exporter/exporter.go index 402ae4b59..c24927a18 100644 --- a/cmd/poller/exporter/exporter.go +++ b/cmd/poller/exporter/exporter.go @@ -23,7 +23,7 @@ type Exporter interface { Init() error // initialize exporter GetClass() string // the class of the exporter, e.g. Prometheus, InfluxDB GetName() string // the name of the exporter instance - // Name is different from Class, since we can have multiple instances of the same Class + // GetExportCount Name is different from Class, since we can have multiple instances of the same Class GetExportCount() uint64 // return and reset number of exported data points, used by Poller to keep stats AddExportCount(uint64) // add count to the export count, called by the exporter itself GetStatus() (uint8, string, string) // return current state of the exporter @@ -72,6 +72,16 @@ func New(c, n string, o *options.Options, p conf.Exporter, params *conf.Poller) } if params != nil { abc.Metadata.SetGlobalLabel("datacenter", params.Datacenter) + labels := params.Labels + if labels != nil { + for _, labelPtr := range *labels { + if labelPtr != nil { + for key, value := range *labelPtr { + abc.Metadata.SetGlobalLabel(key, value) + } + } + } + } } return &abc } diff --git a/cmd/poller/poller.go b/cmd/poller/poller.go index 0726735ff..1a255d41e 100644 --- a/cmd/poller/poller.go +++ b/cmd/poller/poller.go @@ -931,6 +931,17 @@ func (p *Poller) loadMetadata() { if p.options.PromPort != 0 { p.status.SetGlobalLabel("promport", strconv.Itoa(p.options.PromPort)) } + labels := p.params.Labels + if labels != nil { + for _, labelPtr := range *labels { + if labelPtr != nil { + for key, value := range *labelPtr { + p.metadata.SetGlobalLabel(key, value) + p.status.SetGlobalLabel(key, value) + } + } + } + } p.status.SetExportOptions(matrix.DefaultExportOptions()) } From 420b89b9c058318fd8dbb0c795d968c8b4934b67 Mon Sep 17 00:00:00 2001 From: Rahul Gupta Date: Fri, 3 Nov 2023 18:08:02 +0530 Subject: [PATCH 2/4] doc: address review comments --- cmd/poller/exporter/exporter.go | 6 ++-- cmd/poller/poller.go | 8 ++--- pkg/conf/conf.go | 52 ++++++++++++++++----------------- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/cmd/poller/exporter/exporter.go b/cmd/poller/exporter/exporter.go index c24927a18..031049a09 100644 --- a/cmd/poller/exporter/exporter.go +++ b/cmd/poller/exporter/exporter.go @@ -75,10 +75,8 @@ func New(c, n string, o *options.Options, p conf.Exporter, params *conf.Poller) labels := params.Labels if labels != nil { for _, labelPtr := range *labels { - if labelPtr != nil { - for key, value := range *labelPtr { - abc.Metadata.SetGlobalLabel(key, value) - } + for key, value := range labelPtr { + abc.Metadata.SetGlobalLabel(key, value) } } } diff --git a/cmd/poller/poller.go b/cmd/poller/poller.go index 1a255d41e..3d4359060 100644 --- a/cmd/poller/poller.go +++ b/cmd/poller/poller.go @@ -934,11 +934,9 @@ func (p *Poller) loadMetadata() { labels := p.params.Labels if labels != nil { for _, labelPtr := range *labels { - if labelPtr != nil { - for key, value := range *labelPtr { - p.metadata.SetGlobalLabel(key, value) - p.status.SetGlobalLabel(key, value) - } + for key, value := range labelPtr { + p.metadata.SetGlobalLabel(key, value) + p.status.SetGlobalLabel(key, value) } } } diff --git a/pkg/conf/conf.go b/pkg/conf/conf.go index 64c52cbdc..7e3f49fcd 100644 --- a/pkg/conf/conf.go +++ b/pkg/conf/conf.go @@ -421,32 +421,32 @@ type CertificateScript struct { } type Poller struct { - Addr string `yaml:"addr,omitempty"` - APIVersion string `yaml:"api_version,omitempty"` - APIVfiler string `yaml:"api_vfiler,omitempty"` - AuthStyle string `yaml:"auth_style,omitempty"` - CaCertPath string `yaml:"ca_cert,omitempty"` - ClientTimeout string `yaml:"client_timeout,omitempty"` - Collectors []Collector `yaml:"collectors,omitempty"` - CredentialsFile string `yaml:"credentials_file,omitempty"` - CredentialsScript CredentialsScript `yaml:"credentials_script,omitempty"` - CertificateScript CertificateScript `yaml:"certificate_script,omitempty"` - Datacenter string `yaml:"datacenter,omitempty"` - Exporters []string `yaml:"exporters,omitempty"` - IsKfs bool `yaml:"is_kfs,omitempty"` - Labels *[]*map[string]string `yaml:"labels,omitempty"` - LogMaxBytes int64 `yaml:"log_max_bytes,omitempty"` - LogMaxFiles int `yaml:"log_max_files,omitempty"` - LogSet *[]string `yaml:"log,omitempty"` - Password string `yaml:"password,omitempty"` - PollerSchedule string `yaml:"poller_schedule,omitempty"` - SslCert string `yaml:"ssl_cert,omitempty"` - SslKey string `yaml:"ssl_key,omitempty"` - TLSMinVersion string `yaml:"tls_min_version,omitempty"` - UseInsecureTLS *bool `yaml:"use_insecure_tls,omitempty"` - Username string `yaml:"username,omitempty"` - PreferZAPI bool `yaml:"prefer_zapi,omitempty"` - ConfPath string `yaml:"conf_path,omitempty"` + Addr string `yaml:"addr,omitempty"` + APIVersion string `yaml:"api_version,omitempty"` + APIVfiler string `yaml:"api_vfiler,omitempty"` + AuthStyle string `yaml:"auth_style,omitempty"` + CaCertPath string `yaml:"ca_cert,omitempty"` + ClientTimeout string `yaml:"client_timeout,omitempty"` + Collectors []Collector `yaml:"collectors,omitempty"` + CredentialsFile string `yaml:"credentials_file,omitempty"` + CredentialsScript CredentialsScript `yaml:"credentials_script,omitempty"` + CertificateScript CertificateScript `yaml:"certificate_script,omitempty"` + Datacenter string `yaml:"datacenter,omitempty"` + Exporters []string `yaml:"exporters,omitempty"` + IsKfs bool `yaml:"is_kfs,omitempty"` + Labels *[]map[string]string `yaml:"labels,omitempty"` + LogMaxBytes int64 `yaml:"log_max_bytes,omitempty"` + LogMaxFiles int `yaml:"log_max_files,omitempty"` + LogSet *[]string `yaml:"log,omitempty"` + Password string `yaml:"password,omitempty"` + PollerSchedule string `yaml:"poller_schedule,omitempty"` + SslCert string `yaml:"ssl_cert,omitempty"` + SslKey string `yaml:"ssl_key,omitempty"` + TLSMinVersion string `yaml:"tls_min_version,omitempty"` + UseInsecureTLS *bool `yaml:"use_insecure_tls,omitempty"` + Username string `yaml:"username,omitempty"` + PreferZAPI bool `yaml:"prefer_zapi,omitempty"` + ConfPath string `yaml:"conf_path,omitempty"` promIndex int Name string } From c2b7c4863d56b31853af975be1a05a3b62258904 Mon Sep 17 00:00:00 2001 From: Rahul Gupta Date: Tue, 7 Nov 2023 10:22:04 +0530 Subject: [PATCH 3/4] feat: address review comments --- cmd/poller/exporter/exporter.go | 4 +--- cmd/poller/poller.go | 6 ++---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/cmd/poller/exporter/exporter.go b/cmd/poller/exporter/exporter.go index 031049a09..c60f47707 100644 --- a/cmd/poller/exporter/exporter.go +++ b/cmd/poller/exporter/exporter.go @@ -75,9 +75,7 @@ func New(c, n string, o *options.Options, p conf.Exporter, params *conf.Poller) labels := params.Labels if labels != nil { for _, labelPtr := range *labels { - for key, value := range labelPtr { - abc.Metadata.SetGlobalLabel(key, value) - } + abc.Metadata.SetGlobalLabels(labelPtr) } } } diff --git a/cmd/poller/poller.go b/cmd/poller/poller.go index 3d4359060..c426d3349 100644 --- a/cmd/poller/poller.go +++ b/cmd/poller/poller.go @@ -934,10 +934,8 @@ func (p *Poller) loadMetadata() { labels := p.params.Labels if labels != nil { for _, labelPtr := range *labels { - for key, value := range labelPtr { - p.metadata.SetGlobalLabel(key, value) - p.status.SetGlobalLabel(key, value) - } + p.metadata.SetGlobalLabels(labelPtr) + p.status.SetGlobalLabels(labelPtr) } } p.status.SetExportOptions(matrix.DefaultExportOptions()) From 917421a0bf4d4faa5f55057a1c3d3cab347cf559 Mon Sep 17 00:00:00 2001 From: Rahul Gupta Date: Wed, 8 Nov 2023 09:47:46 +0530 Subject: [PATCH 4/4] feat: address review comments --- cmd/poller/exporter/exporter.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/poller/exporter/exporter.go b/cmd/poller/exporter/exporter.go index c60f47707..4b216bd5f 100644 --- a/cmd/poller/exporter/exporter.go +++ b/cmd/poller/exporter/exporter.go @@ -22,8 +22,8 @@ import ( type Exporter interface { Init() error // initialize exporter GetClass() string // the class of the exporter, e.g. Prometheus, InfluxDB - GetName() string // the name of the exporter instance - // GetExportCount Name is different from Class, since we can have multiple instances of the same Class + // GetName is different from Class, since we can have multiple instances of the same Class + GetName() string // the name of the exporter instance GetExportCount() uint64 // return and reset number of exported data points, used by Poller to keep stats AddExportCount(uint64) // add count to the export count, called by the exporter itself GetStatus() (uint8, string, string) // return current state of the exporter