カスタム属性の追加
CloudWatch Application Signals は OpenTelemetry を利用してアプリケーションを自動計測し、Java、Python など、さまざまな言語で一般的なライブラリからスパンを収集します。
自動計測は、データベースクエリ、HTTP リクエスト、キャッシュアクセス、外部サービス呼び出しなどの情報をキャプチャします。これにより、アプリケーションのパフォーマンスの問題をトラブルシューティングできます。
カスタム計測を追加して、キャプチャするビジネス固有のデータやその他の情報でスパンを強化できます。このデータは、カスタム属性またはスパンイベントとして記録でき、トラブルシューティングのニーズに合わせたインサイトを提供します。
注記
別の言語でカスタム属性またはスパンイベントを追加する方法については、OpenTelemetry ウェブサイトの「言語 API と SDK
カスタム属性
ビジネス関連の属性やその他の属性は、OpenTelemetry がサポートするすべての言語でスパンに追加できます。以下は、スパンに注文 ID と顧客の詳細を追加する Java コードスニペットです。
import io.opentelemetry.api.trace.Span; public class OrderProcessor { public void processOrder() { Span span = Span.current(); span.setAttribute("order.id", "123456"); span.setAttribute("customer.name", "John Doe"); span.setAttribute("customer.id", "4343dfdd"); // Your order processing logic here System.out.println("Order processed with custom attributes"); } }
これらの属性がスパンに追加されると、トランザクション検索ビジュアルエディタで検索および分析できるようになります。
スパンイベント
スパンイベントは通常、スパン期間中の意味のある特異なポイントを示すために使用されます。例外は自動計測によってスパンイベントとして自動キャプチャされますが、支払いステータスやカート放棄などのカスタムビジネスイベントを追加することもできます。この詳細については、OpenTelemetry ウェブサイトの「スパンイベント
CloudWatch Application Signals と OpenTelemetry がサポートするすべての言語で、スパンイベントをスパンに埋め込むことができます。以下は、スパンにカスタムイベントを追加する Java コードスニペットです。
import io.opentelemetry.api.trace.Span; public class OrderProcessor { public void bookOrder() { Span span = Span.current(); // Add a booking started event span.addEvent("booking started"); // Add a payment succeeded event or failed event span.addEvent("booking failed"); } }
CloudWatch エージェントの前提条件
CloudWatch エージェントを使用してスパンイベントを X-Ray に出力する場合は、設定で `transit_spans_in_otlp_format`
フラグを有効にする必要があります。
{ "traces": { ... "transit_spans_in_otlp_format": true ... } }
これらのイベントを追加すると、トランザクション検索のビジュアルエディタで使用できるようになります。
CloudWatch Logs クエリ
CloudWatch Logs でスパンイベントをクエリして、高度なインサイトを表示できます。次のクエリコマンドの例は、アプリケーションによってスローされた例外を分析する方法を示しています。
fields jsonparse(@message) as js | unnest js.events into event | filter event.name = "exception" | display event.attributes.`exception.stacktrace`
fields jsonparse(@message) as js | unnest js.events into event | filter event.name = "exception" | stats count() by event.attributes.`exception.type`