OpenTelemetry-Swift provides several instrumentation libraries that generate instrumentation for you when they’re installed and initialized.
SDKResourceExtension provides details about the device as a Resource.
DefaultResource.get() to generate an all-in-one resource object. This
resource can be added to a
OpenTelemetry.registerTracerProvider(traceProvider: TracerProviderBuilder() .with(resource: DefaultResource.get()) .build())
SDKResourceExtension provides attributes in a resource object with details
about the iOS device, OS details, and application details. It applies these
values to the appropriate
|fetched from |
Operating System Info
|predefined in |
|A combination of os name, version and build.|
This instrumentation creates spans for all network requests made with
NSURLSessions. It also injects distributed tracing headers in instrumented
NetworkStatus is a dependency of this package, which
provides network status attributes on network spans.
Note: The NSURLSession instrumentation relies on the global tracer provider in the OpenTelemetry object. Custom tracer providers must be configured and set as the global provider prior to this instrumentation.
Initialize the class with
to automatically capture all network calls.
This behavior can be modified or augmented by using the optional callbacks
shouldInstrument: ((URLRequest) -> (Bool)?)?
Filter which requests you want to instrument, all by default.
shouldRecordPayload: ((URLSession) -> (Bool)?)?
Implement if you want the session to record payload data, false by default.
shouldInjectTracingHeaders: ((URLRequest) -> (Bool)?)?
Allow filtering which requests you want to inject headers to follow the trace, true by default. You must also return true if you want to inject custom headers.
injectCustomHeaders: ((inout URLRequest, Span?) -> Void)?
Implement this callback to inject custom headers or modify the request in any other way.
nameSpan: ((URLRequest) -> (String)?)?
Modify the name for the given request instead of standard OpenTelemetry name.
createdRequest: ((URLRequest, Span) -> Void)?
Called after request is created, it allows to add extra information to the Span.
receivedResponse: ((URLResponse, DataOrFile?, Span) -> Void)?
Called after response is received, it allows to add extra information to the Span.
receivedError: ((Error, DataOrFile?, HTTPStatus, Span) -> Void)?
Called after an error is received, it allows to add extra information to the Span.
Below is an example of initialization.
URLSessionInstrumentationConfiguration’s construction can be passed the
parameters defined above to suit the needs of the application.
let sessionInstrumentation = URLSessionInstrumentation(configuration: URLSessionInstrumentationConfiguration())
NSURLSession instrumentation also provides additional attributes providing
details about the network state of the device at the time of network requests.
|The type of connection utilized by the device at the time of the request.|
|They type of cellular connection. Only populated if the connection type is |
|The cellular carrier name. Only populated for cellular connection types.|
|The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.|
|Mobile Country Code|
|Mobile network code|
This package creates
end calls when spans are
started or ended. It allows automatic integration of applications instrumented
with OpenTelemetry to show their spans in a profiling app like
also exports the
OSLog it uses for posting so the user can add extra signpost
events. This functionality is shown in
Simple Exporter example.
Just add SignpostIntegration as any other Span Processor (see the manual instrumentation) docs for details on configuring your providers: