Setelah menggunakan Alibaba Cloud Managed Service for OpenTelemetry untuk menginstrumentasi aplikasi dan melaporkan data jejak ke Managed Service for OpenTelemetry, aplikasi mulai dipantau. Anda dapat melihat data pemantauan seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara menggunakan Managed Service for OpenTelemetry untuk menginstrumentasi aplikasi Swift dan melaporkan data jejak.
Sebelum memulai
Kode contoh
Pada contoh ini, Managed Service for OpenTelemetry digunakan untuk melaporkan data jejak aplikasi baris perintah macOS yang ditulis dalam Swift. Metode yang digunakan juga berlaku untuk aplikasi iOS.
Unduh kode contoh dari opentelemetry-swift-demo.
Langkah 1: Buat aplikasi dan tambahkan dependensi
Pilih jenis aplikasi yang ingin dibuat. Sebagai contoh, pilih macOS > Alat Baris Perintah.

Di XCode, pilih , masukkan
https://github.com/open-telemetry/opentelemetry-swiftdi kotak pencarian, lalu pilih versi 1.4.1.CatatanUntuk informasi lebih lanjut tentang versi, kunjungi halaman opentelemetry-swift di GitHub.

Pilih paket yang diperlukan.
Gambar berikut menunjukkan paket yang digunakan dalam contoh ini.

Langkah 2: Inisialisasi OpenTelemetry
Buat ekspor untuk mengekspor data pemantauan.
Pilih salah satu metode berikut untuk melaporkan data jejak:
Metode 1: Laporkan data jejak menggunakan protokol gRPC
Ganti
<gRPC-endpoint>dan<gRPC-port>dengan titik akhir dan nomor port yang diperoleh di bagian "Sebelum Memulai". Dalam contoh ini,host: "http://tracing-analysis-dc-hz.aliyuncs.com", port:8090digunakan.Ganti
<your-token>dengan token otentikasi yang diperoleh di bagian "Sebelum Memulai".
let grpcChannel = ClientConnection( configuration: ClientConnection.Configuration.default( target: .hostAndPort("<gRPC-endpoint>", 8090), // Tentukan titik akhir yang tidak mengandung awalan http://. Dalam contoh ini, tracing-analysis-dc-hz.aliyuncs.com digunakan. eventLoopGroup: MultiThreadedEventLoopGroup(numberOfThreads: 1) ) ) let otlpGrpcConfiguration = OtlpConfiguration( timeout: OtlpConfiguration.DefaultTimeoutInterval, headers: [ ("Authentication","xxxxxx") ] ) let otlpGrpcTraceExporter = OtlpTraceExporter(channel: grpcChannel, config: otlpGrpcConfiguration)Metode 2: Laporkan data jejak menggunakan protokol HTTP
Ganti
<HTTP-endpoint>dengan titik akhir yang diperoleh di bagian "Sebelum Memulai". Dalam contoh ini,http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxxx@xxxx_xxxx@xxxx/api/otlp/tracesdigunakan.let url = URL(string: "<HTTP-endpoint>") let otlpHttpTraceExporter = OtlpHttpTraceExporter(endpoint: url!)Metode 3: Dapatkan data jejak di baris perintah
let consoleTraceExporter = StdoutExporter(isDebug: true)
Dapatkan tracer yang digunakan untuk membuat rentang.
Ganti
<your-service-name>dengan nama aplikasi yang datanya ingin dilaporkan, dan<your-host-name>dengan nama host.Ganti
<trace-exporter>dengan nilai berbeda berdasarkan metode yang digunakan untuk melaporkan data jejak di Langkah 1.Metode 1: Ganti
<trace-exporter>denganotlpGrpcTraceExporter.Metode 2: Ganti
<trace-exporter>denganotlpHttpTraceExporter.Metode 3: Ganti
<trace-exporter>denganconsoleTraceExporter.
// Tentukan nama aplikasi dan nama host. let resource = Resource(attributes: [ ResourceAttributes.serviceName.rawValue: AttributeValue.string("<your-service-name>"), ResourceAttributes.hostName.rawValue: AttributeValue.string("<your-host-name>") ]) // Konfigurasikan TracerProvider. OpenTelemetry.registerTracerProvider(tracerProvider: TracerProviderBuilder() .add(spanProcessor: BatchSpanProcessor(spanExporter: <trace-exporter>)) // Laporkan data ke Managed Service for OpenTelemetry. .with(resource: resource) .build()) // Dapatkan tracer yang digunakan untuk membuat rentang. let tracer = OpenTelemetry.instance.tracerProvider.get(instrumentationName: "instrumentation-library-name", instrumentationVersion: "1.0.0")
Langkah 3: Buat rentang untuk melacak data jejak
Buat rentang, konfigurasikan atribut dan acara untuk rentang tersebut, lalu dapatkan ID jejak dari rentang tersebut.
let span = tracer.spanBuilder(spanName: "rentang pertama").startSpan() // Konfigurasikan atribut. span.setAttribute(key: "http.method", value: "GET") span.setAttribute(key: "http.url", value: "www.aliyun.com") let attributes = [ "key": AttributeValue.string("value"), "result": AttributeValue.int(100) ] // kode Anda... // Konfigurasikan acara. span.addEvent(name: "perhitungan selesai", attributes: attributes) // Tampilkan ID jejak. print(span.context.traceId.hexString) // kode Anda... // Akhiri rentang saat ini. span.end()Buat rentang bersarang.
let parentSpan = tracer.spanBuilder(spanName: "rentang induk").startSpan() // kode Anda... let childSpan = tracer.spanBuilder(spanName: "rentang anak").setParent(parentSpan).startSpan() // kode Anda... childSpan.end() // kode Anda... parentSpan.end()Mulai aplikasi.
Di halaman Applications dari Konsol Managed Service for OpenTelemetry, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.
Langkah 4: Hubungkan aplikasi klien dan aplikasi server
Ubah format untuk melewati data jejak di header permintaan HTTP.
Protokol yang berbeda menggunakan header permintaan HTTP yang berbeda untuk melewati konteks jejak. Sebagai contoh, OpenTelemetry secara default menggunakan format W3C Trace Context dan mendukung format lainnya, sedangkan Zipkin menggunakan format B3 atau B3 Multi. Untuk informasi lebih lanjut, lihat Tentukan Format untuk Melewati Data Jejak.
Atur format untuk melewati data jejak untuk aplikasi klien berdasarkan protokol yang digunakan oleh aplikasi server. Dengan cara ini, aplikasi klien iOS dan aplikasi server dapat dihubungkan.
Jika aplikasi server menggunakan format W3C Trace Context dari OpenTelemetry, Anda tidak perlu menentukan parameter textPropagators dan baggagePropagator untuk aplikasi klien.
Jika aplikasi server menggunakan format B3 atau B3 Multi dari Zipkin, atur parameter textPropagators menjadi B3Propagator dan parameter baggagePropagator menjadi ZipkinBaggagePropagator untuk aplikasi klien.
// Tentukan format B3 untuk melewati data jejak. OpenTelemetry.registerPropagators(textPropagators: [B3Propagator()], baggagePropagator: ZipkinBaggagePropagator())Jika aplikasi server menggunakan protokol Jaeger, atur parameter textPropagators menjadi JaegerPropagator dan parameter baggagePropagator menjadi JaegerBaggagePropagator untuk aplikasi klien.
// Tentukan format Jaeger untuk melewati data jejak. OpenTelemetry.registerPropagators(textPropagators: [JaegerPropagator()], baggagePropagator: JaegerBaggagePropagator())Anda juga dapat menentukan beberapa format untuk melewati data jejak.
// Tentukan format W3C Trace Context, B3, dan Jaeger untuk melewati data jejak. OpenTelemetry.registerPropagators(textPropagators: [W3CTraceContextPropagator(), B3Propagator(), JaegerPropagator()], baggagePropagator: W3CBaggagePropagator())
Impor plug-in URLSessionInstrumentation.
URLSessionInstrumentation adalah plug-in instrumentasi otomatis yang disediakan oleh OpenTelemetry untuk kelas URLSession. Ini secara otomatis mencegat semua permintaan jaringan yang dikirim dari kelas URLSession dan membuat jejak.
import URLSessionInstrumentation ... let networkInstrumentation = URLSessionInstrumentation(configuration: URLSessionInstrumentationConfiguration())Gunakan kelas URLSession untuk mengirim permintaan guna mengakses aplikasi server.
let url = URL(string: "<Alamat Server>")! let request = URLRequest(url: url) let semaphore = DispatchSemaphore(value: 0) let task = URLSession.shared.dataTask(with: request) { data, _, _ in if let data = data { let string = String(decoding: data, as: UTF8.self) print(string) } semaphore.signal() } task.resume() semaphore.wait()Mulai aplikasi dan lihat jejak antara aplikasi klien dan aplikasi server di halaman Penjelajah Jejak.
Gambar berikut menunjukkan sebuah contoh. Dalam contoh ini,
HTTP GETadalah aplikasi iOS danzipkin-demo-serveradalah aplikasi server.
