ScoutAPMを使ってモニタリングしているとトランザクションとログインユーザー情報を紐付けたいと思ったことはありませんか?
そのような場合は、ScoutAPMのCustom Contextという機能を使うことでトランザクションに対して付加情報を付けることが出来ます。
Custom Contextとは
ScoutAPMでモニタリングされるトランザクションに対して、任意の付加情報を付ける機能です。 アプリケーション側にシンプルなコードを埋め込むだけで実現することが出来ます。
どのような情報を付加するかはアイデア次第ですので、例えば以下のようなニーズに応えることが可能です。
- 遅いリクエストによって影響を受けるユーザーは誰か?何人くらい該当するか?
- 毎週木曜の深夜2時にメモリ負荷が上がる原因は「どのユーザー」の「どの操作」によるものか?
Custom Contextの使用方法
ユーザー情報を付加したい場合
ユーザー情報を付加したい場合は下記のメソッドを使用します。
ScoutApm::Context.add_user({})
例えばIDを付加したい場合は下記のような実装になります。
ScoutApm::Context.add_user(id: @user.id)
それ以外の情報以外を付加したい場合
ユーザー情報ではない一般的な情報を付加したい場合は下記のメソッドを使用します。
ScoutApm::Context.add({})
下記のように任意の情報を付加することが出来ます。
ScoutApm::Context.add(database_shard: @db.shard_id)
ユーザーIDをContextに付加する実装例
各アクション単位でユーザーIDをContextに付加することで実現可能です。
ApplicationController.rb
に下記を定義します
before_filter :set_scout_context def set_scout_context ScoutApm::Context.add_user(id: current_user.id) if current_user.is_a?(User) end
このような実装を加えるだけで簡単にContextを追加することが出来ます。
下記は実際のScoutAPMのContextタブの画面イメージです。
user idが新しく追加されていることが確認できます。
設定自体はとても簡単なので運用のトレーサビリティを上げたい場合は設定しておくことをおすすめします。