-
Notifications
You must be signed in to change notification settings - Fork 739
Description
Describe your environment
- opentelemetry-exporter-prometheus==1.12.0rc1
- opentelemetry-sdk==1.19.0
- opentelemetry-api==1.19.0
- Python 3.11.0
Steps to reproduce
from opentelemetry import metrics
test_counter = metrics.get_meter("module").create_counter('test_counter', description='counter used for testing')
test_counter.add(1, {'location': 'here', 'source': 'external'})
test_counter.add(1, {'source': 'internal', 'reason': 'error'})
What is the expected behavior?
I expect labels to be the ones specified. But it seems like it only looks at the last call to counter.add
to figure out label names, and then just looks at the position of the labels. I also expect these the be the same metric. (no duplicate HELP, TYPE). This also has other weird behaviour when the dict size is different.
The otlp api for counter says this: Users can provide attributes to associate with the increment value, but it is up to their discretion. Therefore, this API MUST be structured to accept a variable number of attributes, including none.
This suggest to me that it should be possible to set only certain labels (as far as I understand prometheus also supports missing labels). If this is not the case it should probably be made possible to define label names when creating a counter so this can at least by static type checked. This would also be helpful if missing labels are supported to prevent typos when specifying labels, but that should be probably a separate issue?
What is the actual behavior?
# HELP test_counter_total counter used for testing
# TYPE test_counter_total counter
test_counter_total{reason="external",source="here"} 1.0
# HELP test_counter_total counter used for testing
# TYPE test_counter_total counter
test_counter_total{reason="error",source="internal"} 1.0