From 94622fef2971e122e83e9aa2fd4abb5302c6b7fe Mon Sep 17 00:00:00 2001 From: Max Kotliar Date: Thu, 19 Feb 2026 18:45:44 +0200 Subject: [PATCH] lib/prommetadata: enable metrics metadata ingestion and storing by default (#10489) ### Describe Your Changes Related to https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2974 ### Checklist The following checks are **mandatory**: - [ ] My change adheres to [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/victoriametrics/contributing/#pull-request-checklist). - [ ] My change adheres to [VictoriaMetrics development goals](https://docs.victoriametrics.com/victoriametrics/goals/). --- apptest/tests/metricsmetadata_test.go | 4 ---- docs/victoriametrics/Cluster-VictoriaMetrics.md | 2 +- docs/victoriametrics/README.md | 2 +- docs/victoriametrics/changelog/CHANGELOG.md | 1 + docs/victoriametrics/vmagent.md | 4 ++-- lib/prommetadata/metadata.go | 2 +- 6 files changed, 6 insertions(+), 9 deletions(-) diff --git a/apptest/tests/metricsmetadata_test.go b/apptest/tests/metricsmetadata_test.go index 0ecf1a9797..5f52b538af 100644 --- a/apptest/tests/metricsmetadata_test.go +++ b/apptest/tests/metricsmetadata_test.go @@ -19,7 +19,6 @@ func TestSingleMetricsMetadata(t *testing.T) { sut := tc.MustStartVmsingle("vmsingle", []string{ "-storageDataPath=" + tc.Dir(), "-retentionPeriod=100y", - "-enableMetadata", }) // verify empty stats resp := sut.PrometheusAPIV1Metadata(t, "", 0, apptest.QueryOpts{}) @@ -120,15 +119,12 @@ func TestClusterMetricsMetadata(t *testing.T) { vminsert1 := tc.MustStartVminsert("vminsert1", []string{ fmt.Sprintf("-storageNode=%s,%s", vmstorage1.VminsertAddr(), vmstorage2.VminsertAddr()), - "-enableMetadata", }) vminsert2 := tc.MustStartVminsert("vminsert-2", []string{ fmt.Sprintf("-storageNode=%s,%s", vmstorage1.VminsertAddr(), vmstorage2.VminsertAddr()), - "-enableMetadata", }) vminsertGlobal := tc.MustStartVminsert("vminsert-global", []string{ fmt.Sprintf("-storageNode=%s,%s", vminsert1.ClusternativeListenAddr(), vminsert2.ClusternativeListenAddr()), - "-enableMetadata", }) vmselect := tc.MustStartVmselect("vmselect", []string{ fmt.Sprintf("-storageNode=%s,%s", vmstorage1.VmselectAddr(), vmstorage2.VmselectAddr()), diff --git a/docs/victoriametrics/Cluster-VictoriaMetrics.md b/docs/victoriametrics/Cluster-VictoriaMetrics.md index 2d77d338b0..05fa9699af 100644 --- a/docs/victoriametrics/Cluster-VictoriaMetrics.md +++ b/docs/victoriametrics/Cluster-VictoriaMetrics.md @@ -1015,7 +1015,7 @@ to ensure query results consistency, even if storage layer didn't complete dedup ## Metrics Metadata Cluster version of VictoriaMetrics can store metric metadata (TYPE, HELP, UNIT) {{% available_from "v1.130.0" %}}. -Metadata ingestion is disabled by default. To enable it, set `-enableMetadata=true` on `vminsert` and `vmagent`. +Metadata ingestion is enabled by default{{% available_from "#" %}}. To disable it, set `-enableMetadata=false` on `vminsert`, `vmstorage` and `vmagent`. The metadata is cached in-memory in a ring buffer and can use up to 1% of available memory by default (see `-storage.maxMetadataStorageSize` cmd-line flag). When in-memory size is exceeded, the least updated entries are dropped first. Entries that weren't updated for 1h are cleaned up automatically. diff --git a/docs/victoriametrics/README.md b/docs/victoriametrics/README.md index 13baab0526..fd8b8e970e 100644 --- a/docs/victoriametrics/README.md +++ b/docs/victoriametrics/README.md @@ -1371,7 +1371,7 @@ see [these docs](https://docs.victoriametrics.com/victoriametrics/stream-aggrega ## Metrics Metadata Single-node VictoriaMetrics can store metric metadata (`TYPE`, `HELP`, `UNIT`) {{% available_from "v1.130.0" %}}. -Metadata ingestion and querying are disabled by default. To enable them, set `-enableMetadata=true`. +Metadata ingestion and querying are enabled by default{{% available_from "#" %}}. To disable them, set `-enableMetadata=false`. The metadata is cached in-memory in a ring buffer and can use up to 1% of available memory by default (see `-storage.maxMetadataStorageSize` cmd-line flag). When in-memory size is exceeded, the least updated entries are dropped first. Entries that weren't updated for 1h are cleaned up automatically. diff --git a/docs/victoriametrics/changelog/CHANGELOG.md b/docs/victoriametrics/changelog/CHANGELOG.md index 07472b0081..589612ac8f 100644 --- a/docs/victoriametrics/changelog/CHANGELOG.md +++ b/docs/victoriametrics/changelog/CHANGELOG.md @@ -30,6 +30,7 @@ See also [LTS releases](https://docs.victoriametrics.com/victoriametrics/lts-rel * FEATURE: [vmauth](https://docs.victoriametrics.com/victoriametrics/vmauth/): add JWT token authentication support with signature verification based on provided `public_keys`. Read more about configuration in [JWT Token auth proxy](https://docs.victoriametrics.com/victoriametrics/vmauth/#jwt-token-auth-proxy) documentation. See [#10445](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/10445). * FEATURE: all VictoriaMetrics components: expose `process_cpu_seconds_total`, `process_resident_memory_bytes`, and other process-level metrics when running on macOS. See [metrics#75](https://github.com/VictoriaMetrics/metrics/issues/75). * FEATURE: [dashboards/vmauth](https://grafana.com/grafana/dashboards/21394): add `Request body buffering duration` panel to the `Troubleshooting` section. This panel shows the time spent buffering incoming client request bodies, helping identify slow client uploads and potential concurrency issues. The panel is only available when `-requestBufferSize` is non-zero. See [#10309](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/10309). +* FEATURE: [vmagent](https://docs.victoriametrics.com/victoriametrics/vmagent/), [vmsingle](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/), `vminsert` and `vmstorage` in [VictoriaMetrics cluster](https://docs.victoriametrics.com/victoriametrics/cluster-victoriametrics/): enable [ingestion](https://docs.victoriametrics.com/victoriametrics/vmagent/#metric-metadata) and in-memory [storage](https://docs.victoriametrics.com/victoriametrics/single-server-victoriametrics/#metrics-metadata) of metrics metadata by default. Metadata ingestion can be disabled with `-enableMetadata=false`. See [#2974](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2974). ## [v1.136.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.136.0) diff --git a/docs/victoriametrics/vmagent.md b/docs/victoriametrics/vmagent.md index 5184d838fa..ce95cd12f8 100644 --- a/docs/victoriametrics/vmagent.md +++ b/docs/victoriametrics/vmagent.md @@ -658,12 +658,12 @@ e.g. it sets `scrape_series_added` metric to zero. See [these docs](#automatical ## Metric metadata -By default, `vmagent` ignores metric metadata exposed by scrape targets in [Prometheus exposition format](https://github.com/prometheus/docs/blob/main/docs/instrumenting/exposition_formats.md), received via [Prometheus remote write v1](https://prometheus.io/docs/specs/prw/remote_write_spec/) or [OpenTelemetry protocol](https://github.com/open-telemetry/opentelemetry-proto/blob/v1.7.0/opentelemetry/proto/metrics/v1/metrics.proto). Set `-enableMetadata=true` to enable metadata processing{{% available_from "v1.125.1" %}}. +`vmagent` accepts{{% available_from "#" %}} metric metadata exposed by scrape targets in [Prometheus exposition format](https://github.com/prometheus/docs/blob/main/docs/instrumenting/exposition_formats.md), received via [Prometheus remote write v1](https://prometheus.io/docs/specs/prw/remote_write_spec/) or [OpenTelemetry protocol](https://github.com/open-telemetry/opentelemetry-proto/blob/v1.7.0/opentelemetry/proto/metrics/v1/metrics.proto) by default. Set `-enableMetadata=false` to disable metadata processing{{% available_from "v1.125.1" %}}. During processing, metadata won't be dropped or modified by [relabeling](https://docs.victoriametrics.com/victoriametrics/relabeling/) or [streaming aggregation](https://docs.victoriametrics.com/victoriametrics/stream-aggregation/). When `-enableMultitenantHandlers` is enabled, vmagent adds tenant info to metadata received via the [multitenant endpoints](https://docs.victoriametrics.com/victoriametrics/vmagent/#multitenancy) (`/insert//`). However, if `vm_account_id` or `vm_project_id` labels are added directly to metrics before reaching vmagent, and vmagent writes to the [vminsert multitenant endpoints](https://docs.victoriametrics.com/victoriametrics/cluster-victoriametrics/#multitenancy-via-labels), the tenant info won't be attached and the metadata will be stored under the default tenant of VictoriaMetrics cluster. ->Enabling metadata requires extra memory, disk space, and network traffic. +> Metadata requires extra memory, disk space, and network traffic. ## Stream parsing mode diff --git a/lib/prommetadata/metadata.go b/lib/prommetadata/metadata.go index c6b5c65834..a488f492d3 100644 --- a/lib/prommetadata/metadata.go +++ b/lib/prommetadata/metadata.go @@ -2,7 +2,7 @@ package prommetadata import "flag" -var enableMetadata = flag.Bool("enableMetadata", false, "Whether to enable metadata processing for metrics scraped from targets, received via VictoriaMetrics remote write, Prometheus remote write v1 or OpenTelemetry protocol. "+ +var enableMetadata = flag.Bool("enableMetadata", true, "Whether to enable metadata processing for metrics scraped from targets, received via VictoriaMetrics remote write, Prometheus remote write v1 or OpenTelemetry protocol. "+ "See also remoteWrite.maxMetadataPerBlock") // IsEnabled reports whether metadata processing is enabled.