SlideShare a Scribd company logo
アマゾン ウェブ サービス ジャパン
2017.09.26 OpsJAWS#13
AWS X-Ray による
アプリケーションの分析とデバッグ
内容についての注意点
本資料では2017年9月26日時点のサービス内容および価格についてご説明しています。最新の情報は
AWS公式ウェブサイト(http://aws.amazon.com)にてご確認ください。
• 資料作成には十分注意しておりますが、資料内の価格とAWS公式ウェブサイト記載の価格に相違が
あった場合、AWS公式ウェブサイトの価格を優先とさせていただきます。
• 価格は税抜表記となっています。日本居住者のお客様が東京リージョンを使用する場合、別途消費税
をご請求させていただきます。
AWS does not offer binding price quotes. AWS pricing is publicly available and is subject to
change in accordance with the AWS Customer Agreement available at
http://aws.amazon.com/agreement/. Any pricing information included in this document is
provided only as an estimate of usage charges for AWS services based on certain information
that you have provided. Monthly charges will be based on your actual use of AWS services, and
may vary from the estimates provided.
3
Agenda
Web アプリケーション開発における課題
X-ray とは
AWS X-Ray の概念
AWS 各サービスとの統合
デモ
まとめ
4
現在の Web アプリケーションの
パフォーマンスチューニングや
デバッグにおける課題
5
課題:モノリシック と マイクロサービス
• 分散アプリケーションはますます増加していく傾向
• Web 3層アプリケーション
• マイクロサービス・アーキテクチャ
• 世界中の多種多様な Web API との連携
• etc.
• モノリシックな(単一の)アプリケーション
→ 分析やデバッグは比較的単純
• 分散アプリケーション
→ 分析やデバッグが複雑
• 依存/連携 しあう多くの 内部/外部 サービス群のどこにボトルネックや問題があるのか
6
課題:プロダクション と 開発環境
• プロダクション環境 と 開発環境 の違い
• 開発環境では動いていたのに、
プロダクション環境にデプロイしたら動かなくなった・・・
• いざ、プロダクション環境にデプロイしてみたら
パフォーマンスが全然出なかった・・・
• プロダクション環境で発生した障害が
開発環境では再現しない・・・
• プロダクション環境の調査は煩雑
• 関連する各アプリケーションのログの収集、フォーマット変換、そして結合
• プロダクション環境を直接プロファイリングし、
プロダクション環境を直接デバッグできたらどんなに楽か
AWS X-Ray が解決
7
アプリケーションやその基盤サービスの実行状況を
プロダクション環境において可視化することにより
パフォーマンスの問題やエラーの根本原因を特定
8
X-Ray とは
What is X-ray?
http://ejje.weblio.jp/content/X-ray 「英和辞典 Weblio辞書」より
What is X-ray?
http://ejje.weblio.jp/content/X-ray 「英和辞典 Weblio辞書」より
レントゲン
What is X-ray(レントゲン)?
人体の
分析や画像診断
What is AWS X-Ray?
分散アプリケーションの
可視化と診断
13
X-ray(レントゲン)
人体内部の
分析や画像診断
病気や怪我を
見つけ、調べる
What is AWS X-Ray?
AWS X-Ray
分散アプリケーションの
可視化と診断
パフォーマンス低下やエラーを
見つけ、調べる
14
サービスマップ
15
サービスマップ
サービスマップ
各ノードの呼び出しの結果を
色で分類し、割合を円グラフに
• グリーン 成功した呼び出し
• レッド 5xx errors
• イエロー 4xx errors
• パープル 429 Too Many Requests
(スロットリングエラー)
平均レイテンシ (ms)
トレース数 (trace/min)
サービス名
サービスの分類
サービスマップ
各ノードの呼び出しの結果を
色で分類し、割合を円グラフに
• グリーン 成功した呼び出し
• レッド 5xx errors
• イエロー 4xx errors
• パープル 429 Too Many Requests
(スロットリングエラー)
平均レイテンシ (ms)
トレース数 (trace/min)
サービス名
サービスの分類
レイテンシの分散グラフ
• レイテンシを
ヒストグラムで表示
• x軸にかかった時間
y軸にリクエストの割合
レイテンシの分散グラフ
• レイテンシを
ヒストグラムで表示
• x軸にかかった時間
y軸にリクエストの割合
• 任意を範囲を選択して
拡大が可能
レイテンシの分散グラフ
• レイテンシを
ヒストグラムで表示
• x軸にかかった時間
y軸にリクエストの割合
• 任意を範囲を選択して
拡大が可能
レイテンシの分散グラフ
21
• レイテンシを
ヒストグラムで表示
• x軸にかかった時間
y軸にリクエストの割合
• 任意を範囲を選択して
拡大が可能
トレースの概要
トレースの詳細
トレースのフィルタ
• フィルタ式を使って、特定のトレースを抽出することができる。
– responsetime > 5
– duration >= 5 AND duration <= 8
– service("api.example.com") { fault = true OR responsetime > 2.5 } AND annotation.account = "12345"
エラーの検出
26
データ収集
27
AWS X-Ray の概念 と コンポーネント
トレース 単一のリクエストに関する、サービスをまたいだ End-to-end のデータ
セグメント トレースの構成要素。個々のサービスに対応
サブセグメント セグメントの構成要素。個々のリモートコールやローカル処理に対応。
メタデータ /
アノテーション
セグメントの構成要素。トレースに追加可能な任意のビジネスデータ。
アノテーションはトレースデータのフィルタリングに使用可能。
データ収集の動作
データ収集の動作
メタデータを自動で
キャプチャする機能を提供
SDK からトラフィックを受信。
データを一定時間バッファし
たのち X-Ray API に送信
トレースデータを送信、
フィルタ、検索するため
のAPIセットを提供
データ収集の動作
アプリケーション・サーバ
データ収集の動作
user
アプリケーション・サーバ
データ収集の動作
X-Ray SDKを使わずに、直接X-Ray APIと
データをやり取りすることも、もちろん可能
アプリケーション内でのトレースの動作
アプリケーションには X-Ray SDKを組み込む必要がある
X-Ray SDK がリクエストを自動でキャプチャしセグメントデータを収集
アプリケーション内でのトレースの動作
user
RDB
Amazon
DynamoDB
Amazon
SNS
Web API /
Web Service
36
各 AWS サービスとの統合・連携
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)
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
39
Elastic Load Balancing との統合
• Application Load Balancer (ALB) は受信した HTTP
リクエストのヘッダに対してトレース ID という値を
追加する
• 例:
• アプリケーション内でこのヘッダの値を記録しておくこ
とで、ユーザのアクセスと AWS X-Ray のトレースを
紐付けて調査することも可能
40
アプリケーション実行環境との統合
AWSサービス X-Ray デーモン
Amazon EC2 手動でインストール
AWS Elastic Beanstalk 自動で有効化(※)
Amazon ECS 手動でインストール
AWS Lambda 自動で有効化(※)
※ 設定を変更することで有効化されます
41
アプリケーション実行環境との統合
AWSサービス X-Ray デーモン
Amazon EC2 手動でインストール
AWS Elastic Beanstalk 自動で有効化(※)
Amazon ECS 手動でインストール
AWS Lambda 自動で有効化(※)
※ 設定を変更することで有効化されます
42
AWS Lambda
Lambda 関数のトレースは簡単
Lambda 関数の設定変更
だけでトレースを有効化
(AWS CLI なら1行)
※ 多少のメモリ消費量の増加
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/
45
ユースケース例
• 負荷試験時に AWS X-Ray を集中的に利用し、
パフォーマンスのチューニングを行う
• プロダクション環境は、
• 限られた重要な処理の URL については、すべての HTTP リクエス
トをトレースする設定とし、問題が起きた場合の個別調査を可能に
• それ以外はサンプリングを行い統計的にモニタリング
• ステージング環境や開発環境は、アクセスが多くはないので
すべての HTTP リクエストをトレースするように設定し、
問題やパフォーマンス低下を早期に発見
46
注意点
• デフォルトでは、サンプリングされる
• すべての HTTP リクエストをトレースする設定も可能だが、
料金とパフォーマンスそれぞれへの影響を事前に確認
→ 適用する URL パスごとに設定を変えるなど
• データの完全性は保証されない
• 監査やコンプライアンスのツールとしては使用不可
• 直近 30 日間のトレースデータが保存される
• 過去 30 日間の追跡データに対してクエリを実行可能
47
まとめ
48
まとめ
本番環境のアプリケーションの問題を検出し
パフォーマンスのボトルネックを可視化
分散アプリケーションの状態把握とデバックを容易に
AWS X-Ray と各種 AWS サービスとの
強力なインテグレーション
49

More Related Content

AWS X-Rayによるアプリケーションの分析とデバッグ