X-Ray SDK for Java を使用してカスタムサブセグメントを生成する - AWS X-Ray

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

X-Ray SDK for Java を使用してカスタムサブセグメントを生成する

サブセグメントは、リクエストを処理するために行われた作業の詳細で、トレースのセグメントを拡張します。計測対象クライアントで呼び出しを行うたびに、X-Ray SDK は、サブセグメントで生成された情報を記録します。追加のサブセグメントを作成して、他のサブセグメントをグループ化したり、コードセクションのパフォーマンスを測定したり、注釈やメタデータを記録することができます。

サブセグメントを管理するには、beginSubsegment および endSubsegment メソッドを使用します。

例 GameModel.java - カスタムサブセグメント

import com.amazonaws.xray.AWSXRay; ... public void saveGame(Game game) throws SessionNotFoundException { // wrap in subsegment Subsegment subsegment = AWSXRay.beginSubsegment("Save Game"); try { // check session String sessionId = game.getSession(); if (sessionModel.loadSession(sessionId) == null ) { throw new SessionNotFoundException(sessionId); } mapper.save(game); } catch (Exception e) { subsegment.addException(e); throw e; } finally { AWSXRay.endSubsegment(); } }

この例では、サブセグメント内のコードが、セッションモデルのメソッドを使用して DynamoDB からゲームのセッションをロードし、AWS SDK for Java の DynamoDB マッパーを使用してゲームを保存します。このコードをサブセグメントにラップすることで、呼び出しが Save Game サブセグメントの DynamoDB の子としてコンソールのトレースビューに表示されます。

サブセグメントのコードがチェック例外をスローした場合は、try ブロックにコードをラップして、finally ブロックで AWSXRay.endSubsegment() を呼び出し、常にサブセグメントが閉じられるようにします。サブセグメントが閉じていない場合は、親セグメントが完了できず、X-Ray に送信されません。

チェック例外をスローしないコードの場合は、コードを Lambda 関数として AWSXRay.CreateSubsegment に渡すことができます。

例 Lambda 関数のサブセグメント

import com.amazonaws.xray.AWSXRay; AWSXRay.createSubsegment("getMovies", (subsegment) -> { // function code });

セグメントまたは別のサブセグメント内にサブセグメントを作成する場合、X-Ray SDK for Java によってその ID が生成され、開始時刻と終了時刻が記録されます。

例 サブセグメントとメタデータ

"subsegments": [{ "id": "6f1605cd8a07cb70", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "Custom subsegment for UserModel.saveUser function", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } },