in Sources/apm-agent-ios/OpenTelemetryInitializer.swift [54:160]
func initialize(_ configuration: AgentConfigManager) -> LogRecordExporter {
var traceSampleFilter: [SignalFilter<ReadableSpan>] = [
SignalFilter<ReadableSpan>({ [self] _ in
self.sessionSampler.shouldSample
})
]
var logSampleFliter: [SignalFilter<ReadableLogRecord>] = [
SignalFilter<ReadableLogRecord>({ [self] _ in
self.sessionSampler.shouldSample
})
]
var metricSampleFilter: [SignalFilter<Metric>] = [
SignalFilter<Metric>({ [self] _ in
self.sessionSampler.shouldSample
})
]
traceSampleFilter.append(contentsOf: configuration.agent.spanFilters)
logSampleFliter.append(contentsOf: configuration.agent.logFilters)
metricSampleFilter.append(contentsOf: configuration.agent.metricFilters)
let otlpConfiguration = OtlpConfiguration(
timeout: OtlpConfiguration.DefaultTimeoutInterval,
headers: OpenTelemetryHelper.generateExporterHeaders(configuration.agent.auth))
let channel = OpenTelemetryHelper.getChannel(with: configuration.agent, group: group)
let resources = AgentResource.get().merging(other: AgentEnvResource.get())
let metricExporter = {
let defaultExporter = OtlpMetricExporter(
channel: channel, config: otlpConfiguration, logger: Logger(label: Self.logLabel))
do {
if let path = Self.createPersistenceFolder() {
return try PersistenceMetricExporterDecorator(
metricExporter: defaultExporter, storageURL: path, exportCondition: { true },
performancePreset: configuration.instrumentation.storageConfiguration) as MetricExporter
}
} catch {}
return defaultExporter as MetricExporter
}()
let traceExporter = {
let defaultExporter = OtlpTraceExporter(
channel: channel, config: otlpConfiguration, logger: Logger(label: Self.logLabel))
do {
if let path = Self.createPersistenceFolder() {
return try PersistenceSpanExporterDecorator(
spanExporter: OtlpTraceExporter(
channel: channel, config: otlpConfiguration, logger: Logger(label: Self.logLabel)),
storageURL: path, exportCondition: { true },
performancePreset: configuration.instrumentation.storageConfiguration) as SpanExporter
}
} catch {}
return defaultExporter as SpanExporter
}()
let logExporter = {
let defaultExporter = OtlpLogExporter(
channel: channel, config: otlpConfiguration, logger: Logger(label: Self.logLabel))
do {
if let path = Self.createPersistenceFolder() {
return try PersistenceLogExporterDecorator(
logRecordExporter: OtlpLogExporter(
channel: channel, config: otlpConfiguration, logger: Logger(label: Self.logLabel)),
storageURL: path, exportCondition: { true },
performancePreset: configuration.instrumentation.storageConfiguration) as LogRecordExporter
}
} catch {}
return defaultExporter as LogRecordExporter
}()
// initialize meter provider
OpenTelemetry.registerMeterProvider(
meterProvider: MeterProviderBuilder()
.with(processor: ElasticMetricProcessor(metricSampleFilter))
.with(resource: resources)
.with(exporter: metricExporter)
.build())
// initialize trace provider
OpenTelemetry.registerTracerProvider(
tracerProvider: TracerProviderBuilder()
.add(
spanProcessor: ElasticSpanProcessor(
spanExporter: traceExporter, traceSampleFilter)
)
.with(sampler: sessionSampler as Sampler)
.with(resource: resources)
.with(clock: NTPClock())
.build())
OpenTelemetry.registerLoggerProvider(
loggerProvider: LoggerProviderBuilder()
.with(clock: NTPClock())
.with(resource: resources)
.with(processors: [
ElasticLogRecordProcessor(
logRecordExporter: logExporter,
logSampleFliter)
])
.build())
return logExporter
}