全部产品
Search
文档中心

Managed Service for OpenTelemetry:Gunakan OpenTelemetry untuk melaporkan data jejak aplikasi Ruby

更新时间:Jul 02, 2025

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

Untuk mendapatkan titik akhir Managed Service for OpenTelemetry, ikuti langkah-langkah berikut:

  1. Masuk ke Konsol Managed Service for OpenTelemetry.

  2. Di bilah navigasi sisi kiri, klik Cluster Configurations. Di halaman yang muncul, klik tab Access point information.

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

  4. Atur parameter Client menjadi OpenTelemetry.

    Dapatkan titik akhir Managed Service for OpenTelemetry dari kolom Related Information pada tabel di bagian bawah.OT接入点信息

    Catatan

    Jika aplikasi Anda diterapkan di lingkungan produksi Alibaba Cloud, gunakan titik akhir Virtual Private Cloud (VPC). Jika tidak, gunakan titik akhir publik.

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.

Kerangka Kerja Ruby yang Didukung

  • action_pack

  • action_view

  • active_job

  • active_model_serializers

  • active_record

  • active_support

  • aws_sdk

  • bunny

  • concurrent_ruby

  • dalli

  • delayed_job

  • ethon

  • excon

  • faraday

  • grape

  • graphql

  • gruf

  • http

  • http_client

  • httpx

  • koala

  • lmdb

  • mongo

  • mysql2

  • net_http

  • pg

  • que

  • racecar

  • rack

  • rails

  • rake

  • rdkafka

  • redis

  • resque

  • restclient

  • rspec

  • ruby_kafka

  • sidekiq

  • sinatra

  • trilogy

Kode contoh

Unduh kode contoh dari ruby-opentelemetry-demo.

Metode 1: Gunakan protokol HTTP untuk melaporkan data

  1. Instal dependensi OpenTelemetry berikut yang diperlukan untuk instrumentasi manual:

    gem install opentelemetry-api
    gem install opentelemetry-sdk
    gem install opentelemetry-exporter-otlp
  2. Inisialisasi 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',
      })
    end
  3. Dapatkan tracer dan buat rentang.

    tracer = OpenTelemetry.tracer_provider.tracer('<your_tracer_name>', '0.1.0')
    
    tracer.in_span('parent_span') do |parent_span|
      # ...
    end
  4. Dapatkan 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
    end
  5. Buat 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
    end

    Lihat Kode Contoh Lengkap

    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',
      })
    
      # Atur nama aplikasi tanpa menggunakan API Sumber Daya OpenTelemetry.
      # 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|
      # Konfigurasikan atribut rentang.
      parent_span.set_attribute('language', 'ruby')
      parent_span.set_attribute("attribute_key", ["attribute_value1", "attribute_value1", "attribute_value1"])
      # Tambahkan acara ke rentang.
      parent_span.add_event("event", attributes: {
        "pid" => 1234,
        "signal" => "SIGHUP"
      })
    
      # Dapatkan ID jejak dan ID rentang saat ini.
      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
          # Setel status child_span ke error jika terjadi pengecualian.
          child_span.status = OpenTelemetry::Trace::Status.error("error in child span")
        end
    
        pp child_span
    
      end
    end
    
    sleep 10
  6. Jalankan 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.

  1. Unduh kerangka kerja aplikasi web open source Rails.

    gem install rails
  2. Gunakan 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 system ditampilkan setelah menjalankan perintah sebelumnya, tutup dan buka kembali CLI, lalu masukkan dan jalankan perintah lagi.

  3. Tambahkan konten berikut ke Gemfile di direktori aplikasi:

    gem 'opentelemetry-sdk'
    gem 'opentelemetry-exporter-otlp'
    gem 'opentelemetry-instrumentation-all'
  4. Unduh dependensi pihak ketiga yang diperlukan oleh aplikasi.

    1. Pergi ke direktori root proyek.

      cd <your-project-name>
    2. Unduh alat manajemen dependensi Ruby Bundler.

      gem install bundler
    3. Unduh dependensi di Gemfile.

      bundle install
  5. 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. 
    end
    • Ganti <endpoint> dengan titik akhir yang Anda peroleh.

    • Ganti <your-host-name> dan <your-service-name> dengan nama host dan nama aplikasi aktual.

  6. Jalankan proyek.

    rails server

    Jika 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 stop
  7. Kunjungi http://127.0.0.1:3000 di 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.