AWSにはたくさんのサービスあり、ドキュメントも豊富ですがすべてに目を通すのは時間かかりますよね。
本記事はX-Rayについて簡単にまとめており、次の内容を説明します。
- X-Rayとはどのようなサービスなのか
- X-Rayの概念
- アプリケーション分析のツール
- X-Rayのデータ収集の仕組み
これらを読むことで、効率よくX-Rayの全体像を捉えることができます。
X-Rayのことが全く知らない方や、AWS認定試験の受験者向けの内容になっているので当てはまる方はぜひ活用してください。
なお本記事はBlack Beltの資料から、X-Rayの大切だと感じた箇所をまとめています。
より詳しい、内容が知りたい方はAWS サービス別資料の「X-Ray」をご確認してください。
※本記事の内容は、2021年10月8日時点の仕様となります。
目次
X-Rayとはどのようなサービスなのか
X-Rayが何のためのサービスか理解するには、アプリケーションのアーキテクチャの特徴を簡単に捉えておくと分かりやすいです。
モノリシックとマイクロサービスについて
モノリシックアプリケーションとは多数の機能を単一プロセスで稼働するアプリケーションです。
モノリスの課題として、次のことが挙げられます。
- 大規模アプリになると微量なバグ修正でもアプリケーション全体に影響が及ぶため、リリース高速なイテレーションが難しい。
- 単一プロセスで動作しているため特定の機能のみのスケーリングが難しい。
- 特定の機能で発生した不具合が障害が全体に影響がおよび、サービスが停止してしまう可能性がある。
それに対してマイクロサービスアプリケーションは少数のまとまった機能を持つ複数のサービスで構成されたアプリケーションです。
各サービスが独立したプロセスとして稼働しており、それぞれのサービスが通信でやり取りを行っている。
そして、それぞれ動作環境も独立しているため最適な環境を選択することができるサーバレスやコンテナと相性が良いです。
各サービスが独立していることによって次のようなメリットがあります。
- 各サービスで独立しているので高速な開発・デプロイすることが可能。
- 各サービスで独立しているので効率的なスケーリングができる。
- 障害の直接的な影響が各サービス内に閉じているため、障害が発生してもサービス全体に影響を与える可能性が低い。
マイクロサービスの課題
マイクロサービスには各サービスで独立したことによって障害対応・パフォーマンス分析の難しさがマイクロサービスの課題となっています。
X-Rayの概要とメリット
X-Rayはマイクロサービスの課題となっている障害対応・パフォーマンス分析を解決するためのサービスです。
X-Rayを使うことで各サービスの関係性、通信のレイテンシー、HTTPステータスが視覚的に確認できるようにしてどこで問題が発生しているか分かるようになります。
そして、X-Rayを導入することで次のようなメリットがあります。
- リクエスト実行状況の確認
- アプリケーションの問題の検出
- アプリケーションのパフォーマンス向上
- AWSとの連携(本記事では細かい内容を取り上げません)
- さまざまなアプリケーション向けの設計 (本記事では細かい内容を取り上げません)
X-Rayの概念
次にX-Rayに登場する様々な概念について説明します。
基本的な概念
X-Rayに登場する基本的な概念を説明します。
- トレース
- 1つのリクエストのEnd-to-Endで生成されたすべてのセグメントを収集したもの。
- 基本的にリクエストとトレースは1対1。
- セグメント
- Lambdaなどの各AWSサービスの動作に関するデータ。
- リソース名、リクエストの詳細、行った作業の詳細などの情報。
- サブセグメント
- セグメントに内包される情報。
- AWSサービスから他のサービスへの呼び出しに関する追加の詳細な情報。
- AWSのサービス、外部HTTP API、SQLデータベースなどを呼び出した時の情報。
- カスタムサブセグメント(40スライド目)
- 追加情報が付与されたサブセグメント。
- 監視・計測したい機能ごとにサブセグメントとして切り出すことも可能。
- 注釈、アノテーション(25スライド目)
- セグメントまたはカスタムサブセグメントに追加する情報。
- 検索しやすくするための情報を追加する。
- フィルタ式で使用するたインデックス化されたキー-バリュー形式で値を追加できる
- メタデータ(25スライド目)
- セグメントまたはカスタムサブセグメントに追加する情報。
- デバッグや分析のための詳細情報を追加する。
- インデックスは作成されないのでフィルタ式で使用できない。
- サンプリング(60スライド目)
- サンプリングルールに従いトレースに保存するリクエストをコントロールする。
- リクエスト数をコントロールして使用料金やアプリケーションのパフォーマンスを調整する。
トレース、セグメントの伝搬方法
トレース、セグメントを伝搬方法と使用するパラメタを紹介します。
- トレースヘッダ(
X-Amzn-Trace-Id
)- リクエストの際にトレースヘッダに以下の情報を設定することでトレースとセグメントの情報を伝搬する。
- 例:
X-Amzn-Trace-Id: Root=1-57…93;Parent=53…d8;Sampled=1
Root
:トレースIDを設定。Parent
:親セグメントIDを設定。Sampled
サンプリングデシジョン。サンプリング対象か否か (1=true, 0=false)を設定。
- トレースID
- リクエストを追跡・一意するためのID。
- トレースIDをセグメントを生成するタイミングでを付与し、トレースに含まれるセグメントを管理する。
- セグメントID
- トレース内のセグメントに対して一意にするためのID。
- 先に呼び出さたサービスのセグメントID(親セグメントID)を保持することでセグメントのつながり・順番を管理する。
- 一番最初に呼び出されるセグメントは親セグメントIDはない。
分析で登場する概念
- フィルタリングされたトレースセット
- アナリティクスで表示された可視化されているトレースのグラフやテーブルを選択してフィルタリングしたトレース情報
- アナリティクスで利用する。
- グループ(35スライド目)
- フィルタ式で定義されるトレースのコレクション。
- サービスマップ、トレースリスト、アナリティクスで利用可能。
- グループを作成するとCloudWatchにメトリクスを作成することができる。
- 問題のあるトレースのグループを作成して一定数を超えたらアラートを出すことができる。
- フィルタ式(33スライド目)
- トレースを絞り込むための機能。
- トレースリストとアナリティクスで利用する。
- 総所要時間、レスポンスステータス、特定のサービスを含んだリクエスト、特定のサービス間の接続などで絞り込むことができる。
アプリケーション分析
X-Rayは大きく分けると3つの機能があり、それらを使ってアプリケーションから登録されたトレースを分析します。
- サービスマップ
- トレースデータの可視化するツール。
- End-to-Endでサービス間で行われるリクエストを俯瞰して確認することができる。
- トレースリスト
- セグメント・サブセグメントを含むトレースの実行状況の詳細情報を確認するツール。
- アナリティクス
- トレースを分析するインタラクティブなツール。
- 応答時間の分布 : 指定された応答時間におけるトレース数を示すグラフ。特定の応答時間で絞り込む場合に利用する。
- 時系列アクティビティ : 指定された時間のトレース数を示すグラフ。特定の時間帯で絞り込む場合に利用する。
- メトリクステーブル : HTTPメソッドやステータスコードなど様々な属性で分類されたとトレースのテーブル。
X-Rayのデータ収集の仕組み
各登場人物と役割を把握することでデータ収集の仕組みが理解しやすくなります。
- アプリケーション(AWS X-Ray SDK)
- アプリケーション側でX-Ray SDKを使用してセグメントデータを作成をX-Rayデーモンに送信する。
- AWS X-Rayデーモン
- アプリケーションから受け取ったセグメントデータをバッファリングしX-Ray APIに定期的に転送する。
- UDPポート2000 (デフォルト) をリッスンする。
- スクリプト・ツール(AWS SDK、AWS CLI)
- AWS SDK、AWS CLIを利用することでX-Ray SDKを使わずに直接X-Ray APIとデータのやり取りをすることも可能。
- AWS X-Ray API
- 収集されたセグメントデータからトレースを作成。
- AWS X-Rayの全ての機能にアクセス可能
- トレースの追加・取得・更新
- グループの作成・取得・更新・削除
- サンプリングルールの作成・取得・更新・削除
- AWS X-Rayコンソール
- トレースをコンソールで可視化分析・デバッグを行う。
まとめ
以上、要点を絞ってX-Rayについて説明をしました。
より詳しい内容を知りたい方AWS サービス別資料の「X-Ray」に資料があるのでご確認してください。
AWS認定試験の合格体験記や勉強方法について記事にしているので、興味がある方は読んでみてください。