OpenTelemetry と OpenObserve で Rails のトレースを可視化
はじめに
OpenTelemetry には興味があったものの、実際に手を動かすところまではできていませんでした。
ただ、Kaigi on Rails 2024 のセッションで OpenTelemetry のセッションに刺激を受けたので、実際に手を動かしてみました。
Kaigi on Rails 2024 のセッションについて
セッションは ymtdzzz さんの「モノリスでも使える!OpenTelemetry で Rails アプリのパフォーマンス分析を始めてみよう」でした。
分かりやすい内容で、とても参考になりました。
ここで試した内容
上記セッションでは、OpenTelemetry の可視化に Grafana Tempo を使用した内容となっていました。
ただ、もう少し簡単に構築できるものはないかなと探していたところ、OpenObserve がよさそうに感じたので、こちらを使ってみました。
OpenTelemetry とは
OpenTelemetry はオブザーバビリティフレームワークであり、トレース、メトリクス、ログのようなテレメトリーデータを作成・管理するためにデザインされたツールキットです。 重要なことは、OpenTelemetry はベンダーやツールにとらわれないということです。 つまり、Jaeger や Prometheus のようなオープンソースツールや、商用製品を含む、さまざまなオブザーバビリティバックエンドで使用できるということです。
引用: https://opentelemetry.io/ja/docs/what-is-opentelemetry/
OpenObserve とは
OpenObserve is a cloud native observability platform (Logs, Metrics, Traces) that provides ~140x lower storage costs (compared to Elasticsearch. YMMV. Could be higher or lower based on data entropy) for real life log data, significantly lower operational cost and ease of use. It can scale to petabytes of data, is highly performant and allows you to sleep better at night 😀. If you are looking for an observability tool for logs, metrics and traces, do evaluate OpenObserve and how its approach towards observability could help you build better software, save money on observability costs, and sleep better.
OpenObserve は、クラウド ネイティブの可観測性プラットフォーム (ログ、メトリクス、トレース) であり、実際のログ データに対して最大 140 倍低いストレージ コスト (Elasticsearch. YMMV と比較。データ エントロピーに基づいてより高いまたは低い可能性があります)、大幅に低い運用コストと容易性を提供します。使用の。ペタバイト規模のデータまで拡張でき、パフォーマンスが高く、夜の睡眠の質も向上します 😀。ログ、メトリクス、トレース用の可観測性ツールをお探しの場合は、OpenObserve を評価してください。また、可観測性に対するそのアプローチが、より優れたソフトウェアの構築、可観測性コストの節約、睡眠の質の向上にどのように役立つかを評価してください。
引用: https://openobserve.ai/docs/
OpenTelemetry と OpenObserve で Rails のトレースを可視化
環境
以下の環境で OpenTelemetry と OpenObserve で Rails のトレースを可視化を試してみました。
- Ruby 3.3.6
- Rails 8.0.0.rc2
- Visial Studio Code / DevContainer
Rails アプリケーションの作成
まずは、Rails アプリケーションを作成します。
環境を簡単に構築するために、DevContainer を使用します。
rails new rails_opentelemetry_openobserve_sample --skip-test --devcontainer
cd rails_opentelemetry_openobserve_sample
bin/rails g scaffold Article title:string content:text
bin/rails db:migrate
bin/dev
コマンドを順番に実行し、http://localhost:3000/articles
にアクセスできれば OK です。
OpenObserve の構築
DevContainer の .devcontainer/compose.yaml
へ追記し、 OpenObserve を構築します。
参考: https://openobserve.ai/docs/quickstart/
services:
rails-app: (省略)
openopenobserve:
image: public.ecr.aws/zinclabs/openobserve:v0.13.0
ports:
- 5080:5080
volumes:
- ../openobserve/data:/data
environment:
ZO_DATA_DIR: /data
ZO_ROOT_USER_EMAIL: root@example.com
ZO_ROOT_USER_PASSWORD: Complexpass#123
DevContainer「コンテナーをリビルド」を行い、 OpenObserve が起動することを確認します。
http://localhost:5080
にアクセスし、ログイン画面が表示されれば OK です。
root@example.com / Complexpass#123
でログインできることも確認しておきましょう。
Rails アプリケーションへ OpenTelemetry を導入
Rails アプリケーションへ OpenTelemetry を導入します。
参考: https://opentelemetry.io/docs/languages/ruby/getting-started/
bundle add opentelemetry-sdk opentelemetry-instrumentation-all opentelemetry-exporter-otlp
config/initializers/opentelemetry.rb
を作成し、以下の内容を記述します。
OpenTelemetry::SDK.configure do |c|
c.service_name = 'ruby-otel-sample'
c.use_all() # enables all instrumentation!
end
OpenObserve へのトレースデータの送信
Rails アプリケーションから OpenObserve へトレースデータを送信します。
送信先の情報を OpenObserve のデータソース画面から取得し、以下のように設定して Rails アプリケーションを起動します。
OTEL_EXPORTER_OTLP_ENDPOINT=http://openopenobserve:5080/api/default OTEL_EXPORTER_OTLP_HEADERS=Authorization=Basic%20cm9vdEBleGFtcGxlLmNvbTpHVUpFWVlBaVZKSDNzclhJ bin/dev
トレースデータの確認
Rails アプリケーションを操作し、OpenObserve でトレースデータが確認できることを確認します。
まとめ
OpenTelemetry と OpenObserve を使用して Rails のトレースを可視化きました。
OpenObserve は簡単に構築できたので、OpenTelemetry を使ってみるときの選択肢のひとつとして含めてみてはいかがでしょうか。
Discussion