AWS X-Rayによるアプリケーションの分析とデバッグ
- 1. アマゾン ウェブ サービス ジャパン
2017.09.26 OpsJAWS#13
AWS X-Ray による
アプリケーションの分析とデバッグ
- 5. 5
課題:モノリシック と マイクロサービス
• 分散アプリケーションはますます増加していく傾向
• Web 3層アプリケーション
• マイクロサービス・アーキテクチャ
• 世界中の多種多様な Web API との連携
• etc.
• モノリシックな(単一の)アプリケーション
→ 分析やデバッグは比較的単純
• 分散アプリケーション
→ 分析やデバッグが複雑
• 依存/連携 しあう多くの 内部/外部 サービス群のどこにボトルネックや問題があるのか
- 6. 6
課題:プロダクション と 開発環境
• プロダクション環境 と 開発環境 の違い
• 開発環境では動いていたのに、
プロダクション環境にデプロイしたら動かなくなった・・・
• いざ、プロダクション環境にデプロイしてみたら
パフォーマンスが全然出なかった・・・
• プロダクション環境で発生した障害が
開発環境では再現しない・・・
• プロダクション環境の調査は煩雑
• 関連する各アプリケーションのログの収集、フォーマット変換、そして結合
• プロダクション環境を直接プロファイリングし、
プロダクション環境を直接デバッグできたらどんなに楽か
- 27. 27
AWS X-Ray の概念 と コンポーネント
トレース 単一のリクエストに関する、サービスをまたいだ End-to-end のデータ
セグメント トレースの構成要素。個々のサービスに対応
サブセグメント セグメントの構成要素。個々のリモートコールやローカル処理に対応。
メタデータ /
アノテーション
セグメントの構成要素。トレースに追加可能な任意のビジネスデータ。
アノテーションはトレースデータのフィルタリングに使用可能。
- 36. 37
AWS X-Ray SDK がサポートする言語
Java
Node.js
C#
・.NET対応 AWS X-Ray SDKを利用
・Windows Serverの.NET: メッセージハンドラをHTTPに設定
・AWS X-Ray SDK for Javaを利用
・tomcat: サーブレットフィルタをデプロイ記述子 (web.xml) に追加
・Spring Boot: サーブレットフィルタを WebConfig クラスに追加
・他サーブレット系フレームワークでは、同様にサーブレットフィルタを追加
・X-Ray SDK for Node.js を利用
・Express:アプリケーションサーバーで SDK をミドルウェアとして追加
http://docs.aws.amazon.com/xray/latest/devguide/xray-usage.html#xray-usage-languages
Python
・ https://aws.amazon.com/jp/about-aws/whats-new/2017/08/aws-x-ray-sdk-for-python-beta/
・現在は Beta
・boto3, botocore, requests, django(>=1.10), sqlite3, mysql-connector
New!(2017.08.08)
Go
・https://aws.amazon.com/jp/about-aws/whats-new/2017/08/aws-x-ray-sdk-for-go-beta/
・現在は Beta
・Go 1.7 以上が必要。 AWS SDK for Go 1.10.0 以上に依存(コンパイル及びランタイム時)。
New!(2017.08.30)
- 37. 38
AWS X-Ray SDK for java で
サポートされるトレース・ターゲット
各種 AWS サービスへのアクセス
• Amazon DynamoDB, Amazon SQS, Amazon S3, etc.
RDB へのクエリ
• MySQL, PostgreSQL
外部への HTTP リクエスト
• Apache HttpComponents の DefaultHttpClient, HttpClientBuilder の実装を提供
その他、サブセグメントデータを手動作成すること
により任意のターゲットをトレース可能
※ 各 X-Ray SDK によって実装されている内容は異なります
http://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java.html
- 38. 39
Elastic Load Balancing との統合
• Application Load Balancer (ALB) は受信した HTTP
リクエストのヘッダに対してトレース ID という値を
追加する
• 例:
• アプリケーション内でこのヘッダの値を記録しておくこ
とで、ユーザのアクセスと AWS X-Ray のトレースを
紐付けて調査することも可能
- 43. 44
料金体系
1. トレースの記録
• 100 万件あたり 5 USD
(1 件あたり 0.000005 USD)
• 無料利用枠:10万件/月
2. トレースの取得とスキャン
• 100 万回あたり 0.5 USD
(1 件あたり 0.0000005 USD)
• 無料利用枠:100万回/月
※ 無料利用枠は永続的
• 「アカウント作成後1年以内」などの制限はなく
毎月上記の無料利用枠が適用
https://aws.amazon.com/jp/xray/pricing/
- 44. 45
ユースケース例
• 負荷試験時に AWS X-Ray を集中的に利用し、
パフォーマンスのチューニングを行う
• プロダクション環境は、
• 限られた重要な処理の URL については、すべての HTTP リクエス
トをトレースする設定とし、問題が起きた場合の個別調査を可能に
• それ以外はサンプリングを行い統計的にモニタリング
• ステージング環境や開発環境は、アクセスが多くはないので
すべての HTTP リクエストをトレースするように設定し、
問題やパフォーマンス低下を早期に発見
- 45. 46
注意点
• デフォルトでは、サンプリングされる
• すべての HTTP リクエストをトレースする設定も可能だが、
料金とパフォーマンスそれぞれへの影響を事前に確認
→ 適用する URL パスごとに設定を変えるなど
• データの完全性は保証されない
• 監査やコンプライアンスのツールとしては使用不可
• 直近 30 日間のトレースデータが保存される
• 過去 30 日間の追跡データに対してクエリを実行可能