diff --git a/CHANGELOG.md b/CHANGELOG.md index dd4c93ac051..b8cceaaaeed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,8 @@ Main (unreleased) - (_Public Preview_) Additions to `database_observability.mysql` component: - replace the internal `server_id` label attribution in favor of a hash composed from `@@server_uuid` and `@@hostname` +- Fix the `prometheus.operator.*` components internal scrape manager now having a way to enable ingesting native histograms. (@dehaansa) + v1.12.0 ----------------- diff --git a/docs/sources/shared/reference/components/prom-operator-scrape.md b/docs/sources/shared/reference/components/prom-operator-scrape.md index 612d442d73a..fb18aeb35b5 100644 --- a/docs/sources/shared/reference/components/prom-operator-scrape.md +++ b/docs/sources/shared/reference/components/prom-operator-scrape.md @@ -4,7 +4,8 @@ description: Shared content, prom operator scrape headless: true --- -| Name | Type | Description | Default | Required | -| ------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | -| `default_scrape_interval` | `duration` | The default interval between scraping targets. Used as the default if the target resource doesn't provide a scrape interval. | `1m` | no | -| `default_scrape_timeout` | `duration` | The default timeout for scrape requests. Used as the default if the target resource doesn't provide a scrape timeout. | `10s` | no | +| Name | Type | Description | Default | Required | +|----------------------------|------------|------------------------------------------------------------------------------------------------------------------------------|---------|----------| +| `default_scrape_interval` | `duration` | The default interval between scraping targets. Used as the default if the target resource doesn't provide a scrape interval. | `1m` | no | +| `default_scrape_timeout` | `duration` | The default timeout for scrape requests. Used as the default if the target resource doesn't provide a scrape timeout. | `10s` | no | +| `scrape_native_histograms` | `bool` | Allow the scrape manager to ingest native histograms. | `false` | no | diff --git a/internal/component/prometheus/operator/common/crdmanager.go b/internal/component/prometheus/operator/common/crdmanager.go index b5948edf9ea..37f595186bd 100644 --- a/internal/component/prometheus/operator/common/crdmanager.go +++ b/internal/component/prometheus/operator/common/crdmanager.go @@ -146,7 +146,10 @@ func (c *crdManager) Run(ctx context.Context) error { // Start prometheus scrape manager. alloyAppendable := prometheus.NewFanout(c.args.ForwardTo, c.opts.ID, c.opts.Registerer, c.ls) - opts := &scrape.Options{} + + opts := &scrape.Options{ + EnableNativeHistogramsIngestion: c.args.Scrape.ScrapeNativeHistograms, + } c.scrapeManager, err = scrape.NewManager(opts, slog.New(logging.NewSlogGoKitHandler(c.logger)), nil, alloyAppendable, unregisterer) if err != nil { return fmt.Errorf("creating scrape manager: %w", err) diff --git a/internal/component/prometheus/operator/configgen/config_gen.go b/internal/component/prometheus/operator/configgen/config_gen.go index 8b712a6d488..df93414be6c 100644 --- a/internal/component/prometheus/operator/configgen/config_gen.go +++ b/internal/component/prometheus/operator/configgen/config_gen.go @@ -190,6 +190,10 @@ func (cg *ConfigGenerator) generateDefaultScrapeConfig() *config.ScrapeConfig { c.ScrapeTimeout = model.Duration(opt.DefaultScrapeTimeout) } + if opt.ScrapeNativeHistograms { + c.ScrapeProtocols = config.DefaultProtoFirstScrapeProtocols + } + return &c } diff --git a/internal/component/prometheus/operator/configgen/config_gen_podmonitor_test.go b/internal/component/prometheus/operator/configgen/config_gen_podmonitor_test.go index 16634bdf167..d405de202ca 100644 --- a/internal/component/prometheus/operator/configgen/config_gen_podmonitor_test.go +++ b/internal/component/prometheus/operator/configgen/config_gen_podmonitor_test.go @@ -529,8 +529,9 @@ func TestGeneratePodMonitorConfig(t *testing.T) { {TargetLabel: "__meta_foo", Replacement: "bar"}, }, ScrapeOptions: operator.ScrapeOptions{ - DefaultScrapeInterval: time.Hour, - DefaultScrapeTimeout: 42 * time.Second, + DefaultScrapeInterval: time.Hour, + DefaultScrapeTimeout: 42 * time.Second, + ScrapeNativeHistograms: false, }, } cfg, err := cg.GeneratePodMonitorConfig(tc.m, tc.ep, 1) diff --git a/internal/component/prometheus/operator/configgen/config_gen_scrapeconfig_test.go b/internal/component/prometheus/operator/configgen/config_gen_scrapeconfig_test.go index 3139ef6acd6..f59b1791612 100644 --- a/internal/component/prometheus/operator/configgen/config_gen_scrapeconfig_test.go +++ b/internal/component/prometheus/operator/configgen/config_gen_scrapeconfig_test.go @@ -217,8 +217,9 @@ func TestGenerateStaticScrapeConfigConfig(t *testing.T) { {TargetLabel: "__meta_foo", Replacement: "bar"}, }, ScrapeOptions: operator.ScrapeOptions{ - DefaultScrapeInterval: time.Hour, - DefaultScrapeTimeout: 42 * time.Second, + DefaultScrapeInterval: time.Hour, + DefaultScrapeTimeout: 42 * time.Second, + ScrapeNativeHistograms: false, }, } cfg, err := cg.generateStaticScrapeConfigConfig(tc.m, tc.ep, 1) diff --git a/internal/component/prometheus/operator/types.go b/internal/component/prometheus/operator/types.go index 7f0005eb19a..c4b8d5baaf0 100644 --- a/internal/component/prometheus/operator/types.go +++ b/internal/component/prometheus/operator/types.go @@ -49,6 +49,9 @@ type ScrapeOptions struct { // DefaultScrapeTimeout is the default timeout to scrape targets. DefaultScrapeTimeout time.Duration `alloy:"default_scrape_timeout,attr,optional"` + + // ScrapeNativeHistograms enables scraping of Prometheus native histograms. + ScrapeNativeHistograms bool `alloy:"scrape_native_histograms,attr,optional"` } func (s *ScrapeOptions) GlobalConfig() promconfig.GlobalConfig {