I tried to use OpenTelemetry Swift for the first time and I want tosend metrics from my SwiftUI app to an OpenTelemetry Collector and then Promethius/Grafana.
I use Docker Compose for up my different services: OpenTelemetry Collector/Prometheus/Grafana: I'm 100% sure this part is working.
The problem is my code, I follow the different examples from the official documentation but metrics looks like not really stable. Here's my code actually:
import UIKit
import Foundation
import OpenTelemetryApi
import OpenTelemetrySdk
import OpenTelemetryProtocolExporterGrpc
import GRPC
import NIO
@MainActor
public class BatteryManager {
private var gauge: DoubleGauge?
public init() {}
public func basicConfiguration(host: String, port: Int) {
let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let exporterChannel = ClientConnection.insecure(group: group)
.connect(host: host, port: port)
let meterProvider = StableMeterProviderBuilder()
.registerView(
selector: InstrumentSelector.builder().setInstrument(name: "Gauge").setMeter(version: "1").build(),
view: StableView.builder().withName(name: "Niveau de batterie de l'iPhone").withDescription(description: "On récupère le niveau de la batterie afin de suivre son évolution").build()
)
.registerMetricReader(
reader: StablePeriodicMetricReaderBuilder(exporter: StableOtlpMetricExporter(channel: exporterChannel)).setInterval(timeInterval: 1000).build()
)
.build()
OpenTelemetry.registerStableMeterProvider(meterProvider: meterProvider)
let meter = meterProvider.meterBuilder(name: "battery_monitoring").build()
gauge = meter.gaugeBuilder(name: "battery_level_percentage").build()
print("