#aws_serverless
Introduction to AWS X-Ray
Keisuke Nishitani (@Keisuke69)
Amazon Web Services Japan K.K.
Dec 07, 2016
#aws_serverless
Profile
Keisuke Nishitani
Specialist Solutions Architect, Amazon Web Service Japan K.K
@Keisuke69 Keisuke69
✤ Specialist SA
- Serverless
- Mobile
- DevOps
- Application Service
✤ ソーシャルで⾚ドクロの⼈です
✤ RESTおじさん
✤ 餃⼦の王将エヴァンジェリスト(⾃称)
✤ ⾳楽が好きです、フジロッカーです、今年も⾏きました
✤ ブログ: http://keisuke69.hatenablog.jp/
Keisuke69 Keisuke69Keisuke69x
#aws_serverless
アプリケーションのデバッグとは
#aws_serverless
Development vs production
✤ 従来のデバッグで必要とされていたこと:
⎻ 開発環境
⎻ 問題を再現する⼿がかりをログを通して検索
⎻ コード内にブレークポイントをセットして実⾏を停⽌し、変数やコールスタックの調
査
⎻ 必要に応じてログ出⼒を追加し、アプリケーションを再デプロイ
⎻ 問題がFixされるまで繰り返す
✤ 伝統的なデバッグプロセスは、本番アプリケーションやサービス指向、マ
イクロサービス、またはサーバーレスのアーキテクチャで構築されたアプ
リケーションには適していません
✤ 退屈で、繰り返し、時間がかかる
#aws_serverless
モノリシック vs サービス志向アプリケーション
✤ モノリシックなアーキテクチャで伝統的に開発されたアプリケーション
✤ モノリシックアプリケーション・アーキテクチャの⽋点を克服するための
サービス志向(マイクロサービス)アーキテクチャへの移⾏
✤ ただし、マイクロサービスにはそれ独⾃の課題がある
利点:
• シンプルな開発
• シンプルなテストとデバッグ
• シンプルなデプロイ
• シンプルなスケール
⽋点:
• 速い反復の難しさ
• 効果的なスケールの難しさ
• CI/CDに時間がかかり、難しさ
• 信頼性の課題 — シングルコンポーネント
に伴う問題はアプリ全体のダウンを引き
起こす
#aws_serverless
チャレンジ
✤ サービス志向アプリケーションのデプロイと管理はモノリシックアプ
リケーションと⽐べより効果的になる
✤ AWS Lambda, Amazon EC2 Container Service, AWS Elastic
Beanstalk, AWS CloudFormationなどといったサービスは数百のサー
ビスからなるアプリケーションのデプロイと管理を簡単にする
✤ 以下のような理由により、本番アプリケーションでアプリケーション
の問題をデバッグすることは依然として難しい:
⎻ Cross-service interactionsサービス間の相互作⽤
⎻ サービスごとに異なるログフォーマット
⎻ サービス群からログを収集し、集約し、照合すること
#aws_serverless
解決策
✤ AWS X-Rayができること
⎻ パフォーマンスボトルネックとエラーの特定
⎻ アプリケーション内の特定サービスへの問題を特定
⎻ アプリケーションのユーザに対する問題のインパクトを特定
⎻ アプリケーションのサービスコールグラフの可視化
#aws_serverless
X-Rayがどのように役⽴つか?
#aws_serverless
X-Ray
#aws_serverless
X-Ray SDK
✤ Java、.NET、Node.jsで利⽤可能
✤ 以下への呼び出しに対するメターデータを⾃動的にキャプチャする
フィルタを追加
⎻ AWS SDKを利⽤したAWSサービス
⎻ HTTPやHTTPSを通したAWS以外のサービス
⎻ データベース(MySQL, PostgreSQL、そしてAmazon DynamoDB)
⎻ キュー(Amazon SQS)
✤ リクエストに関するメタデータを記録するためのアプリケーション
コードを⼿動で実装することなく今すぐに始められます。
#aws_serverless
X-Ray daemon
✤ UDPでSDKからデータを受信し、ローカルバッファとして振る舞う
✤ データはバックエンドに対して毎秒、もしくはローカルバッファが
いっぱいになるとフラッシュされる
✤ Amazon Linux AMI、RHEL、Ubuntu、OS XとWindowsで利⽤可能
#aws_serverless
コンセプト
#aws_serverless
X-Rayのコンセプト
Trace サービスをまたがった単⼀リクエストに関連したエンド
ツーエンドのデータ
Segments 1つのサービスに対応するトレースの⼀部
Sub-segments サービス内でのリモートコールもしくはローカルコン
ピュートのセクション
Annotations トレースをフィルタするのに使⽤できるビジネスデータ
Metadata トレースに対して付与できるビジネスデータ
ただし、トレースのフィルタリングには使⽤されない
Errors 正規化されたエラーメッセージとスタックトレース
Sampling トレースとして取得するアプリケーションへのリエストの
割合
設定サンプル
{
"rules": {
"move": {
"id": 1,
"service_name": "*",
"http_method": "*",
"url_path": "/api/move/*",
"fixed_target": 0,
"rate": 0.05
},
"base": {
"id": 2,
"service_name": "*",
"http_method": "*",
"url_path": "*",
"fixed_target": 1,
"rate": 0.1
}
}
}
この例では2つのルールを定義
最初のルールは/api/move以下のパスへのリクエ
ストを最⼩数を指定せず5%のサンプリングレー
トを適⽤
2つ⽬は1秒ごとに最初のリクエストと追加リク
エストの10%をトレースするというデフォルト
のサンプリングルールをオーバーライド
#aws_serverless
API
#aws_serverless
X-Ray API
✤ X-Rayはトレースデータを送信、フィルタ、検索するためのAPIセットを提
供
✤ SDKを利⽤する必要なくサービスに対して直接トレースデータを送信可能
(例えば、現在サポートされていない⾔語のSDKを⾃前で書くことも可
能)
✤ Batch get APIを使ってロートレースデータを利⽤可能
✤ X-Rayにより集められたデータの上で独⾃のデータ分析アプリを構築可能
#aws_serverless
X-Ray API
PutTraceSegments AWS X-Rayへセグメントのドキュメントをアップ
ロード
BatchGetTraces IDにより指定されたトレースのリストを検索
GetServiceGraph アプリケーションとコネクション内でサービスを⽰
すドキュメントを検索
GetTraceSummaries オプションのフィルタを使⽤して、指定された時間
枠で使⽤可能なトレースのIDとメタデータを取得し
ます。
#aws_serverless
Use cases
#aws_serverless
サービスコールグラフの可視化
#aws_serverless
影響の特定
#aws_serverless
影響の特定
#aws_serverless
パフォーマンスボトルネックの特定
#aws_serverless
パフォーマンスボトルネックの特定
#aws_serverless
パフォーマンスボトルネックの特定
#aws_serverless
パフォーマンスボトルネックの特定
#aws_serverless
問題の特定
#aws_serverless
問題の特定
#aws_serverless
問題の特定
#aws_serverless
エージェントのインストール
#aws_serverless
Agentのインストール(Amazon EC2 Linux)
#aws_serverless
Agentのインストール (Amazon EC2 Windows)
#aws_serverless
Agentのインストール (Amazon ECS)
#aws_serverless
Applicationへの実装(Node.js)
//Add aws-xray-sdk package to package.json
var XRay = require('aws-xray-sdk');
var AWS = captureAWS(require('aws-sdk'));
…
XRay.config([XRay.plugins.EC2]);
XRay.captureHTTPs(http);
XRay.setDefaultName('myfrontend-dev');
…
app.use(XRay.express.openSegment());
app.get('/', function(req, res) {
…
});
…
app.use(XRay.express.closeSegment());
#aws_serverless
Pricing
#aws_serverless
X-Ray価格
✤ プレビュー期間中は無料:
✤ 無料枠
⎻ 記録された最初の100,000トレース/⽉は無料
⎻ 検索されたり、スキャンされた最初の1,000,000トレース/⽉は無料
✤ 追加課⾦
⎻ 無料枠を超えて、記録されたトレースは100万トレースあたり$5.00/⽉
⎻ 無料枠を超えて、検索もしくはスキャンされたトレースは$0.5/⽉
#aws_serverless
サーバレス個別相談会やります
✤ 1⽉12⽇(⽊)にサーバレスに関する個別技術相談会を開催します
✤ サーバレスなシステムに関するアーキテクチャ相談
✤ 1スロット、45分で7スロット受け付け予定
✤ 要事前登録
✤ もちろん無料
https://aws-serverless.connpass.com/event/45337/
#aws_serverless

Introduction to AWS X-Ray