Skip to content

[mdatagen] Underscores in anchor tag in metadata key semantic_convention: ref: url causes generation error #14583

@osullivandonal

Description

@osullivandonal

Component(s)

cmd/mdatagen

What happened?

Describe the bug

When using the optional key semantic_convention: in the metadata.yaml schema and running make generate, for example in otel-collector-contrib (this uses mdatagen), an error is thrown if there is an underscore in the anchor tag in the ref url.

Steps to reproduce

  • Using make generate in otel-collector-contrib`
  • Using this valid semantic conventions url:
https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/docs/system/system-metrics.md#metric-systemdiskio_time

Causes this error:

Error: failed loading /home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper/metadata.yaml: metric "system.disk.io_time": invalid semantic-conventions URL: want https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/*#metric-systemdiskiotime, got "https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/docs/system/system-metrics.md#metric-systemdiskio_time"
Error: failed loading /home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper/metadata.yaml: metric "system.disk.io_time": invalid semantic-conventions URL: want https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/*#metric-systemdiskiotime, got "https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/docs/system/system-metrics.md#metric-systemdiskio_time"
make[1]: *** [../../../../../Makefile.Common:264: mdatagen] Error 1
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper'
internal/scraper/diskscraper/doc.go:4: running "make": exit status 2

What did you expect to see?

We expect the generation to complete without any errors

What did you see instead?

An error occured:

Error: failed loading /home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper/metadata.yaml: metric "system.disk.io_time": invalid semantic-conventions URL: want https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/*#metric-systemdiskiotime, got "https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/docs/system/system-metrics.md#metric-systemdiskio_time"
Error: failed loading /home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper/metadata.yaml: metric "system.disk.io_time": invalid semantic-conventions URL: want https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/*#metric-systemdiskiotime, got "https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/docs/system/system-metrics.md#metric-systemdiskio_time"
make[1]: *** [../../../../../Makefile.Common:264: mdatagen] Error 1
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper'
internal/scraper/diskscraper/doc.go:4: running "make": exit status 2

Fix

This should be a simple fix, in cmd/mdatagen/internal/metrics.go we have:

var reNonAlnum = regexp.MustCompile(`[^a-z0-9]+`)

To fix the issue we just have to add an underscore to the regexp:

var reNonAlnum = regexp.MustCompile(`[^a-z0-9_]+`)

Collector version

a810b2d6fd4bc738e4570243409dce3fb148a5b7

Environment information

Environment

OS: (Operating System: Arch Linux, Kernel: Linux 6.17.9-arch1-1)
Compiler(go version go1.25.5 X:nodwarf5 linux/amd64)

OpenTelemetry Collector configuration

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  hostmetrics:
    collection_interval: 5s
    scrapers:
      cpu:
      memory:
        metrics:
          system.memory.limit:
            enabled: true
      disk:

processors:
  batch:
exporters:
  debug:
    verbosity: detailed
  otlp/jaeger:
    endpoint: localhost:14317
    tls:
      insecure: true
  prometheus:
    endpoint: 0.0.0.0:8889
service:
  pipelines:
    metrics:
      receivers: [otlp, hostmetrics]
      processors: [batch]
      exporters: [debug]

Log output

…/receiver/hostmetricsreceiver main  ❯ make generate
cd /home/dos/Documents/opentelemetry-collector-contrib/internal/tools && GOOS="" GOARCH="" go build -o /home/dos/Documents/opentelemetry-collector-contrib/.tools/genqlient -trimpath github.com/Khan/genqlient
PATH="/home/dos/Documents/opentelemetry-collector-contrib/.tools:$PATH" go generate ./...
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/cpuscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/cpuscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper'
Error: failed loading /home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper/metadata.yaml: metric "system.disk.io_time": invalid semantic-conventions URL: want https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/*#metric-systemdiskiotime, got "https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/docs/system/system-metrics.md#metric-systemdiskio_time"
Error: failed loading /home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper/metadata.yaml: metric "system.disk.io_time": invalid semantic-conventions URL: want https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/*#metric-systemdiskiotime, got "https://github.com/open-telemetry/semantic-conventions/blob/v1.38.0/docs/system/system-metrics.md#metric-systemdiskio_time"
make[1]: *** [../../../../../Makefile.Common:264: mdatagen] Error 1
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/diskscraper'
internal/scraper/diskscraper/doc.go:4: running "make": exit status 2
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/loadscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/loadscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/memoryscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/memoryscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/networkscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/networkscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/nfsscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/nfsscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/pagingscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/pagingscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processesscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processesscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/processscraper'
make[1]: Entering directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/systemscraper'
make[1]: Leaving directory '/home/dos/Documents/opentelemetry-collector-contrib/receiver/hostmetricsreceiver/internal/scraper/systemscraper'
make: *** [../../Makefile.Common:282: generate] Error 1

Additional context

No response

Tip

React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions