All Products
Search
Document Center

Application Real-Time Monitoring Service:Laporkan data jejak Ruby dengan OpenTelemetry

Last Updated:Mar 12, 2026

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

  1. Masuk ke Konsol Managed Service for OpenTelemetry.

  2. Di panel navigasi sebelah kiri, klik Cluster Configurations, lalu klik tab Access point information.

  3. Di bilah navigasi atas, pilih wilayah. Di bagian Cluster Information, aktifkan Show Token.

  4. Di bagian Client, klik OpenTelemetry.

  5. Salin titik akhir dari kolom Related Information.

    OpenTelemetry endpoint 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:

KategoriPustaka
Web frameworksrails, rack, sinatra, grape
Databaseactive_record, mysql2, pg, mongo, trilogy, redis, dalli, lmdb
HTTP clientsnet_http, faraday, excon, http, http_client, httpx, ethon, restclient
Job queuessidekiq, delayed_job, resque, active_job, que, rake
Messagingbunny, rdkafka, ruby_kafka, racecar
Lainnyaaws_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 install

Langkah 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.
end

Ganti placeholder dengan nilai aktual Anda:

PlaceholderDeskripsiContoh
<endpoint>Titik akhir HTTP OpenTelemetry dari prasyarathttp://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxx
<your-host-name>Hostname server Andamy-rails-server
<your-service-name>Nama aplikasi yang ditampilkan di Konsol ARMSmy-rails-app

Langkah 4: Jalankan aplikasi

rails server

Output 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 stop

Langkah 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-otlp

Langkah 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',
  })
end

Ganti placeholder:

PlaceholderDeskripsiContoh
<endpoint>Titik akhir HTTP OpenTelemetry dari prasyarathttp://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxx
<your-service-name>Nama aplikasi yang ditampilkan di Konsol ARMSruby_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.
end

Nama 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
end

Langkah 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
end

Contoh 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 10

Jalankan aplikasi:

ruby manual.rb

Lihat data jejak di Konsol ARMS

  1. Masuk ke Konsol ARMS.

  2. Di panel navigasi sebelah kiri, pilih Application Monitoring > Applications.

  3. Di halaman Applications, klik nama aplikasi Anda untuk melihat data jejaknya.

Jika ikon Java icon muncul di kolom Language, aplikasi tersebut terhubung melalui Application Monitoring. Jika muncul tanda hubung (-), aplikasi tersebut terhubung melalui Managed Service for OpenTelemetry.