AWS X-Rayについて


 はじめに

 こんにちは!今回はAWS X-Rayについてまとめようと思います。
DVAを学習していくうちにX-Rayについてはすこし知識不足を感じブラックベルトなどを見てきたのですが、それでも点数が伸びずらかったのでググった結果や書籍等を読みまとめようと思います。

それではよろしくお願いします(。・ω・)ノ゙

 AWS X-Rayで何ができるの??

 X-Rayを使用すると、アプリケーションの潜在的なバグを特定したりパフォーマンスのボトルネックを特定できる。またモニタリング複雑なマイクロサービス※1においてもマップで可視化してトレースで分析することが可能になる。

 ようは、X-Rayを使用することで本番環境やマイクロサービスを分析・デバッグしたりすることができる。
 X-Rayのメリットをまとめると。。。

◆リクエスト実行状況の特定
 アプリケーションを構成する個々のサービスやリソースの実行結果ステータスを集計し、アプリケーションの実行状況をEnd-to-Endで確認可能

◆アプリケーションの問題の検出
 アプリケーションの実行状況についての関連する情報を収集し、問題の根本原因を調査可能

◆アプリケーションのパフォーマンス向上
 サービスやリソースの関係をリアルタイムで表示し、レイテンシ増加やパフォーマンス低下などのボトルネックを特定可能

◆AWSとの連携
 EC2・ECS・Lambda・ElasticBeanstalkなどど連携可能

◆さまざまなアプリケーション向けの設計
 非同期のシンプルなイベントを呼び出し、3層のウェブアプリケーション、数千のサービスから構成される複雑なマイクロサービスも分析可能

 AWS X-Rayの有用なツール群

 ◆サービスマップ:トレースデータの可視化
   マイクロサービスアプリケーションにおいても把握が難しいサービス間の依存関係をわかりやすく可視化してくれる。

 ◆トレースリスト:トレースの詳細な情報
   詳細なトレースデータにアクセス可能。セグメントやサブセグメントの実行状況を可視化

 ◆アナリティクス:トレース分析用ツール
   インタラクティブな操作によって素早い分析が可能

 ◆サンプリング:トレースを取得するリクエストを絞ること
   パフォーマンスやコスト効率の観点からすべてを取得している訳ではないのでサンプリングを使うことで絞り込みが行える
   X-Rayではデータの完全性が保証されていないため、監査やコンプライアンスのツールとして使用できない

 AWS X-Rayの概念

 ◆セグメント
 動作に関するデータ
 ・リソース名(例:AWS Lambdaの関数名)
 ・リクエストの詳細(例:API経由ならエンドポイントやHTTPメソッドなど)
 ・行った作業の詳細(例:実行にかかった時間など)

 ◆サブセグメント
 呼び出しに関する追加の詳細な情報・サブセグメントはセグメントに内包される形になってる
 ・AWSのサービス
 ・外部HTTP API
 ・SQLデータベース

 ◆トレース
 1つのリクエストで生成されたセグメントの全てを収集したもの
 ・単一のリクエストに関するサービスをまたいだエンドツーエンドのデータ
 ・同じ一意のトレースIDを持つデータポイントの集合体
 ・セグメントのあつまりみたいなもん

  どのようにトレースがセグメントを管理しているか?
 ◆トレースID
  ・リクエストを追跡するためのID
  ・リクエストごとに一意
  ・基本的に最初にセグメントを生成するタイミングで生成

  セグメントの繋がり・順序はどう管理しているか?
 ◆セグメントID
   ・トレース内のセグメントに対して一意に決まる
   ・単一のサービスのリクエストを追跡するためのID
   ・親セグメントIDによってセグメントの繋がり・順序が決まる

   セグメントに情報を追加したい場合は?
 ◆注釈:検索しやすくするために
   ・フィルタ式で使用するためにインデックス化されたキーと値のペア
   ・例:"aws:api_stage":"prod"
  
 ◆メタデータ:デバッグや分析のために
   ・任意のタイプの値を持つことができるキーと値のペア
   ・フィルタ式で使用するためのインデックスは作成されない
   ・例:"game":{"id":"abcdefg","session":"hogehoge"}

 AWS X-Rayデーモン

AWS X-RayはセグメントデータをバッファリングしX-Ray APIに定期的に転送

 ・未加工のセグメントデータを収集してAWS X-Ray APIに送信
 ・UDPポート2000(デフォルト)をリッスン
 ・受信したデータをバッファリングしてAWS X-Ray APIに送信する
 ・Linux・OS X・Windows・Lambda・ElasticBeanstalkなどでサポート可能
 

 AWS X-Ray API

収集されたセグメントデータからトレースを作成

◆AWS X-Rayの全ての機能にアクセス可能
  ・トレースの追加・取得・更新
  ・グループの作成・取得・更新・削除
  ・サンプリングルールの作成・取得・更新・削除

◆利用方法
  ・HTTPS経由
  ・AWS SDK経由
  ・AWS CLI経由

◆X-Ray APIアクション
 ●PutTranceSegments
  X-Rayにトレースデータを送信します。アプリケーションからX-Rayにトレースデータを送信するためには、このアクションをIAMポリシーで許可することが必要です。
  
 ●GetServiceGraph
  サービスマップのようなJSONサービスグラフの情報を取得できます。例として、直近10分間のサービスグラフをAWS CLIで取得するコマンドを載せます。

$EPOCH=$(date +%s)
$aws xray get-service-graph --start-time $(($EPOCH-600)) --end-time
$EPOCH

 ●GetTranceSummaries
  トレースのサマリ情報を取得します

サマリ情報とは
日々蓄積される詳細データに対して、一定の決まりで集計・圧縮されたデータのこと

 ●BatchGetTrance
  トレースをIDのリストでまとめて取得できます。

 AWS X-Ray SDK

 ・これらの言語(Java・Node.js・Python・.NET・Ruby・Go)でサポートされている。
 ・トレースデータを作成してX-Rayデーモンに送信するためのクラストとメソッドを提供してくれる。
 ・単純なX-Ray APIへの操作
 ・SDKを使えばリクエストに関するメタデータを記録するためのコードを手動で実装する必要はない

 AWS X-Rayの料金と注意点

料金
 ◆記録・取得・スキャンされたトレースの数に基づいて料金が発生
 ◆永続的な無料利用枠
  ・毎月トレースの記録は10万回まで無料
  ・毎月トレースの取得とスキャンは合わせて100万回まで無料

注意点 
 ◆サンプリングについて
  ・デフォルトではサンプリングされる。
  ・100%トレースする設定も可能だが、料金とパフォーマンスへの影響を事前に確認する

 ◆データの完全性は保証されない
  ・監視やコンプライアンスのツールとしては使用することができない
 
 ◆直近30日間の追跡データが保存
  ・過去30日間の追跡データに対してクエリを実行可能

 おわりに

 AWS X-Rayについてブラックベルトや書籍などで調べていくうちにすごく便利なサービスでありマイクロアプリケーションにうってつけの分析サービスだなと感じた。
 またX-Ray SDKやX-Rayデーモンによってアプリケーションに簡単に組み込むことができる手軽さとAWSサービスと統合されていて簡単にセットアップできる利用しやすさにびっくりしました。
 これを機にもっとAWSサービスについて調べていこうと思います

 (。・ω・)ノ゙バイバイ