diff --git a/cmd/collectors/rest/plugins/health/health.go b/cmd/collectors/rest/plugins/health/health.go index 6d488d881..ccfa50958 100644 --- a/cmd/collectors/rest/plugins/health/health.go +++ b/cmd/collectors/rest/plugins/health/health.go @@ -200,7 +200,7 @@ func (h *Health) Run(dataMap map[string]*matrix.Matrix) ([]*matrix.Matrix, *util result = append(result, emsMat) h.SLogger.Info( - "Collected", + "Health plugin", slog.Int("numLicenseAlerts", licenseAlertCount), slog.Int("numVolumeMoveAlerts", volumeMoveAlertCount), slog.Int("numVolumeRansomwareAlerts", volumeRansomwareAlertCount), diff --git a/cmd/exporters/prometheus/prometheus.go b/cmd/exporters/prometheus/prometheus.go index 6a0fb779e..1bb397f9b 100644 --- a/cmd/exporters/prometheus/prometheus.go +++ b/cmd/exporters/prometheus/prometheus.go @@ -272,6 +272,7 @@ func (p *Prometheus) render(data *matrix.Matrix) ([][]byte, exporter.Stats) { histograms map[string]*histogram normalizedLabels map[string][]string // cache of histogram normalized labels instancesExported uint64 + renderedBytes uint64 instanceKeysOk bool buf bytes.Buffer // shared buffer for rendering ) @@ -442,11 +443,13 @@ func (p *Prometheus) render(data *matrix.Matrix) ([][]byte, exporter.Stats) { prefixed := prefix + "_labels" if tagged != nil && !tagged.Has(prefixed) { tagged.Add(prefixed) - rendered = append(rendered, - []byte("# HELP "+prefixed+" Pseudo-metric for "+data.Object+" labels"), - []byte("# TYPE "+prefixed+" gauge")) + help := "# HELP " + prefixed + " Pseudo-metric for " + data.Object + " labels" + typeT := "# TYPE " + prefixed + " gauge" + rendered = append(rendered, []byte(help), []byte(typeT)) + renderedBytes += uint64(len(help)) + uint64(len(typeT)) } rendered = append(rendered, labelData) + renderedBytes += uint64(len(labelData)) } } @@ -503,12 +506,14 @@ func (p *Prometheus) render(data *matrix.Matrix) ([][]byte, exporter.Stats) { prefixedName := prefix + "_" + metric.GetName() if tagged != nil && !tagged.Has(prefixedName) { tagged.Add(prefixedName) - rendered = append(rendered, - []byte("# HELP "+prefixedName+" Metric for "+data.Object), - []byte("# TYPE "+prefixedName+" histogram")) + help := "# HELP " + prefixedName + " Metric for " + data.Object + typeT := "# TYPE " + prefixedName + " histogram" + rendered = append(rendered, []byte(help), []byte(typeT)) + renderedBytes += uint64(len(help)) + uint64(len(typeT)) } rendered = append(rendered, []byte(x)) + renderedBytes += uint64(len(x)) // scalar metric } else { buf.Reset() @@ -547,6 +552,7 @@ func (p *Prometheus) render(data *matrix.Matrix) ([][]byte, exporter.Stats) { copy(helpB, xbr) rendered = append(rendered, helpB) + renderedBytes += uint64(len(helpB)) buf.Reset() buf.WriteString("# TYPE ") @@ -558,9 +564,11 @@ func (p *Prometheus) render(data *matrix.Matrix) ([][]byte, exporter.Stats) { copy(typeB, tbr) rendered = append(rendered, typeB) + renderedBytes += uint64(len(typeB)) } rendered = append(rendered, scalarMetric) + renderedBytes += uint64(len(scalarMetric)) } } } @@ -592,9 +600,11 @@ func (p *Prometheus) render(data *matrix.Matrix) ([][]byte, exporter.Stats) { prefixedName := prefix + "_" + metric.GetName() if tagged != nil && !tagged.Has(prefixedName) { tagged.Add(prefix + "_" + metric.GetName()) - rendered = append(rendered, - []byte("# HELP "+prefixedName+" Metric for "+data.Object), - []byte("# TYPE "+prefixedName+" histogram")) + + help := "# HELP " + prefixedName + " Metric for " + data.Object + typeT := "# TYPE " + prefixedName + " histogram" + rendered = append(rendered, []byte(help), []byte(typeT)) + renderedBytes += uint64(len(help)) + uint64(len(typeT)) } normalizedNames, canNormalize := normalizedLabels[objectMetric] @@ -616,15 +626,18 @@ func (p *Prometheus) render(data *matrix.Matrix) ([][]byte, exporter.Stats) { x = prefix + "_" + metric.GetName() + "{" + joinedKeys + `,` + escape(p.replacer, "metric", bucketName) + "} " + value } rendered = append(rendered, []byte(x)) + renderedBytes += uint64(len(x)) } if canNormalize { rendered = append(rendered, []byte(countMetric), []byte(sumMetric)) + renderedBytes += uint64(len(countMetric)) + uint64(len(sumMetric)) } } } stats := exporter.Stats{ InstancesExported: instancesExported, MetricsExported: uint64(len(rendered)), + RenderedBytes: renderedBytes, } return rendered, stats diff --git a/cmd/poller/collector/collector.go b/cmd/poller/collector/collector.go index 0b6ae3f90..6cfff2770 100644 --- a/cmd/poller/collector/collector.go +++ b/cmd/poller/collector/collector.go @@ -529,19 +529,21 @@ func (c *AbstractCollector) Start(wg *sync.WaitGroup) { // Continue if metadata failed, since it might be specific to metadata for _, data := range results { - if data.IsExportable() { - stats, err := e.Export(data) - if err != nil { - c.Logger.Error( - "export data", - slogx.Err(err), - slog.String("exporter", e.GetName()), - ) - break - } - exporterStats.InstancesExported += stats.InstancesExported - exporterStats.MetricsExported += stats.MetricsExported + if !data.IsExportable() { + continue + } + stats, err := e.Export(data) + if err != nil { + c.Logger.Error( + "export data", + slogx.Err(err), + slog.String("exporter", e.GetName()), + ) + break } + exporterStats.InstancesExported += stats.InstancesExported + exporterStats.MetricsExported += stats.MetricsExported + exporterStats.RenderedBytes += stats.RenderedBytes } } @@ -612,6 +614,7 @@ func (c *AbstractCollector) logMetadata(taskName string, stats exporter.Stats) { int64Field("pluginInstances"), timeToMilli("plugin_time"), timeToMilli("poll_time"), + slog.Uint64("renderedBytes", stats.RenderedBytes), int64Field("skips"), int64Field("zBegin"), ) diff --git a/cmd/poller/exporter/exporter.go b/cmd/poller/exporter/exporter.go index cbac3815d..e6bb80b59 100644 --- a/cmd/poller/exporter/exporter.go +++ b/cmd/poller/exporter/exporter.go @@ -42,6 +42,7 @@ var status = [3]string{ type Stats struct { InstancesExported uint64 MetricsExported uint64 + RenderedBytes uint64 } // AbstractExporter implements all methods of the Exporter interface, except Export()