アプリケーションのトレースデータを表示するには、クライアントを使用してトレースデータを Managed Service for OpenTelemetry にレポートする必要があります。このトピックでは、OpenTelemetry SDK for Ruby を使用して Ruby アプリケーションのトレースデータをレポートする方法について説明します。
前提条件
背景情報
OpenTelemetry は、MRI Ruby 3.0 以降、JRuby 9.3.2.0 以降、TruffleRuby 22.1 以降の Ruby バージョンをサポートしています。
OpenTelemetry SDK for Ruby は、手動および半自動インストルメンテーションをサポートしています。半自動インストルメンテーションとは、スパンを手動で作成する必要はありませんが、設定ファイルを追加する必要があることを意味します。半自動インストルメンテーションでサポートされているフレームワークの詳細については、OpenTelemetry 公式ドキュメント を参照してください。
サンプルコード
ruby-opentelemetry-demo からサンプルコードをダウンロードします。
方法 1: HTTP プロトコルを使用してデータをレポートする
手動インストルメンテーションに必要な以下の OpenTelemetry 依存関係をインストールします。
gem install opentelemetry-api gem install opentelemetry-sdk gem install opentelemetry-exporter-otlpOpenTelemetry を初期化します。
監視データをエクスポートするために使用するコンポーネントを追加し、
<endpoint>を取得したエンドポイントに置き換えます。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>' # HTTP 経由でアクセスできる OpenTelemetry のエンドポイント。 ) ) ) c.resource = OpenTelemetry::SDK::Resources::Resource.create({ OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => 'tracing', OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => 'ruby_demo', # OpenTelemetry を使用してデータをレポートする Ruby アプリケーションの名前。 OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => '0.0.1', }) endトレーサーを取得し、スパンを作成します。
tracer = OpenTelemetry.tracer_provider.tracer('<your_tracer_name>', '0.1.0') tracer.in_span('parent_span') do |parent_span| # ... end現在のスパンを取得し、現在のスパンに情報を追加してから、トレース ID とスパン ID を取得します。
# ... tracer.in_span('parent_span') do |parent_span| # 現在のスパンは、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ネストされたスパンを作成します。
# ... tracer.in_span('parent_span') do |parent_span| # ... tracer.in_span('child_span') do |child_span| # この場合、現在のスパンは child_span という名前の子スパンです。 current_span = OpenTelemetry::Trace::current_span pp current_span end endアプリケーションを実行します。
ruby manual.rb
方法 2: データを自動的にレポートする
OpenTelemetry SDK for Ruby を使用すると、アプリケーションの自動インストルメンテーションと観測を実装することもできます。このセクションでは、OpenTelemetry を使用して Rails アプリケーションで自動トレース分析を実装し、アプリケーションのトレースデータをレポートする方法について説明します。
オープンソース Web アプリケーションフレームワーク Rails をダウンロードします。
gem install railsRails を使用して Web プロジェクトを作成します。
rails new <your-project-name><your-project-name>をアプリケーションの名前に置き換えます。例:rails new auto-demo。上記のコマンドを実行した後に
Rails is not currently installed on this systemというエラーメッセージが返された場合は、CLI を閉じて再度開き、コマンドを再入力して実行します。
アプリケーションのディレクトリにある Gemfile に次のコンテンツを追加します。
gem 'opentelemetry-sdk' gem 'opentelemetry-exporter-otlp' gem 'opentelemetry-instrumentation-all'アプリケーションに必要なサードパーティの依存関係をダウンロードします。
プロジェクトのルートディレクトリに移動します。
cd <your-project-name>Ruby 依存関係管理ツール Bundler をダウンロードします。
gem install bundlerGemfile 内の依存関係をダウンロードします。
bundle install
<your-project-name>/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>' # HTTP 経由でアクセスできる OpenTelemetry のエンドポイント。 ) ) ) c.resource = OpenTelemetry::SDK::Resources::Resource.create({ OpenTelemetry::SemanticConventions::Resource::HOST_NAME => '<your-host-name>', # ホスト名。 }) c.service_name = '<your-service-name>' # アプリケーションの名前。 c.use_all() # OpenTelemetry 自動観測でサポートされているライブラリ。 end<endpoint>を取得したエンドポイントに置き換えます。<your-host-name>と<your-service-name>を実際のホスト名とアプリケーション名に置き換えます。
プロジェクトを実行します。
rails server次の結果が返された場合、操作は成功です。
* 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ブラウザで
http://127.0.0.1:3000にアクセスします。CLI に次のコンテンツが表示された場合、データは 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)
監視データの表示
可観測性 OpenTelemetry 版コンソール のアプリケーションページで、アプリケーションの名前をクリックします。表示されるページで、トレースデータを表示します。
