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

48
アマゾン ウェブ サービス ジャパン 2017.09.26 OpsJAWS#13 AWS X-Ray による アプリケーションの分析とデバッグ

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

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

アマゾン ウェブ サービス ジャパン

2017.09.26 OpsJAWS#13

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

Page 2: 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.

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

3

Agenda

Web アプリケーション開発における課題

X-ray とは

AWS X-Ray の概念

AWS 各サービスとの統合

デモ

まとめ

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

4

現在の Web アプリケーションのパフォーマンスチューニングやデバッグにおける課題

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

5

課題:モノリシック と マイクロサービス

• 分散アプリケーションはますます増加していく傾向• Web 3層アプリケーション

• マイクロサービス・アーキテクチャ

• 世界中の多種多様な Web API との連携

• etc.

• モノリシックな(単一の)アプリケーション→ 分析やデバッグは比較的単純

• 分散アプリケーション→ 分析やデバッグが複雑

• 依存/連携 しあう多くの 内部/外部 サービス群のどこにボトルネックや問題があるのか

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

6

課題:プロダクション と 開発環境

• プロダクション環境 と 開発環境 の違い• 開発環境では動いていたのに、

プロダクション環境にデプロイしたら動かなくなった・・・• いざ、プロダクション環境にデプロイしてみたら

パフォーマンスが全然出なかった・・・• プロダクション環境で発生した障害が

開発環境では再現しない・・・

• プロダクション環境の調査は煩雑• 関連する各アプリケーションのログの収集、フォーマット変換、そして結合

• プロダクション環境を直接プロファイリングし、プロダクション環境を直接デバッグできたらどんなに楽か

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

AWS X-Ray が解決

7

アプリケーションやその基盤サービスの実行状況をプロダクション環境において可視化することにより

パフォーマンスの問題やエラーの根本原因を特定

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

8

X-Ray とは

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

What is X-ray?

http://ejje.weblio.jp/content/X-ray 「英和辞典 Weblio辞書」より

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

What is X-ray?

http://ejje.weblio.jp/content/X-ray 「英和辞典 Weblio辞書」より

レントゲン

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

What is X-ray(レントゲン)?

人体の

分析や画像診断

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

What is AWS X-Ray?

分散アプリケーションの

可視化と診断

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

13

X-ray(レントゲン)

人体内部の分析や画像診断

病気や怪我を見つけ、調べる

What is AWS X-Ray?

AWS X-Ray

分散アプリケーションの可視化と診断

パフォーマンス低下やエラーを見つけ、調べる

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

14

サービスマップ

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

15

サービスマップ

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

サービスマップ

各ノードの呼び出しの結果を色で分類し、割合を円グラフに

• グリーン 成功した呼び出し

• レッド 5xx errors

• イエロー 4xx errors

• パープル 429 Too Many Requests(スロットリングエラー)

平均レイテンシ (ms)

トレース数 (trace/min)

サービス名

サービスの分類

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

サービスマップ

各ノードの呼び出しの結果を色で分類し、割合を円グラフに

• グリーン 成功した呼び出し

• レッド 5xx errors

• イエロー 4xx errors

• パープル 429 Too Many Requests(スロットリングエラー)

平均レイテンシ (ms)

トレース数 (trace/min)

サービス名

サービスの分類

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

レイテンシの分散グラフ

• レイテンシをヒストグラムで表示

• x軸にかかった時間y軸にリクエストの割合

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

レイテンシの分散グラフ

• レイテンシをヒストグラムで表示

• x軸にかかった時間y軸にリクエストの割合

• 任意を範囲を選択して拡大が可能

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

レイテンシの分散グラフ

• レイテンシをヒストグラムで表示

• x軸にかかった時間y軸にリクエストの割合

• 任意を範囲を選択して拡大が可能

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

レイテンシの分散グラフ

21

• レイテンシをヒストグラムで表示

• x軸にかかった時間y軸にリクエストの割合

• 任意を範囲を選択して拡大が可能

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

トレースの概要

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

トレースの詳細

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

トレースのフィルタ

• フィルタ式を使って、特定のトレースを抽出することができる。– responsetime > 5

– duration >= 5 AND duration <= 8

– service("api.example.com") { fault = true OR responsetime > 2.5 } AND annotation.account = "12345"

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

エラーの検出

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

26

データ収集

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

27

AWS X-Ray の概念 と コンポーネント

トレース 単一のリクエストに関する、サービスをまたいだ End-to-end のデータ

セグメント トレースの構成要素。個々のサービスに対応

サブセグメント セグメントの構成要素。個々のリモートコールやローカル処理に対応。

メタデータ /

アノテーションセグメントの構成要素。トレースに追加可能な任意のビジネスデータ。アノテーションはトレースデータのフィルタリングに使用可能。

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

データ収集の動作

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

データ収集の動作

メタデータを自動でキャプチャする機能を提供

SDKからトラフィックを受信。

データを一定時間バッファしたのち X-Ray API に送信

トレースデータを送信、フィルタ、検索するためのAPIセットを提供

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

データ収集の動作

アプリケーション・サーバ

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

データ収集の動作

user

アプリケーション・サーバ

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

データ収集の動作

X-Ray SDKを使わずに、直接X-Ray APIとデータをやり取りすることも、もちろん可能

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

アプリケーション内でのトレースの動作

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

アプリケーションには X-Ray SDKを組み込む必要があるX-Ray SDKがリクエストを自動でキャプチャしセグメントデータを収集

アプリケーション内でのトレースの動作

user

RDB

Amazon

DynamoDB

Amazon

SNS

Web API /

Web Service

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

36

各 AWS サービスとの統合・連携

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

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)

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

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

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

39

Elastic Load Balancing との統合

• Application Load Balancer (ALB) は受信した HTTPリクエストのヘッダに対してトレース ID という値を追加する

• 例:

• アプリケーション内でこのヘッダの値を記録しておくことで、ユーザのアクセスと AWS X-Ray のトレースを紐付けて調査することも可能

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

40

アプリケーション実行環境との統合

AWSサービス X-Ray デーモン

Amazon EC2 手動でインストール

AWS Elastic Beanstalk 自動で有効化(※)

Amazon ECS 手動でインストール

AWS Lambda 自動で有効化(※)

※ 設定を変更することで有効化されます

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

41

アプリケーション実行環境との統合

AWSサービス X-Ray デーモン

Amazon EC2 手動でインストール

AWS Elastic Beanstalk 自動で有効化(※)

Amazon ECS 手動でインストール

AWS Lambda 自動で有効化(※)

※ 設定を変更することで有効化されます

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

42

AWS Lambda

Lambda 関数のトレースは簡単

Lambda 関数の設定変更だけでトレースを有効化

(AWS CLI なら1行)

※ 多少のメモリ消費量の増加

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

43

デモ

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

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/

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

45

ユースケース例

• 負荷試験時に AWS X-Ray を集中的に利用し、パフォーマンスのチューニングを行う

• プロダクション環境は、• 限られた重要な処理の URL については、すべての HTTP リクエス

トをトレースする設定とし、問題が起きた場合の個別調査を可能に

• それ以外はサンプリングを行い統計的にモニタリング

• ステージング環境や開発環境は、アクセスが多くはないのですべての HTTP リクエストをトレースするように設定し、問題やパフォーマンス低下を早期に発見

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

46

注意点

• デフォルトでは、サンプリングされる• すべての HTTP リクエストをトレースする設定も可能だが、

料金とパフォーマンスそれぞれへの影響を事前に確認→ 適用する URL パスごとに設定を変えるなど

• データの完全性は保証されない• 監査やコンプライアンスのツールとしては使用不可

• 直近 30 日間のトレースデータが保存される• 過去 30 日間の追跡データに対してクエリを実行可能

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

47

まとめ

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

48

まとめ

本番環境のアプリケーションの問題を検出しパフォーマンスのボトルネックを可視化

分散アプリケーションの状態把握とデバックを容易に

AWS X-Ray と各種 AWS サービスとの強力なインテグレーション

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

49