本旨
過去にとあるAPM(※)を使ったことがあり、また今の仕事でも使うことになったため、
私がAPMで何を確認したいかを書き出してみたいと思います。
※ APM・・・アプリケーション性能監視ツール
こんなのもあるよ、というご意見があると幸いです。
補足、注意事項
いわゆる定期報告のケースは現場によって大きく異なるため除き、障害などトラブルに焦点を絞ります。
私が知っているAPMは
- Dynatrace
- New Relic
です。
また、本稿は上記のいずれかにも捉われず、本質的に確認したいことを列挙していきたいと思います。
ケース1:障害解析<処理エラー>(原因究明)
シナリオ概要
ある日、処理エラーに関するエラー発報があり調査することになった。その原因を特定して解消したい。
APMで確認すること
確認したい要素 | 出ていて欲しい情報 |
---|---|
どのサーバで発生したか | サーバ名① |
ロジックのどの箇所でエラー(Exception)が発生したか | エラー発生ロジック名、行数、StackTrace② |
エラーとなった際に処理しようとしたパラメータは表示されているか | エラー出力ロジック内で指定したパラメータ(自前実装含)③ |
確認〜解消の仕方
- アラートに記載のリンクからAPMにアクセスする
- できれば当該エラーリクエストの詳細画面②に飛んで欲しい(できない前提で以下)
- リクエスト一覧から、エラーリクエストを選択し②を確認する
- エラーリクエストの詳細画面に出ている「出ていて欲しい情報」を確認する
- ②に対応するソースコードを開き、③の情報と合わせて原因を特定する
- 必要に応じてDBログや①のアクセスログを参照する
- ①に対して緊急リリース・再起動等を行い解消する
ケース2:障害解析<処理エラー>(影響調査)
シナリオ概要
ある日、処理エラーに関するエラー発報があり調査することになった。その影響範囲を特定したい。
APMで確認すること
確認したい要素 | 出ていて欲しい情報 |
---|---|
現在も継続してエラー発報しているか | エラーレートのグラフ(X:時間, Y:エラー率)④ |
エラーは全てのサーバで発生しているか | サーバ毎のエラーレートのグラフ④(上と同じ) |
エラーは同じロジック箇所で必ず発生しているか | エラー発生ロジック名、行数、StackTrace② |
エラーが発生する処理データに法則性があるか | エラー出力ロジック内で指定したパラメータ(自前実装含)③ |
サーバは正常な(負荷)状態か | サーバのリソース情報⑤ |
確認〜解消の仕方
- APMのダッシュボードを開く(④を含むものを作っておくこと)
- ④からエラーが発生しているサーバのリクエスト一覧を開く
- リクエスト一覧から、エラーリクエストを選択し②を確認する
- 複数のエラーで②・③を確認し集計して影響範囲を検討する
- ④にサーバに偏りがある場合は、サーバのOSログやアクセスログ、⑤を確認する
ケース3:障害解析<応答遅延>(原因究明)
シナリオ概要
ある日、応答遅延に関するエラー発報があり調査することになった。その原因を特定して解消したい。
APMで確認すること
確認したい要素 | 出ていて欲しい情報 |
---|---|
遅延は全てのサーバで発生しているか | サーバ×機能毎の応答時間のグラフ⑥ |
サーバは正常な(負荷)状態か | サーバのリソース情報⑤ |
ロジックのどの箇所で遅延が発生したか | エラー発生ロジック名、行数、StackTrace② |
ロジックのStackTrace毎にどれくらい処理時間がかかっているか | StackTrace毎の処理時間⑦ |
遅延が発生する処理データに法則性があるか | ロジック内での出力ログ(自前実装含)、DBログと突合するためのDBアクセス時間⑧ |
確認〜解消の仕方
- APMのダッシュボードを開く(⑥を含むものを作っておくこと)
- アラートに記載されたサーバのリクエスト一覧を開く
- リクエスト一覧から、エラーリクエストを選択し②を確認する
- ⑦を確認して、平常時よりも大きくかかっている処理箇所を確認する
- ⑥(⑤)でサーバに偏りがないか、⑧で処理対象データに法則性がないかなど総合的に検討し原因究明する
- 遅延が発生しているサーバに対し、サーバ再起動や緊急リリース、あるいは静観等の対処を実施する
ケース4:障害解析<応答遅延>(影響調査)
シナリオ概要
ある日、応答遅延に関するエラー発報があり調査することになった。その影響範囲を特定したい。
APMで確認すること
確認したい要素 | 出ていて欲しい情報 |
---|---|
遅延は全てのサーバで発生しているか | サーバ×機能毎の応答時間のグラフ⑥ |
遅延が発生する処理データに法則性があるか | ロジック内での出力ログ(自前実装含)、DBログと突合するためのDBアクセス時間⑧ |
確認〜解消の仕方
- APMのダッシュボードを開く(④を含むものを作っておくこと)
- ⑥から以下を確認する
- どの機能(提供サービス)で発生したか
- どれくらい(秒数)遅延したか
- いつからいつまで発生していたか
- ⑧から以下を確認する
- 対象ユーザの範囲は全員か、特定の範囲か
最後に
ダッシュボードはカラフルだと綺麗なんですが、必要な情報だけに絞ったスマートさも追い求めていきたいですね。