- Ruby / Rails関連
Rails 7.1: Active Recordのトランザクションイベントがinstrumentationで計測可能になった(翻訳)
Rails 7.1: Active Recordのトランザクションイベントがinstrumentationで計測可能になった(翻訳)
Active Supportのinstrumentation(計測)APIは、アプリケーション内で特定のイベントが発生したときに通知の受信を可能にするフックを提供します。Railsには、サブスクライブ可能な組み込みのイベントを多数提供しています。フレームワーク用フックのリストは以下にあります。
参考: §3 Railsフレームワーク用フック -- Active Support Instrumentation で計測 - Railsガイド
ここに最近追加されたのがtransaction.active_record
イベントであり、これはActive Recordの管理するトランザクションが発生したときにトリガーされます。これは、パフォーマンス監視や最適化のためにデータベーストランザクションをトラッキング・分析する監視システム(New Relicなど)を構築する場合に特に有用です。
このイベントのペイロードには、:connection
、:outcome
(結果)、詳細タイミングが含まれます。:connection
は、トランザクションが発生したデータベースがどれなのかを特定するときに便利で、特にマルチデータベース環境で有用です。:outcome
はトランザクションの結果を示すもので、以下のいずれかとなります。
:commit
:rollback
:restart
:incomplete
これを利用するには、config/initializers/events.rbイニシャライザで以下のようにイベントをサブスクライブします。
ActiveSupport::Notifications.subscribe(
"transaction.active_record"
) do |event|
MetricsLogger.record_transaction(event.payload)
end
上の例のMetricLogger
は、トランザクションの詳細を記録する責務を担っています。これで、遅いトランザクションを分析して報告し、それを元に適切な措置を取れるようになります。これはinstrumentationのニーズに合わせて変更できます。
詳しくは以下のプルリクをご覧ください。
- Add outcome to transaction tracking payload by ipc103 · Pull Request #49262 · rails/rails
- Rails 7.1 adds new option path_params for url_for helper method - BigBinary Blog
概要
元サイトの許諾を得て翻訳・公開いたします。
参考: 週刊Railsウォッチ20230926: Active Recordのトランザクションをinstrumentationで計測できるようになった
なお、
transaction.active_record
は現時点でRails Guidesやedgeguidesには記載されていません。