このブログシリーズでは、複数の言語にまたがるOpenTelemetry標準を使用した分散トレースのアプリケーションインストルメンテーション手順を共有します。 以前にカバーしました 分散トレース用のJavaアプリケーションマニュアルインスツルメンテーション, 分散トレース用のGolangアプリケーションインストルメンテーション, 分散トレース用のFlaskアプリケーションマニュアルインストルメンテーション, 分散トレース用のDotNetアプリケーションインストルメンテーション.
このブログ投稿では、以下について説明します。
OpenTelemetryとトレースの価値
OpenTelemetryは、Cloud Native Computing Foundationによるプロジェクトであり、アプリケーションのテレメトリデータがダウンストリームのプラットフォームで記録および利用される方法を標準化することを目的としています。 このアプリケーショントレースデータは、アプリケーションの所有者がコード内のコンポーネントとサービスの関係、各ステップで導入されるリクエストの量と遅延、そして最終的にはユーザーエクスペリエンスの低下につながるボトルネックを理解するのに役立ちます。
このガイドを使用して、OpenTelemetry Protocol(OTLP)仕様を使用してトレースを発行するRubyアプリケーションを作成します。 必要なのは、Rubyでのアプリケーション開発の基本的な理解だけです。 OpenTelemetryは初めてですか? それについてもっと読む。
Ruby用のOpenTelemetry アプリケーションに自動および手動のインストルメンテーションを追加するために使用できます。 自動計装は、追加することで有効になります 計装パッケージ。 手動計装は、を使用して追加できます OpenTelemetry API.
インストール
前提条件
これらの手順では、Rubyサービスの自動および手動のインストルメンテーションをセットアップする方法について説明します。 開始するには、必要なものはすべて次のとおりです。
- Rubyがインストールされています(2.5以降)
このガイドでは、を使用して簡単な「HelloWorld」アプリケーションを自動計測します。 シナトラ、最小限の労力でWebアプリを作成するためのRubyドメイン固有言語(DSL)。 独自の既存のRubyプロジェクトに従ってください。
新しいプロジェクトを初期化する
mkdir sintara-hello-world
cd sintara-hello-world
vi Gemfile
ジェムファイル
source "https://rubygems.org"
gem "sinatra"
こんにちは。
require 'rubygems'
require 'bundle/setup'
get '/frank-says' do
'Put this in your pipe & smoke it!'
end
get '/hello' do
'sintara says hello!'
end
get '/' do
'exisitng paths: /hello, /frank-says, /logicmonitor!'
end
get '/logicmonitor' do
'Hello from Logicmonitor!'
end
Sinatraサーバーを実行する
bundler install
ruby hello.rb
> == Sinatra (v2.1.0) has taken the stage on 4567 for development with backup from Thin
> 2021-11-16 11:44:02 +0530 Thin web server (v1.8.1 codename Infinite Smoothie)
> 2021-11-16 11:44:02 +0530 Maximum connections set to 1024
> 2021-11-16 11:44:02 +0530 Listening on localhost:4567, CTRL+C to stop
Sinatraサーバーが稼働している必要があります。 トレースをLogicMonitorのAPMポータルにエクスポートするようにインストルメントしてみましょう。
Open Telemetry ClientGemsをインストールします
最初のステップは、次のgemをGemfileに追加することです。
Gemfile
gem 'opentelemetry-sdk'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-instrumentation-all'
opentelemetry-instrumentation-allを含めると、Rails、Sinatra、データベースドライバー、HTTPなどのいくつかのフレームワークにインストルメンテーションが提供されます。 ライブラリ.
初期化
アプリケーションのライフサイクルのできるだけ早い段階でOpenTelemetryを初期化することをお勧めします。 これをhello.rbに追加します
OpenTelemetryの初期化:
こんにちは。
require 'opentelemetry/sdk'
require 'opentelemetry/exporter/otlp'
require 'opentelemetry/instrumentation/all'
OpenTelemetry::SDK.configure do |c|
c.service_name = 'sintara-hello-world'
c.use_all() # enables all instrumentation!
end
トレースを実行するようにアプリケーションを設定したので、トレースをLogicMonitorAPMポータルにエクスポートするようにSDKを構成する必要があります。 SDKがデフォルトで使用しようとするOTLPエクスポーターを使用します。 次に、LogicMonitorのOpenTelemetry Collectorを使用して、これらのトレースを受信し、LMAPMポータルで視覚化します。
それをまとめる
Gemfile
source "http://rubygems.org"
gem 'sinatra'
gem "opentelemetry-api"
gem "opentelemetry-sdk"
gem "opentelemetry-exporter-otlp"
gem 'opentelemetry-instrumentation-all'
こんにちは。
require 'rubygems'
require 'bundler/setup'
require 'opentelemetry/sdk'
require 'opentelemetry/exporter/otlp'
Bundler.require
OpenTelemetry::SDK.configure do |c|
c.service_name = 'ruby-otlp'
c.use_all
end
get '/frank-says' do
'Put this in your pipe & smoke it!'
end
get '/hello' do
'sintara says hello!'
end
get '/' do
'exisitng paths: /hello, /frank-says, /logicmonitor!'
end
get '/logicmonitor' do
'Hello from Logicmonitor!'
end
cd sinatra-hello-world
gem install opentelemetry-instrumentation-all
gem install opentelemetry-sdk
gem install opentelemetry-exporter-otlp
bundler install
アプリケーションを実行する
ruby hello.rb
[2021-11-16 16:11:32] INFO WEBrick 1.6.0
[2021-11-16 16:11:32] INFO ruby 2.7.1 (2020-03-31) [x86_64-darwin19]
== Sinatra (v2.1.0) has taken the stage on 4567 for development with backup from WEBrick
[2021-11-16 16:11:32] INFO WEBrick::HTTPServer#start: pid=3794 port=4567
トレースのエクスポート
注:これらの手順では、LogicmonitorのAPMライセンスにアクセスできる必要があります。
Dockerを使用してLMOtelコレクターをインストールします。
docker run -d -e LOGICMONITOR_ACCOUNT=<account> -e LOGICMONITOR_BEARER_TOKEN= <bearer token> e LOGICMONITOR_OTEL_NAME="<collector name>" -p 4317:4317 -p 4318:4318 logicmonitor/lmotel:latest
次に、コレクターエンドポイントがトレースを受信する場所をSDKに通知する必要があります。 をセットする OTEL_EXPORTER_OTLP_ENDPOINT 環境変数 http://0.0.0.0:4318:
export OTEL_EXPORTER_OTLP_ENDPOINT=http://0.0.0.0:4318
それでは、テストしてみましょう。 アプリケーションを起動し、いくつかの操作を実行してトレースデータを生成します。たとえば、Webアプリをナビゲートしたり、バックグラウンドタスクを開始したりします。
LogicMonitorポータルのトレースに移動し、サービスに関連するトレースを検索します。 これらはOpenTelemy自動計測を介して生成されました!
成功! LogicMonitorトレースの表示

トレースをクリックすると、追加情報を表示できます。

構築されたトレースは次のようになります。
Resource labels:
-> service.name: STRING(ruby-otlp)
-> process.pid: INT(7614)
-> process.command: STRING(helloworld.rb)
-> process.runtime.name: STRING(ruby)
-> process.runtime.version: STRING(2.7.1)
-> process.runtime.description: STRING(ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19])
-> telemetry.sdk.name: STRING(opentelemetry)
-> telemetry.sdk.language: STRING(ruby)
-> telemetry.sdk.version: STRING(1.0.1)
InstrumentationLibrarySpans #0
InstrumentationLibrary OpenTelemetry::Instrumentation::Sinatra 0.19.2
Span #0
Trace ID : e4e6e6c683f2cbb8ab5404a6604b7c01
Parent ID :
ID : cadc573256df7294
Name : /frank-says
Kind : SPAN_KIND_SERVER
Start time : 2021-11-16 07:32:30.577101 +0000 UTC
End time : 2021-11-16 07:32:30.579635 +0000 UTC
Status code : STATUS_CODE_ERROR
Status message :
Attributes:
-> http.method: STRING(GET)
-> http.url: STRING(/frank-says)
-> http.status_code: INT(404)
手動計装については、を参照してください。 公式のOpenTelemetryドキュメント.
次のステップ
おめでとうございます。OpenTelemetryProtocol(OTLP)仕様を使用してトレースを発行するRubyアプリケーションを作成しました。 OTLP仕様を使用してビジネスアプリケーションのインスツルメンテーションを開始するときに、このコードを参照として使用できます。
これで、アプリケーションコードに存在する潜在的なボトルネックに対処するために、アプリケーションを可視化できます。 すでにLogicMonitorを使用してインフラストラクチャを監視したり、ログを収集している場合は、これらのトレースを関連付けて、トラブルシューティングを高速化できます。
他のアプリケーション言語間でOpenTelemetry標準を使用して分散トレースを設定している他のブログをチェックしてください。
外部リソース
OpenTelemetryとCNCFの詳細については、次のリソースをお勧めします。
- プログラムに参加する(英語) CNCFSlackコミュニティ
- OTelのドキュメントをご覧ください
私たちのブログを購読する
このような記事をあなたの受信箱に直接お届けします