For the complete documentation index, see llms.txt. This page is also available as Markdown.

Scraping Metrics in Kubernetes

Automatically scrape metrics from pods and other services

Scraping Pods using Prometheus Annotations

groundcover supports standard Prometheus annotations instructing scrapers to periodically fetch metrics from pods.

Once enabled groundcover will automatically discover every pod with those annotations and periodically scrape the metrics path specified.

Annotating Your Pods

Add the following annotations to your Kubernetes pods exposing Prometheus metrics

annotations:
  prometheus.io/scrape: "true"
  prometheus.io/port: "<port>"
  prometheus.io/path: "<metrics-path>" # Optional, defaults to /metrics

Scraping from the groundcover Sensor

In this configuration, each Sensor scrapes metrics locally from its own node. This reduces overall load and minimizes cross-availability-zone traffic.

agent:
  sensor:
    receivers:
      metricsscraper: 
        enabled: true
custom-metrics:
  config:
    scrape_configs: []

Additional Sensor Scrape Jobs

For targets that don't carry standard Prometheus annotations — or to scrape pods that the default job filters out — you can append additional scrape jobs to the sensor's metrics scraper using extraScrapeConfigs.

Each entry is an independent scrape job rendered as a sibling of the built-in kubernetes-pods job, with its own relabel pipeline. The default job's drop rules do not apply to your custom jobs.

Like the built-in sensor scrape, role: pod discovery is automatically scoped to the local sensor's node, so each sensor scrapes only the pods on its own node — no cross-availability-zone traffic and no duplicate metrics.

When to use this instead of custom-metrics.extraScrapeConfigs

agent.sensor.receivers.metricsscraper.extraScrapeConfigs

custom-metrics.extraScrapeConfigs

Runs on

Sensor DaemonSet (per-node)

A separate vmagent Deployment (cluster-wide)

Discovery

Local node only (for role: pod)

Cluster-wide

Extra deployment

None — reuses the sensor

Adds a vmagent pod

Use case

Per-node pod targets

External targets, full-cluster discovery, non-pod roles

Scraping from the sensors while keeping extraScrapeConfigs on the custom-metrics agent

Below is only relevant for setups where custom-metrics is used with additional scrape jobs.

Custom Scrape Relabel Configs

groundcover exposes two configuration options to customize how targets and metrics are handled during the Prometheus scrape pipeline.

Understanding the Two Stages

Prometheus scraping has two distinct relabeling stages, and groundcover exposes both:

Stage
Helm Value
When It Runs
What It Operates On

Target relabeling

customRelabelConfigs

Before the scrape

Service discovery metadata (__meta_* labels)

Metric relabeling

customMetricRelabelConfigs

After the scrape

The actual scraped metric samples

customRelabelConfigs (Pre-Scrape)

Use customRelabelConfigs to control which targets are scraped. These rules are appended to the default relabel_configs of the built-in kubernetes-pods scrape job.

At this stage, you have access to Kubernetes service discovery labels such as:

  • __meta_kubernetes_pod_annotation_*

  • __meta_kubernetes_pod_label_*

  • __meta_kubernetes_namespace

  • __meta_kubernetes_pod_name

  • __meta_kubernetes_pod_node_name

Common Use Cases

Only scrape pods with a specific label:

Drop targets from a specific namespace:

Add a custom label from a pod annotation:

customMetricRelabelConfigs (Post-Scrape)

Use customMetricRelabelConfigs to filter or modify metrics after they have been scraped. These rules create a metric_relabel_configs block on the built-in kubernetes-pods scrape job.

At this stage, you have access to the actual metric labels, including:

  • __name__ (the metric name)

  • Any labels present on the scraped metrics (e.g., namespace, pod, container)

Common Use Cases

Drop all metrics matching a prefix (e.g., high-cardinality envoy metrics):

Keep only specific metrics:

Drop metrics from a specific namespace:

Combining Both Stages

You can use both options together. For example, to only scrape pods with a specific label and drop noisy metrics from the results:

For more details on Prometheus relabeling actions and syntax, see the Prometheus relabel_config documentation.

Scraping Prometheus CRDs

groundcover supports scraping Prometheus metrics based on CRDs like PodMonitor and ServiceMonitor. This is achieved using the VictoriaMetrics Operator.

Enable VictoriaMetrics Operator

Deploy the victoria-metrics-operator before enabling the built-in vmagent.

Step 1 - Enable only the operator:

Step 2 - Enable builtinVMAgent with a second deployment:

ArgoCD Integration

If deploying monitoring CRDs via ArgoCD, add this override to prevent sync conflicts:

This instructs the operator to add ArgoCD ignore annotations for Prometheus CRDs.

Deploy Monitoring CRDs

The operator automatically discovers and scrapes any deployed Prometheus CRDs (ServiceMonitor, PodMonitor, PrometheusRule, Probe).

Example - PodMonitor

Create my-test-podmonitor.yaml:

Apply it:

The vmagent will automatically reload and begin scraping the new target. Metrics should appear in groundcover’s Grafana dashboard soon after.

VictoriaMetrics Operator also supports its own CRDs; details are available here.

Setting up Additional Scrape Jobs

groundcover supports setting up additional Prometheus metric scrapingvia a built in vmagent component (VictoriaMetrics). vmagent supports standard Prometheus scrape job configs.

The jobs are defined as an array under the custom-metrics section of the helm chart.

Example - Scraping cadvisor metrics

By default, only key metrics are collected to limit metric cardinality. Edit the regex to include additional metrics as needed

Example - Scraping Full KSM Metrics

By default, groundcover exports a curated set of kube-state-metrics (KSM) metrics that power native dashboards and screens. These metrics are prefixed with groundcover_ to differentiate them from other KSM deployments.

To collect the complete set of kube-state-metrics (KSM) metrics in groundcover, follow these steps:

  1. Enable all KSM collectors in the ksm deployment.

  2. Enable custom metrics scraping.

  3. Add a scrape job for the KSM metrics.

Metrics Cardinality Limits

groundcover limits the cardinality of the metrics collected from custom jobs.

Defaults:

To raise these limits:

Resource Configuration

Defaults:

Common Questions

How often are my metrics scraped?

Metrics are automatically scraped every 10 seconds unless explicitly specified in the scrape job.

Where can I find scraped metrics?

All metrics in the platform can be found in the metrics exploration page: https://app.groundcover.com/explore/data-explorer

Last updated