トランザクション分析
ヒットマップ
ホーム画面 > プロジェクト選択 > 分析 > ヒットマップ
WhaTapモニタリングサービスの初期画面でプロジェクトを選択した後、分析 > ヒットマップメニューを選択します。
ヒットマップは、ダッシューボード > アプリケーションのヒットマップウィジェットからもアクセスできます。
詳細分析
エージェント領域
現在のプロジェクトと関連づけられたエージェントを選択し、フィルタリングできます。ボタンを選択すると、領域でヒットマップTXチャートが表示します。
ヒットマップTXチャート
遅延の問題があるトランザクションが含まれている場合ヒットマップTXチャートに、オレンジや赤で表示されます。通常のトランザクションが含まれている場合、青で表示されます。
選択
リアルタイムヒットマップチャートをドラッグすると、 アプリケーション一覧とトランザクション情報を確認できる TXトレース 一覧が表示されます。
アプリケーション一覧
チャートで選択された領域に該当するTXの数とエラーの数を確認できます。一覧からアプリケーションを選択すると、該当アプリケーションのTXトレース一覧に詳細が表示されます。
TXトレース一覧
TXトレース一覧には詳細情報が含まれています。一覧からトランザクションを選択すると、トランザクション情報画面が表示されます。トランザクション情報画面から該当トランザクションのトレース分析を確認できます。詳細については、次の文書を参照してください。
ヒットマップパターンを理解する
ヒットマップは、トランザクションの終了時間をX軸、レスポンス時間をY軸とした分布チャートです。通常のWebアプリケーションは、数秒以下の集中分布を表示します。
ヒットマップラインの分析
-
縦線(LOCK現象) パターン
トランザクション処理中に一時的なロック(Notonly DB Lock)が発生すると処理が待機されます。ロックが解除されると、処理待機中のトランザクションは同じ時間帯で同時に終了します。これにより、次のように垂直線が作成されます。
垂直パターンでロックを検知することは非常に強力な概念です。特にマイクロサービスアーキテクチャでは、バックエンドシステムで発生するロックについても同様に検知できます。
Frontアプリケーションのレスポンスパターンの縦線は、バックエンドシステムが使用するDBでロックが発生した場合も検知されます。
-
横線(タイムアウト) パターン
10秒のタイムアウト条件でリソースが不十分な場合、トランザクションは10秒間待機後にタイムアウトエラーが発生します。この時点で、ヒットマップの約10秒後に、次のような横線が作成されます。
タイムアウト後に再実行するロジックがある場合は、図のような横線が10秒単位で繰り返されます。以下は、実際のトラブル状況のヒットマップです。
(1) セクションでレスポンス時間が増加し、(2) セクションの赤い線は典型的な横線パターンです。(1) セクションの負荷によりConnectionPoolが使い果たされ、(2) セクションはConnectionPoolの不足で2回目のタイムアウトトラブルが発生した状態です。
パターン分析活用
トランザクションレスポンスの分布に線が表示されている場合は、ボトルネックがあることを意味します。一時的なロッキングの場合は縦線が作成され、ボトルネックがタイムアウトになると横線が作成されます。
問題を分析する際に特定のラインに含まれるトランザクションのみを選択的に分析して、問題をすばやく発見できます。
機械学習ベースの応答パターン分析
機械学習技術によりヒットマップパターンを分析し、異常を自動検知してアラートを発報する機能です。
異常パターンの例
毎月数百TBのパフォーマンスデータから異常パターンを学習し、学習した異常パターンと同様のパターンが発生するとアラートを発報します。
-
縦線パターン
-
横線パターン
-
複合パターン
-
ヒットマップ通知
ヒットマップTXチャートを分析する方法については、次の文書を参照してください。
Javaエージェントの例外処理(WARNING) 基準
Java言語を使用するアプリケーション環境で発生するエラーをJavaエージェントが例外処理する基準について案内します。次の内容は、Javaエージェントv2.2.27 基準で作成されました。
サービス画面でのエラー表示
ヒットマップウィジェット、トレース分析画面から確認できるエラーレベルは、殆どWARNINGレベルに該当します。
Spring ExceptionHandler通過時のエラー処理
Springフレームワークでは、org.springframework.web.servlet.DispatcherServlet.processHandlerException
メソッドを通過する場合、エラーとして処理します。ただ、開発者がTry-Catch文を使用する場合は、ExceptionHandler
を通過しませんので、WhaTapではエラー処理を行いません。
Status Code 400以上のエラー処理
HTTPレスポンスコードが400以上の場合は、例外クラス(Exception Class)が発生しなくてもエラーとして処理します。
JDBC driver呼び出し時のエラー処理
JDBC接続呼び出しやSQL実行呼び出し時に発生するエラーはエラーとして処理されます。
HTTP callエラー処理
HTTP呼び出し中に発生するエラーは、SLOW_HTTPC
、httpc error
などの形で表示されます。
WhaTapで定義したエラー処理
WhaTapモニタリングサービスでは、特定の条件に従ってエラーとして処理します。
-
TOO_MANY_RECORDS:fetch件数10,000件以上
関連するエージェントオプションについては、次の文書を参照してください。
profile_error_jdbc_fetch_max=10000
-
SLOW_SQL:SQL時間30,000ms以上
関連するエージェントオプションについては、次の文書を参照してください。
profile_error_sql_time_max=30000
-
SLOW_HTTPC:HTTP call経過時間が10,000ms以上
関連するエージェントオプションについては、次の文書を参照してください。
profile_error_httpc_time_max=10000
-
httpc error:HTTP call status code 400以上の場合
関連するエージェントオプションについては、次の文書を参照してください。
httpc_status_error_enable=true
-
status error:トランザクションstatus code 400以上の場合
関連するエージェントオプションについては、次の文書を参照してください。
transaction_status_error_enable=true
トランザクションエラー段階のINFO処理
エージェント設定により、一部のエラーを正常な状態で表示または無視できます。ヒットマップウィジェットで表示されるレベルは、INFO(青)です。
-
biz_exceptions
:レコードエラー表示whatap.confbiz_exceptions=io.home.test.baseapp.base.exception.custom.CustomParameterizedException
-
ignore_exceptions
:レコードエラー未表示whatap.confignore_exceptions=org.springframework.web.util.NestedServletException
-
status_ignore
whatap.confstatus_ignore=408,500,200
-
httpc_status_ignore
whatap.confhttpc_status_ignore=403,401
-
status_ignore_set
whatap.confstatus_ignore_set=/api/posts/test/timeout:200,/error:500
-
httpc_status_url_ignore_set
whatap.confhttpc_status_url_ignore_set=/api/posts/test/timeout:408,/api/apache/httpclient/posts/timeout:500
エージェント設定は、whatap.confファイルを編集するか管理 > エージェント設定メニューで確認できます。詳しい内容は、次の文書を参照してください。
メソッド例外処理
hook_method_patterns
、hook_service_patterns
オプションで設定したメソッドが実行中にExceptionを発生させる場合、当該例外はエラーとして処理されます。
Try-Catch構文を使用してメソッド内部でExceptionを処理した場合、Javaエージェントは当該Exceptionを収集対象から除外し、エラーとして処理しません。