Sebelum dapat melihat data jejak aplikasi Anda, Anda harus menggunakan klien untuk melaporkan data jejak ke Managed Service for OpenTelemetry. Topik ini menjelaskan cara menggunakan OpenTelemetry SDK untuk Ruby dalam melaporkan data jejak aplikasi Ruby.
Prasyarat
Informasi latar belakang
OpenTelemetry mendukung versi Ruby berikut: MRI Ruby 3.0 dan yang lebih baru, JRuby 9.3.2.0 dan yang lebih baru, serta TruffleRuby 22.1 dan yang lebih baru.
OpenTelemetry SDK untuk Ruby mendukung instrumentasi manual dan semi-otomatis. Instrumentasi semi-otomatis berarti Anda tidak perlu membuat rentang secara manual, tetapi Anda harus menambahkan file konfigurasi. Untuk informasi lebih lanjut tentang kerangka kerja yang didukung oleh instrumentasi semi-otomatis, lihat Dokumentasi Resmi OpenTelemetry.
Kode contoh
Unduh kode contoh dari ruby-opentelemetry-demo.
Metode 1: Gunakan protokol HTTP untuk melaporkan data
Instal dependensi OpenTelemetry berikut yang diperlukan untuk instrumentasi manual:
gem install opentelemetry-api gem install opentelemetry-sdk gem install opentelemetry-exporter-otlpInisialisasi OpenTelemetry.
Tambahkan komponen yang digunakan untuk mengekspor data pemantauan, dan ganti
<endpoint>dengan titik akhir yang Anda peroleh.require 'opentelemetry/sdk' require 'opentelemetry-exporter-otlp' OpenTelemetry::SDK.configure do |c| c.add_span_processor( OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new( OpenTelemetry::Exporter::OTLP::Exporter.new( endpoint: '<endpoint>' # Titik akhir OpenTelemetry yang dapat diakses melalui HTTP. ) ) ) c.resource = OpenTelemetry::SDK::Resources::Resource.create({ OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => 'tracing', OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => 'ruby_demo', # Nama aplikasi Ruby yang ingin Anda laporkan datanya menggunakan OpenTelemetry. OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => '0.0.1', }) endDapatkan tracer dan buat rentang.
tracer = OpenTelemetry.tracer_provider.tracer('<your_tracer_name>', '0.1.0') tracer.in_span('parent_span') do |parent_span| # ... endDapatkan rentang saat ini, tambahkan informasi ke rentang tersebut, lalu dapatkan ID jejak dan ID rentang.
# ... tracer.in_span('parent_span') do |parent_span| # Rentang saat ini adalah rentang induk bernama parent_span. current_span = OpenTelemetry::Trace::current_span current_span.set_attribute('key', 'value') pp current_span.context.trace_id pp current_span.context.span_id endBuat rentang bersarang.
# ... tracer.in_span('parent_span') do |parent_span| # ... tracer.in_span('child_span') do |child_span| # Dalam kasus ini, rentang saat ini adalah rentang anak bernama child_span. current_span = OpenTelemetry::Trace::current_span pp current_span end endJalankan aplikasi.
ruby manual.rb
Metode 2: Laporkan data secara otomatis
OpenTelemetry SDK untuk Ruby juga memungkinkan Anda mengimplementasikan instrumentasi dan observasi otomatis untuk aplikasi Anda. Bagian ini menjelaskan cara menggunakan OpenTelemetry untuk menerapkan analisis jejak otomatis pada aplikasi Rails dan melaporkan data jejak aplikasi tersebut.
Unduh kerangka kerja aplikasi web open source Rails.
gem install railsGunakan Rails untuk membuat proyek web.
rails new <your-project-name>Ganti
<your-project-name>dengan nama aplikasi Anda. Contoh:rails new auto-demo.Jika pesan kesalahan
Rails is not currently installed on this systemditampilkan setelah menjalankan perintah sebelumnya, tutup dan buka kembali CLI, lalu masukkan dan jalankan perintah lagi.
Tambahkan konten berikut ke Gemfile di direktori aplikasi:
gem 'opentelemetry-sdk' gem 'opentelemetry-exporter-otlp' gem 'opentelemetry-instrumentation-all'Unduh dependensi pihak ketiga yang diperlukan oleh aplikasi.
Pergi ke direktori root proyek.
cd <your-project-name>Unduh alat manajemen dependensi Ruby Bundler.
gem install bundlerUnduh dependensi di Gemfile.
bundle install
Di direktori <your-project-name>/config/initializers, buat file opentelemetry.rb dan tambahkan konten berikut ke file tersebut:
# config/initializers/opentelemetry.rb require 'opentelemetry/sdk' require 'opentelemetry/exporter/otlp' require 'opentelemetry/instrumentation/all' OpenTelemetry::SDK.configure do |c| c.add_span_processor( OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new( OpenTelemetry::Exporter::OTLP::Exporter.new( endpoint: '<endpoint>' # Titik akhir OpenTelemetry yang dapat diakses melalui HTTP. ) ) ) c.resource = OpenTelemetry::SDK::Resources::Resource.create({ OpenTelemetry::SemanticConventions::Resource::HOST_NAME => '<your-host-name>', # Nama host. }) c.service_name = '<your-service-name>' # Nama aplikasi. c.use_all() # Perpustakaan yang didukung oleh observasi OpenTelemetry otomatis. endGanti
<endpoint>dengan titik akhir yang Anda peroleh.Ganti
<your-host-name>dan<your-service-name>dengan nama host dan nama aplikasi aktual.
Jalankan proyek.
rails serverJika hasil berikut dikembalikan, operasi berhasil:
* Puma version: 5.6.5 (ruby 2.7.2-p137) ("Birdie's Version") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 79842 * Listening on http://127.0.0.1:3000 * Listening on http://[::1]:3000 Use Ctrl-C to stopKunjungi
http://127.0.0.1:3000di browser. Jika konten berikut ditampilkan di CLI, data dilaporkan ke konsol Managed Service for OpenTelemetry.Started GET "/" for 127.0.0.1 at 2023-01-01 10:00:00 +0800 Processing by Rails::WelcomeController#index as HTML Rendering /Users/username/.rvm/gems/ruby-2.7.2/gems/railties-7.0.4.3/lib/rails/templates/rails/welcome/index.html.erb Rendered /Users/username/.rvm/gems/ruby-2.7.2/gems/railties-7.0.4.3/lib/rails/templates/rails/welcome/index.html.erb (Duration: 0.8ms | Allocations: 665) Completed 200 OK in 6ms (Views: 2.1ms | ActiveRecord: 0.0ms | Allocations: 5440)
Lihat data pemantauan
Di halaman Applications dari Konsol Managed Service for OpenTelemetry, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.
