仕事で運用しているアプリケーションの監視に New Relic を使っている。 以前監視NRQLとか書いたりしてたけどそこそこ抜けてしまっているのと、真面目にApdexに対して向き合うときがきたので自分のためにまとめる。
Apdex てなに
Apdex:ユーザー満足度の測定 | New Relicのドキュメント ドキュメントがあるのでこれを見ると良い。
Application Performance Index
の略で、レスポンスに対する満足度を示す割合のこと。New Relic 独自の用語ではなく、 The Apdex Users Group という団体があってそこが大本。
あらかじめ許容できるレスポンスタイムの閾値Tを設定しておいて以下の3つにレスポンスタイムの評価を分類する
- 満足
- レスポンスタイム >= T
- 許容
- T < レスポンスタイム <= 4T
- 不満
- 4T < レスポンスタイム
そしてある期間の間にやってきたリクエストに対して以下の式を適用してある期間に対するApdexを設定する
Apdex = (満足の件数 + 許容の件数/2) / リクエスト総数
すべて満足なら最高の1, すべて不満なら0となる。
どのようにして値を決めるとよいか
しきい値TについてはApdex T: How to Set the Right Value New Relic が出しているブログの「What should I set T to?」にそのまま書いてあるので参考にすると良さそう。最初は24時間のリクエストのdurationの90%タイルをNRQLで取ると良いと書かれている。また、実際の監視では特定の期間内のApdexがnを下回ったらアラートを上げるといった使い方をする。特定の期間(n分)についてはサービスのリクエスト数によって調整する必要はある。リクエスト数が少ないと、不満と判断されたリクエストを外れ値としてうまく弾くことができない。
なんとなく眺めていた値だったので、式を理解できたこと、Apdex が New Relic 独自の値ではないことを知ったのが学びであった。