Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prometheus metrics tags grow unbounded over time #35710

Closed
kendalharland opened this issue Oct 8, 2024 · 6 comments
Closed

Prometheus metrics tags grow unbounded over time #35710

kendalharland opened this issue Oct 8, 2024 · 6 comments
Assignees
Labels
exporter/prometheus question Further information is requested Stale

Comments

@kendalharland
Copy link

kendalharland commented Oct 8, 2024

Component(s)

receiver/hostmetrics

What happened?

Description

The longer my opentelemetry collector instance runs, the longer each metric's list of tags becomes. Each metric has a name that gets continually prepended with "exported_". For example, if you use the config I've attached with this docker compose YAML:

  otel-collector:
    image: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.111.0
    volumes:
      - ./otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml
      - /dev:/hostfs/dev
      - /mnt:/hostfs/mnt
      - /proc:/hostfs/proc
    ports:
      - 8888:8888 # Prometheus metrics exposed by the Collector
      - 8889:8889 # Prometheus exporter metrics
      - 13133:13133 # health_check extension
    labels:
      com.datadoghq.ad.check_names: '["openmetrics"]'
      com.datadoghq.ad.init_configs: '[{}]'
      com.datadoghq.ad.instances: |
        [
          {
            "openmetrics_endpoint": "http://%%host%%:8889/metrics",
            "namespace": "otel",
            "metrics": [
              {"system_filesystem_utilization_ratio": "system.filesystem.utilization_ratio"}
            ]
          }
        ]

And then query localhost:8889 you'll see metrics that match the logs I've attached.

Expected Result

Metrics are emitted without tags that grow infinitely in size.

Collector version

ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.111.0

Environment information

Environment

OS: Ubuntu 24.04

OpenTelemetry Collector configuration

receivers:
  hostmetrics:
    root_path: /hostfs
    collection_interval: 10s
    scrapers:
      disk:
        include:
          devices: [ "/dev/sda1" ]
          match_type: strict
      filesystem:
        include_devices:
          devices: [ "/dev/sda1" ]
          match_type: strict
        metrics:
          system.filesystem.utilization:
            enabled: true

  prometheus:
    config:
      scrape_configs:
        - job_name: 'otel-collector'
          scrape_interval: 10s
          static_configs:
            - targets: ['0.0.0.0:8889']

processors:
  batch:

exporters:
  prometheus:
    endpoint: "0.0.0.0:8889"
    enable_open_metrics: true

service:
  telemetry:
    logs:
      level: DEBUG
  pipelines:
    metrics:
      receivers: [prometheus, hostmetrics]
      processors: [batch]
      exporters: [prometheus]

Log output

Example output metric returned from the HTTP endpoint (full output is too long):

up{exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_exported_job="otel-collector",exported_exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_exported_job="otel-collector",exported_exported_exported_instance="0.0.0.0:8889",exported_exported_exported_job="otel-collector",exported_exported_instance="0.0.0.0:8889",exported_exported_job="otel-collector",exported_instance="0.0.0.0:8889",exported_job="otel-collector",instance="0.0.0.0:8889",job="otel-collector"} 1

Additional context

This may be related to another issue I've observed where the container consumes disk storage space unbounded. The dip in this graph is what happened on my server immediately after stopping the container. The value the disk utilization dropped to is the steady state from before the container was started.

image

@kendalharland kendalharland added bug Something isn't working needs triage New item requiring triage labels Oct 8, 2024
Copy link
Contributor

github-actions bot commented Oct 8, 2024

Pinging code owners:

See Adding Labels via Comments if you do not have permissions to add labels yourself.

@kendalharland kendalharland changed the title Prometheus metrics recieve infinitely long number of tags Prometheus metrics tags grow unbounded over time Oct 9, 2024
@kendalharland
Copy link
Author

Pinging code owners:

See Adding Labels via Comments if you do not have permissions to add labels yourself.

I believe this is actually an issue with the hostmetrics receiver and updated the issue description

@dashpole
Copy link
Contributor

dashpole commented Oct 9, 2024

It looks like you have created an infinite telemetry loop. The prometheus exporter serves metrics on the endpoint, and then the Prometheus receiver scrapes the metrics and forwards them to the prometheus exporter through the metrics pipeline you've configured. I would recommend removing the prometheus receiver from your setup.

@dashpole dashpole added question Further information is requested and removed bug Something isn't working needs triage New item requiring triage labels Oct 9, 2024
@dashpole dashpole self-assigned this Oct 9, 2024
@kendalharland
Copy link
Author

Thanks @dashpole, seems like I've misunderstood how to configure this pipeline. I'll try that and update!

Copy link
Contributor

This issue has been inactive for 60 days. It will be closed in 60 days if there is no activity. To ping code owners by adding a component label, see Adding Labels via Comments, or if you are unsure of which component this issue relates to, please ping @open-telemetry/collector-contrib-triagers. If this issue is still relevant, please ping the code owners or leave a comment explaining why it is still relevant. Otherwise, please close it.

Pinging code owners:

See Adding Labels via Comments if you do not have permissions to add labels yourself.

@github-actions github-actions bot added the Stale label Dec 17, 2024
@dashpole
Copy link
Contributor

Feel free to reopen if you have further questions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
exporter/prometheus question Further information is requested Stale
Projects
None yet
Development

No branches or pull requests

2 participants