opentelemetry.sdk.resources package
This package implements OpenTelemetry Resources:
A Resource is an immutable representation of the entity producing telemetry. For example, a process producing telemetry that is running in a container on Kubernetes has a Pod name, it is in a namespace and possibly is part of a Deployment which also has a name. All three of these attributes can be included in the Resource.
Resource objects are created with Resource.create, which accepts attributes
(key-values). Resources should NOT be created via constructor except by ResourceDetector
instances which can’t use Resource.create to avoid infinite loops. Working with
Resource objects should only be done via the Resource API methods. Resource
attributes can also be passed at process invocation in the
OTEL_RESOURCE_ATTRIBUTES environment variable. You should register
your resource with the opentelemetry.sdk.trace.TracerProvider by passing
them into their constructors. The Resource passed to a provider is available
to the exporter, which can send on this information as it sees fit.
trace.set_tracer_provider(
TracerProvider(
resource=Resource.create({
"service.name": "shoppingcart",
"service.instance.id": "instance-12",
}),
),
)
print(trace.get_tracer_provider().resource.attributes)
{'telemetry.sdk.language': 'python',
'telemetry.sdk.name': 'opentelemetry',
'telemetry.sdk.version': '0.13.dev0',
'service.name': 'shoppingcart',
'service.instance.id': 'instance-12'}
Note that the OpenTelemetry project documents certain “standard attributes”
that have prescribed semantic meanings, for example service.name in the
above example.
- class opentelemetry.sdk.resources.Resource(attributes, schema_url=None)[source]
Bases:
objectA Resource is an immutable representation of the entity producing telemetry as Attributes.
- static create(attributes=None, schema_url=None)[source]
Creates a new
Resourcefrom attributes.ResourceDetectorinstances should not call this method.- Parameters:
- Return type:
- Returns:
The newly-created Resource.
- property attributes: Mapping[str, str | bool | int | float | Sequence[str] | Sequence[bool] | Sequence[int] | Sequence[float]]
- merge(other)[source]
Merges this resource and an updating resource into a new
Resource.If a key exists on both the old and updating resource, the value of the updating resource will override the old resource value.
The updating resource’s
schema_urlwill be used only if the oldschema_urlis empty. Attempting to merge two resources with different, non-empty values forschema_urlwill result in an error and return the old resource.
- class opentelemetry.sdk.resources.ResourceDetector(raise_on_error=False)[source]
Bases:
ABC- abstractmethod detect()[source]
Don’t call
Resource.createhere to avoid an infinite loop, instead instantiateResourcedirectly- Return type:
- class opentelemetry.sdk.resources.OTELResourceDetector(raise_on_error=False)[source]
Bases:
ResourceDetector- detect()[source]
Don’t call
Resource.createhere to avoid an infinite loop, instead instantiateResourcedirectly- Return type:
- class opentelemetry.sdk.resources.ProcessResourceDetector(raise_on_error=False)[source]
Bases:
ResourceDetector- detect()[source]
Don’t call
Resource.createhere to avoid an infinite loop, instead instantiateResourcedirectly- Return type:
- class opentelemetry.sdk.resources.OsResourceDetector(raise_on_error=False)[source]
Bases:
ResourceDetectorDetect os resources based on Operating System conventions.
- detect()[source]
Returns a resource with with
os.typeandos.version.- Return type:
Python’s platform library
To grab this information, Python’s
platformdoes not return what a user might expect it to. Below is a breakdown of its return values in different operating systems.Linux>>> platform.system() 'Linux' >>> platform.release() '6.5.0-35-generic' >>> platform.version() '#35~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue May 7 09:00:52 UTC 2'
MacOS>>> platform.system() 'Darwin' >>> platform.release() '23.0.0' >>> platform.version() 'Darwin Kernel Version 23.0.0: Fri Sep 15 14:42:57 PDT 2023; root:xnu-10002.1.13~1/RELEASE_ARM64_T8112'
Windows>>> platform.system() 'Windows' >>> platform.release() '2022Server' >>> platform.version() '10.0.20348'
FreeBSD>>> platform.system() 'FreeBSD' >>> platform.release() '14.1-RELEASE' >>> platform.version() 'FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC'
Solaris>>> platform.system() 'SunOS' >>> platform.release() '5.11' >>> platform.version() '11.4.0.15.0'