米国ラスベガスで開催されたAWS re:Invent 2016カンファレンスにおいて,AWS X-Rayという名称の分散トレースサービスが,全12パブリックAWSリージョンを対象とするプレビューとしてリリースされた。GoogleのDapperやTwitterのZipkin,Open Tracing APIなどと同じように,AWS X-Rayは,マイクロサービスアーキテクチャスタイルを使用したような分散アプリケーションの解析とデバッグにおいて,開発者の作業を支援する。‘サービスマップ’のトポロジ的な表示,グラフィック形式の分散トレース,記録済みの全トレースの照会可能なリストなどを提供するWebベースのUIも合わせて提供される。
AWSブログでJeff Barr氏が論じているように,過去数年間におけるソフトウェアアプリケーションの設計とデプロイメントは,より複雑な分散型‘サービスベース’システムへと向かっている。それによって,特に大規模システムにおける動作パターンを見た場合,ソフトウェアアプリケーションのデバッグ作業も変化しているのだ。
クラウドコンピューティングとマイクロサービス,非同期な通知ベースのアーキテクチャの組み合わせは,数百ないし数千という可動部分を備えたシステムを現実のものにしました。このように複雑なシステムにおいて,パフォーマンス問題の識別や対処に関わる問題は増加の一途であり,サービス個々のレベルの監視結果を集約して,意味のあるトップレベルの結論を得ることも難しくなっています。
このようなクラウドベースの分散システムを構築ないし運用する上で主要な課題となるのが,アプリケーションサービス,コンテナ,計算インスタンス,データベース・アズ・ア・サービス,メッセージング・アズ・ア・サービスを横断して実行される, “スレッド追跡(following-the-thread)”に関連する解析作業だ。
AWS X-Rayは,AWS環境にデプロイされたシステム全体を通過するリクエストの追跡を行なう。アプリケーションを構成する個々のサービスによって生成されたデータを集約し, ‘アプリケーションの動作に関するエンド・ツー・エンドのビュー’を提供する。AWS X-Rayのトレーシング機能によって任意のリクエストパスのフォローが可能になり,アプリケーションのどの部分でパフォーマンス問題が起きているかを特定することが可能になる。さらにAWS X-Rayには,トレースに関するメタデータを追加するアノテーションも用意されているので,トレースデータのタグ付けやフィルタを行なうこともできる。
リリースを詳説したAWSブログの記事によると,AWS X-RayはAmazon EC2,Amazon EC2 Containerサービス(Amazon ECS),AWS Elastic Beanstalk,Amazon API Gatewayで動作する。Java,Node.js,.NETで記述され,これらのサービス上にデプロイされるアプリケーションでは,AWS X-Ray SDKを使用することで,アプリケーションが生成し,複数のAWSアカウントやAWSリージョン,アベイラビリティゾーンにまたがるリクエストをトレースすることが可能だ。AWS Lambdaのサポートも近日中に提供される。
AWS X-Rayは,ユニークIDを持たないHTTPヘッダリクエストに対してユニークIDを含むヘッダ情報を追加し,リクエストハンドラの他の層にそのヘッダを渡すという,‘スレッド追跡(follow-the-thread)’トレース機能を実装している。各ポイントで収集されたデータはセグメント(OpenTracing API仕様のスパン(Span)に相当)と呼ばれ,JSONデータのチャンクとして保存される。セグメントは作業単位を表現するもので,リクエストとレスポンスのタイミングの他,より小さな作業単位を表すサブセグメントを含むことも可能だ。CNCFの支援するOpen TracingイニシアティブのコアコミッタであるAdrian Cole氏はTwitterで,AWS X-Rayのセグメントデータ形式が“極めて微細な構造”を持っていることを指摘している。
AWS X-Rayの資料には,セグメントの‘統計的に意味のある’サンプルがX-Rayにルートされるという説明がある。AWS X-Ray SDKはサービスに直接データを送るのではなく,AWS X-Rayデーモンにトレースデータを送信する。そのためにX-Rayデーモンは,関連するEC2インスタンスないし各ECSコンテナ内で必ず動作していなくてはならない。デーモンは複数のリクエストに関するセグメントを収集した上で,これをバッチを使ってアップロードする。収集されたトレースデータはAWS X-RayのWebベースUI内で参照したり,AWS X-Ray APIとAWS CLI経由でアクセスしたりすることが可能だ。
AWS X-Rayに関する詳しい情報は,AWSブログの記事 “AWS X-Ray – See Inside of Your Distributed Application”,AWS X-Rayプロダクトページ,AWS X-Rayの資料で確認することができる。
この記事を評価
- 編集者評
- 編集長アクション