Skip to content

[exporter/clickhouse] Nil pointer exception on Metrics without service.name Resource Attributes #37030

Closed
@Fiery-Fenix

Description

@Fiery-Fenix

Component(s)

exporter/clickhouse

What happened?

Description

This bug is a regression after #33634
In case of not set service.name Resource Attribute for Metric clickhouse exporter will throw next panic:

opentelemetry-collector panic: runtime error: invalid memory address or nil pointer dereference
opentelemetry-collector [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xa78bdc]
opentelemetry-collector 
opentelemetry-collector goroutine 46 [running]:
opentelemetry-collector go.opentelemetry.io/collector/pdata/pcommon.Value.Type(...)
opentelemetry-collector     go.opentelemetry.io/collector/[email protected]/pcommon/value.go:183
opentelemetry-collector go.opentelemetry.io/collector/pdata/pcommon.Value.AsString({0x0?, 0xc0006e0fa0?})
opentelemetry-collector     go.opentelemetry.io/collector/[email protected]/pcommon/value.go:370 +0x1c
opentelemetry-collector github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.(*gaugeMetrics).insert.func1(0x0?)
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/gauge_metrics.go:125 +0x367
opentelemetry-collector github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.doWithTx({0x6eac320?, 0xc0007bfce0?}, 0x0?, 0xc000b07f40)
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/metrics_model.go:210 +0xd3
opentelemetry-collector github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.(*gaugeMetrics).insert(0xc00060e0f0, {0x6eac320, 0xc0007bfce0}, 0xc0010d6750)
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/gauge_metrics.go:101 +0xd8
opentelemetry-collector github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.InsertMetrics.func1({0x6e5d6b0?, 0xc00060e0f0?}, 0xc0006e0fb0)
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/metrics_model.go:100 +0x43
opentelemetry-collector created by github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.InsertMetrics in goroutine 21
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/metrics_model.go:99 +0xcc

This panic happens due to unsafe usage of pcommon.Map.Get() in next line:
https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/clickhouseexporter/internal/gauge_metrics.go#L112
While documentation explicitly states that "Calling any functions on the returned invalid instance may cause a panic.". This panic happens on line https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/clickhouseexporter/internal/gauge_metrics.go#L125, where in case of absent service.name in Map we are trying to call <invalid instance>.AsString()

The bug is valid for all types of Metrics and also Traces, Logs are unaffected because they are using correct value check for some reason

Steps to Reproduce

Just try to export a Metric without service.name attribute using clickhouse exporter

Expected Result

No panic

Actual Result

Panic

Collector version

0.116.0

Environment information

No response

OpenTelemetry Collector configuration

No response

Log output

opentelemetry-collector panic: runtime error: invalid memory address or nil pointer dereference
opentelemetry-collector [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xa78bdc]
opentelemetry-collector 
opentelemetry-collector goroutine 46 [running]:
opentelemetry-collector go.opentelemetry.io/collector/pdata/pcommon.Value.Type(...)
opentelemetry-collector     go.opentelemetry.io/collector/[email protected]/pcommon/value.go:183
opentelemetry-collector go.opentelemetry.io/collector/pdata/pcommon.Value.AsString({0x0?, 0xc0006e0fa0?})
opentelemetry-collector     go.opentelemetry.io/collector/[email protected]/pcommon/value.go:370 +0x1c
opentelemetry-collector github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.(*gaugeMetrics).insert.func1(0x0?)
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/gauge_metrics.go:125 +0x367
opentelemetry-collector github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.doWithTx({0x6eac320?, 0xc0007bfce0?}, 0x0?, 0xc000b07f40)
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/metrics_model.go:210 +0xd3
opentelemetry-collector github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.(*gaugeMetrics).insert(0xc00060e0f0, {0x6eac320, 0xc0007bfce0}, 0xc0010d6750)
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/gauge_metrics.go:101 +0xd8
opentelemetry-collector github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.InsertMetrics.func1({0x6e5d6b0?, 0xc00060e0f0?}, 0xc0006e0fb0)
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/metrics_model.go:100 +0x43
opentelemetry-collector created by github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal.InsertMetrics in goroutine 21
opentelemetry-collector     github.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/internal/metrics_model.go:99 +0xcc

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions