I am creating an application using .Net with OpenTelemetry for collecting metrics, traces. .Net application uses Otlp exporter. Also, I have configured a collector that has Otlp as a receiver and Prometheus as exporter for metrics.
I setup ServiceName (ex."OpenTelemetrySample") and set some attributes (ex. attributeA,attributeB) in my .Net application
services.AddOpenTelemetryMetrics(builder =>{
builder.SetResourceBuilder(ResourceBuilder.CreateDefault()
.AddService("OpenTelemetrySample")
.AddAttributes(new KeyValuePair<string, object>[]
{new("attributeA", "AAA"), new("attributeB", "BBB")}));
builder.AddMeter("opentelemetry-meter");
builder.AddOtlpExporter(otlpOptions =>
{otlpOptions.Endpoint = new Uri("http://localhost:4317");
});
});
Then I am using some Counter in the code:
static Meter myMeter = new("opentelemetry-meter", "1.0.0");
static Counter<int> myCounter = myMeter.CreateCounter<int>(name: $"test-counter",
unit: "Counter",
description: "The number of something");
...
myCounter.Add(2, new("custom.tagA", "tagValueA"), new("custom.tagB", "tagValueB"));
The result that I see in PrometeusUI is: here I expected to see somewhere service.name and attributes of resources, but can not find them in Prometheus UI.
For example, the same process, when I export metrics through console of collector shows mentioned attributes in section Resource labels
Console output:
collector | 2022-02-15T13:01:40.968Z INFO loggingexporter/logging_exporter.go:56 MetricsExporter {"#metrics": 1}
collector | 2022-02-15T13:01:40.968Z DEBUG loggingexporter/logging_exporter.go:66 ResourceMetrics #0
collector | Resource labels:
collector | -> attributeA: STRING(AAA)
collector | -> attributeB: STRING(BBB)
collector | -> service.name: STRING(OpenTelemetrySample)
collector | -> service.instance.id: STRING(0f08e609-66e0-49a5-ad6d-44c8e3520bad)
collector | InstrumentationLibraryMetrics #0
collector | InstrumentationLibrary opentelemetry-meter 1.0.0
collector | Metric #0
collector | Descriptor:
collector | -> Name: test-counter
collector | -> Description: The number of something
collector | -> Unit: Counter
collector | -> DataType: Sum
collector | -> IsMonotonic: true
collector | -> AggregationTemporality: AGGREGATION_TEMPORALITY_CUMULATIVE
collector | NumberDataPoints #0
collector | Data point attributes:
collector | -> custom.tagA: STRING(tagValueA)
collector | -> custom.tagB: STRING(tagValueB)
collector | StartTimestamp: 2022-02-15 12:26:55.3992028 +0000 UTC
collector | Timestamp: 2022-02-15 13:01:40.5841487 +0000 UTC
collector | Value: 2
otel-collector-config.yaml
receivers:
otlp:
protocols:
grpc:
exporters:
logging:
loglevel: debug
jaeger:
endpoint: jaeger:14250
insecure: true
prometheus:
endpoint: "0.0.0.0:8889"
extensions:
health_check:
pprof:
zpages:
processors:
batch:
service:
extensions: [health_check,pprof,zpages]
pipelines:
traces:
receivers: [otlp]
exporters: [logging, jaeger]
processors: [batch]
metrics:
receivers: [otlp]
exporters: [logging, prometheus]
processors: [batch]
logs:
receivers: [otlp]
exporters: [logging]
processors: [batch]
prometheus.yaml
scrape_configs:
- job_name: 'otel-collector'
scrape_interval: 5s
static_configs:
- targets: ['collector:8889']
Looking for any idea how to find or export correctly resource labels for metrics correctly, thank you
The resource attributes to metrics label conversion is disabled by default. Please update the otel config to following to see the resource attribute is prom UI.
receivers:
otlp:
protocols:
grpc:
exporters:
logging:
loglevel: debug
jaeger:
endpoint: jaeger:14250
insecure: true
prometheus:
endpoint: "0.0.0.0:8889"
resource_to_telemetry_conversion:
enabled: true
extensions:
health_check:
pprof:
zpages:
processors:
batch:
service:
extensions: [health_check,pprof,zpages]
pipelines:
traces:
receivers: [otlp]
exporters: [logging, jaeger]
processors: [batch]
metrics:
receivers: [otlp]
exporters: [logging, prometheus]
processors: [batch]
logs:
receivers: [otlp]
exporters: [logging]
processors: [batch]