🔭

OpenTelemetry と OpenObserve で Rails のトレースを可視化

2024/11/08に公開

はじめに

OpenTelemetry には興味があったものの、実際に手を動かすところまではできていませんでした。
ただ、Kaigi on Rails 2024 のセッションで OpenTelemetry のセッションに刺激を受けたので、実際に手を動かしてみました。

Kaigi on Rails 2024 のセッションについて

セッションは ymtdzzz さんの「モノリスでも使える!OpenTelemetry で Rails アプリのパフォーマンス分析を始めてみよう」でした。

分かりやすい内容で、とても参考になりました。

https://speakerdeck.com/ymtdzzz/opentelemetryderailsnopahuomansufen-xi-woshi-metemiyou-kor2024

ここで試した内容

上記セッションでは、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 でログインできることも確認しておきましょう。

OpenObserve Login
OpenObserve Home

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 アプリケーションを起動します。

OpenObserve Datasource

OTEL_EXPORTER_OTLP_ENDPOINT=http://openopenobserve:5080/api/default OTEL_EXPORTER_OTLP_HEADERS=Authorization=Basic%20cm9vdEBleGFtcGxlLmNvbTpHVUpFWVlBaVZKSDNzclhJ bin/dev

トレースデータの確認

Rails アプリケーションを操作し、OpenObserve でトレースデータが確認できることを確認します。

OpenObserve Trace1
OpenObserve Trace2
OpenObserve Trace3
OpenObserve Trace4

まとめ

OpenTelemetry と OpenObserve を使用して Rails のトレースを可視化きました。
OpenObserve は簡単に構築できたので、OpenTelemetry を使ってみるときの選択肢のひとつとして含めてみてはいかがでしょうか。

Discussion