Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ActiveSupport::Notifications supporting instrum...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Y.Matsuda
November 08, 2024
Programming
1k
1
Share
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
Y.Matsuda
November 08, 2024
More Decks by Y.Matsuda
See All by Y.Matsuda
Accelerating the Feedback Loop of OpenTelemetry Instrumentation with otel-tui
ymtdzzz
1
700
Observability Technology Selection Tips
ymtdzzz
6
1.6k
Building Observability Infrastructure with OpenTelemetry and SaaS
ymtdzzz
2
1.5k
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
5
5k
OIDC仕様に準拠した Makuake ID連携基盤構築の裏側
ymtdzzz
3
2.8k
Other Decks in Programming
See All in Programming
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
1.3k
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
300
의존성 주입과 모듈화
fornewid
0
150
JAWS-UG横浜 #100 祝・第100回スペシャルAWS は VPC レスの時代へ
maroon1st
0
180
Programming with a DJ Controller — not vibe coding
m_seki
3
480
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
1k
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
230
エラー処理の温故知新 / history of error handling technic
ryotanakaya
7
1.7k
AI-DLC Deep Dive
yuukiyo
9
4.9k
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
220
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
820
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
120
Featured
See All Featured
Docker and Python
trallard
47
3.8k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
270
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
99
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.6k
Optimizing for Happiness
mojombo
378
71k
Designing for humans not robots
tammielis
254
26k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
350
Ethics towards AI in product and experience design
skipperchong
2
260
RailsConf 2023
tenderlove
30
1.4k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
170
Transcript
@ymtdzzz OpenTelemetryによるRailsアプリの計装を 支えるActiveSupport::Notifications 2024.11.08 Fri.Kaigi on Rails 2024事後勉強会 @SmartHR
Yosuke MATSUDA (@ymtdzzz) 株式会社SmartHR プロダクトエンジニア 2
お久しぶりです&はじめまして 3 出典:モノリスでも使える! OpenTelemetryでRailsアプリのパフォーマンス分析を始めてみよう from Kaigi on Rails 2024
やっぱり今日も OpenTelemetry (トレース)
おさらい:トレースとは 5
6 トレース:追跡の単位(リクエストなど) おさらい:トレースとは
7 スパン:処理の単位 おさらい:トレースとは
8 トレースを出力すること:計装 • 自動計装: トレースを自動で出力させる(Gem毎に用 意) • 手動計装: トレースを手動で出力する
9 今日の話はこっち • 自動計装: トレースを自動で出力させる(Gem毎に用 意) • 手動計装: トレースを手動で出力する Railsの自動計装の仕組みはどうなって
いるのか?
10 OpenTelemetry:計装の技術標準 • 仕様(OpenTelemetry Specification) • 実装(言語別 SDK、計装ライブラリ) ※他にも色々ありますが、今回は割愛
計装のために利用する OpenTelemetryライブラリ 11
計装のために利用する OpenTelemetryライブラリ 12 普段私たちが使うのは 計装ライブラリ とRuby SDK
Ruby SDK?計装ライブラリ?
どちらも計装のためのライブラリ • Ruby SDK(opentelemetry-ruby) ◦ トレース設定(出力先やサービス名の設定など) ◦ 手動でスパンを出力したい場合に利用 • 計装ライブラリ
(opentelemetry-ruby-contrib/instrumentation) ◦ Gemに合わせたスパンを自動で出力してくれる ◦ たくさんあります(faraday, grape, mongo, pg, …) 14
どちらも計装のためのライブラリ • Ruby SDK(opentelemetry-ruby) ◦ トレース設定(出力先やサービス名の設定など) ◦ 手動でスパンを出力したい場合に利用 • 計装ライブラリ
(opentelemetry-ruby-contrib/instrumentation) ◦ Gemに合わせたスパンを自動で出力してくれる ◦ たくさんあります(faraday, grape, mongo, pg, …) 15 今日のテーマ
ところで:スパンを手動で生成したいケース 16 出典:Tuning GraphQL on Rails (p.37) from Kaigi on
Rails 2024
Railsの計装ライブラリを覗いてみよう
ここの話 18 自動でスパン(トレース) 出してやんよ!
ActionMailerの計装ライブラリ 19 https://github.com/open-telemetry/opentelemetry-ruby-contrib/ tree/main/instrumentation z
セットアップはこれだけ OpenTelemetry::SDK.configure do |c| # サービス名や出力先などの初期設定は省略 c.use 'OpenTelemetry::Instrumentation::ActionMailer' end 20
• これだけで勝手にスパンが出始める ◦ OpenTelemetry::SDK.configure ◦ ブロック内でConfigurator#use 何が起こっている?
前提知識: ActiveSupport::Notifications 21 • Rails内部のイベントを subscribe し、計測を行う仕組み • ActiveSupport::Notifications.sub scribeでRailsのイベントに
hookし て処理を走らせる 出典)Active Support Instrumentation で計測 - Railsガイド
処理を追ってみる (超スピードで)
まずはRailtieでconfigのinitialize直後にsubscribe 23 スパン生成用の Subscription Handlerでsubscribe Subscribeしたいイベント名 (今回は ActionMailer)
計装ライブラリの登録( Ruby SDK) 24 useで、指定した計装ライブラリを 配列にpush 計装ライブラリの installを呼び出し
ActionMailerの計装ライブラリの installを見てみる 25 イベントの payloadをスパンの attributeに詰める処理
計装ライブラリの独自 Subscription Handlerでイベントの開始と終了時に スパン生成処理を差し込む 26 Subscriberが読み込まれる流れについては時間の都合上省略 🙏 transform_payloadも最終的 にここで実行される( payloadの
Span Attributeへのセット) start, finishによりイベントの前 処理、後処理でスパンを生成す る
• Railsのイベントを ActiveSupport::Notificationsでsubscribe • 独自のSubscription Handlerを利用 ◦ イベントのstart, finishでスパンの生成とattributeセット •
Configuratorでuseしたinstrumentation libraryのinstall実行 ◦ hook時の処理(transform_payloadなど)を設定し有効化 Railsの計装ライブラリの実装ざっくりまとめ 27 Railsの仕組みに上手く乗っかっているこ とがわかりました!
モンキーパッチは使ってないの?
使っています(例: ActiveRecord) 29
モンキーパッチといえば …… 30 出典:現実のRuby/Railsアップグレード (p.33) from Kaigi on Rails 2024
Railsの計装ライブラリでもモンキーパッチをやめる動き 31 Github issue: opentelemetry-ruby-contrib #218
発端:ActionPackの計装ライブラリ 32 Github PR: opentelemetry-ruby-contrib #123 計装ライブラリのモンキーパッチが原因でリクエスト内容が意図せ ず書き換わってしまう問題
まとめ 33 • OpenTelemetryの計装で利用するライブラリ ◦ Ruby SDK:トレース設定、手動計装 ◦ 計装ライブラリ:Gem毎の自動計装 •
Railsの計装ライブラリ ◦ 多くはActiveSupport::Notificationsを利用 ◦ モンキーパッチも一部あるけど、危ないので ActiveSupport::Notificationsを利用する流れへ
ありがとうございました!
参考 35 • Ruby on Rails API • OpenTelemetry 公式ドキュメント
• Github - rails v7.2.2 • Github - opentelemetry-ruby • Github - opentelemetry-ruby-contrib ※スライド内に直接出典を記載したものを除く