Instrumentasi aplikasi Ruby dengan OpenTelemetry SDK dan ekspor data jejak ke Managed Service for OpenTelemetry. Panduan ini mencakup dua pendekatan:
Auto-instrumentation (direkomendasikan) — secara otomatis menghasilkan rentang untuk framework yang didukung seperti Rails, Sinatra, dan pustaka umum. Mulai dari sini untuk penyiapan tercepat.
Manual instrumentation — memberikan kontrol detail halus atas pembuatan rentang. Gunakan ini untuk melacak logika bisnis kustom yang tidak dicakup oleh auto-instrumentation.
Prasyarat
Ruby runtime: MRI Ruby 3.0+, JRuby 9.3.2.0+, atau TruffleRuby 22.1+
Akun Alibaba Cloud dengan Application Real-Time Monitoring Service (ARMS) yang telah diaktifkan
Dapatkan titik akhir OpenTelemetry
Masuk ke Konsol Managed Service for OpenTelemetry.
Di panel navigasi sebelah kiri, klik Cluster Configurations, lalu klik tab Access point information.
Di bilah navigasi atas, pilih wilayah. Di bagian Cluster Information, aktifkan Show Token.
Di bagian Client, klik OpenTelemetry.
Salin titik akhir dari kolom Related Information.

Jika aplikasi Anda berjalan di lingkungan produksi Alibaba Cloud, gunakan titik akhir Virtual Private Cloud (VPC). Jika tidak, gunakan titik akhir publik.
Kode contoh
Contoh lengkap yang dapat dijalankan tersedia di ruby-opentelemetry-demo.
Auto-instrumentation (Rails)
Auto-instrumentation secara otomatis membuat rentang untuk pustaka dan framework yang didukung tanpa perlu membuat rentang secara manual.
Framework yang didukung
Auto-instrumentation mencakup berbagai pustaka Ruby, termasuk:
| Kategori | Pustaka |
|---|---|
| Web frameworks | rails, rack, sinatra, grape |
| Database | active_record, mysql2, pg, mongo, trilogy, redis, dalli, lmdb |
| HTTP clients | net_http, faraday, excon, http, http_client, httpx, ethon, restclient |
| Job queues | sidekiq, delayed_job, resque, active_job, que, rake |
| Messaging | bunny, rdkafka, ruby_kafka, racecar |
| Lainnya | aws_sdk, graphql, koala, concurrent_ruby, active_support, action_pack, action_view, active_model_serializers, gruf, rspec |
Untuk daftar lengkapnya, lihat repositori OpenTelemetry Ruby contrib.
Langkah 1: Buat proyek Rails
Lewati langkah ini jika Anda sudah memiliki aplikasi Rails.
gem install rails
rails new <your-project-name>
cd <your-project-name>Ganti <your-project-name> dengan nama aplikasi Anda, misalnya rails new otel-demo.
Jika Anda melihat error Rails is not currently installed on this system, tutup dan buka kembali terminal Anda, lalu jalankan perintah tersebut lagi.Langkah 2: Tambahkan gem OpenTelemetry
Tambahkan baris-baris berikut ke Gemfile proyek Anda:
gem 'opentelemetry-sdk'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-instrumentation-all'Kemudian instal dependensinya:
gem install bundler # lewati jika Bundler sudah terinstal
bundle installLangkah 3: Konfigurasi OpenTelemetry SDK
Buat file config/initializers/opentelemetry.rb:
# 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>' # Ganti dengan titik akhir HTTP OpenTelemetry Anda.
)
)
)
c.resource = OpenTelemetry::SDK::Resources::Resource.create({
OpenTelemetry::SemanticConventions::Resource::HOST_NAME => '<your-host-name>',
})
c.service_name = '<your-service-name>'
c.use_all() # Aktifkan auto-instrumentation untuk semua pustaka yang didukung.
endGanti placeholder dengan nilai aktual Anda:
| Placeholder | Deskripsi | Contoh |
|---|---|---|
<endpoint> | Titik akhir HTTP OpenTelemetry dari prasyarat | http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxx |
<your-host-name> | Hostname server Anda | my-rails-server |
<your-service-name> | Nama aplikasi yang ditampilkan di Konsol ARMS | my-rails-app |
Langkah 4: Jalankan aplikasi
rails serverOutput yang diharapkan:
* 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 stopLangkah 5: Verifikasi pelaporan data
Buka http://127.0.0.1:3000 di browser. Jika terminal Anda menampilkan output log berikut, data jejak sedang diekspor ke 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)Manual instrumentation
Manual instrumentation memberikan kontrol penuh atas operasi mana yang menghasilkan rentang. Pendekatan ini berlaku untuk semua aplikasi Ruby, tidak hanya Rails.
Langkah 1: Instal dependensi
Instal dependensi OpenTelemetry berikut:
gem install opentelemetry-api
gem install opentelemetry-sdk
gem install opentelemetry-exporter-otlpLangkah 2: Inisialisasi SDK
Buat file (misalnya, manual.rb) dan konfigurasikan eksportir OTLP. BatchSpanProcessor menyimpan sementara rentang dan mengirimkannya dalam batch untuk meningkatkan performa:
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>' # Ganti dengan titik akhir HTTP OpenTelemetry Anda.
)
)
)
c.resource = OpenTelemetry::SDK::Resources::Resource.create({
OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => 'tracing',
OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => '<your-service-name>',
OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => '0.0.1',
})
endGanti placeholder:
| Placeholder | Deskripsi | Contoh |
|---|---|---|
<endpoint> | Titik akhir HTTP OpenTelemetry dari prasyarat | http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxx |
<your-service-name> | Nama aplikasi yang ditampilkan di Konsol ARMS | ruby_demo |
Langkah 3: Buat rentang
Ambil tracer dan buat rentang:
tracer = OpenTelemetry.tracer_provider.tracer('<your-tracer-name>', '0.1.0')
tracer.in_span('parent_span') do |parent_span|
# Logika aplikasi Anda di sini.
endNama tracer mengidentifikasi pustaka instrumentasi di Konsol ARMS. Pilih nama yang menggambarkan komponen yang dilacak, misalnya 'order-service' atau 'payment-processor'.
Langkah 4: Tambahkan atribut dan baca konteks rentang
Di dalam blok rentang, tambahkan atribut dan ambil ID jejak serta ID rentang:
tracer.in_span('parent_span') do |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
endLangkah 5: Buat rentang bersarang
Sarangkan panggilan in_span untuk merepresentasikan hubungan induk-anak antar operasi:
tracer.in_span('parent_span') do |parent_span|
# Logika rentang induk.
tracer.in_span('child_span') do |child_span|
current_span = OpenTelemetry::Trace::current_span
pp current_span # Ini adalah rentang anak.
end
endContoh lengkap
Contoh ini mencakup pembuatan rentang, atribut, event, rentang bersarang, dan penanganan error dalam satu skrip:
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>' # Ganti dengan titik akhir HTTP OpenTelemetry Anda.
)
)
)
c.resource = OpenTelemetry::SDK::Resources::Resource.create({
OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => 'tracing',
OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => 'ruby_demo',
OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => '0.0.1',
})
# Atau, atur nama layanan tanpa API Resources:
# c.service_name = 'ruby_demo'
end
tracer = OpenTelemetry.tracer_provider.tracer('instrumentation_library_name', '0.1.0')
tracer.in_span('parent_span') do |parent_span|
# Atur atribut rentang.
parent_span.set_attribute('language', 'ruby')
parent_span.set_attribute("attribute_key", ["attribute_value1", "attribute_value1", "attribute_value1"])
# Tambahkan event rentang.
parent_span.add_event("event", attributes: {
"pid" => 1234,
"signal" => "SIGHUP"
})
# Baca ID jejak dan ID rentang.
current_span = OpenTelemetry::Trace::current_span
pp current_span.context.trace_id
pp current_span.context.span_id
tracer.in_span('child_span') do |child_span|
child_span.add_attributes({
"key1" => "value1",
"key2" => "value2"
})
child_span.add_event("mock exception here")
begin
raise 'An error has occurred'
rescue
# Tandai rentang sebagai error.
child_span.status = OpenTelemetry::Trace::Status.error("error in child span")
end
pp child_span
end
end
sleep 10Jalankan aplikasi:
ruby manual.rbLihat data jejak di Konsol ARMS
Masuk ke Konsol ARMS.
Di panel navigasi sebelah kiri, pilih Application Monitoring > Applications.
Di halaman Applications, klik nama aplikasi Anda untuk melihat data jejaknya.
Jika ikonmuncul di kolom Language, aplikasi tersebut terhubung melalui Application Monitoring. Jika muncul tanda hubung (-), aplikasi tersebut terhubung melalui Managed Service for OpenTelemetry.
muncul di kolom Language, aplikasi tersebut terhubung melalui Application Monitoring. Jika muncul tanda hubung (-), aplikasi tersebut terhubung melalui Managed Service for OpenTelemetry.