AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeDeploy
AWS X-Rayによるアプリケーションの分析とデバッグ
-
Upload
amazon-web-services-japan -
Category
Technology
-
view
467 -
download
0
Transcript of AWS X-Rayによるアプリケーションの分析とデバッグ
アマゾン ウェブ サービス ジャパン
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