【レポート】ExpediaにおけるAmazonESを利用したLog解析 #reinvent #ABD331

原題

ADB331 - Log Analytics at Expedia Using Amazon Elasticsearch Service

概要

超大手の旅行予約サイトのExpediaの中で利用されているAmazonESを利用したLog解析のアーキテクチャに関する紹介のセッションです。こちらを聴講してきましたので印象に残った部分やとても興味深かった箇所を中心にレポートします。

登壇

  • Carl Meadows - Principal Product Manager
  • Kuldeep Chowhan - Principal Software Dev Engineer, Expedia Inc

セッションレポート

最初の10分程度はAmazonESの特徴や利点、なぜ利用するかなどを話し、その後Expedia内部ではどのようなログ構成を取っているか、それについて気をつけることをなどについて。特に具体的にどのようなLogアーキテクチャを利用しているかなど、実際のダッシュボード画面などを含めて紹介されていました。

導入

  • Machineが生成するデータの増加率はビジネスデータの10倍以上
  • open sourceを利用している
  • ESはELKスタックを提供している。ElasticSearch, Logstash, Kibana
  • ESのユースケース
    • アプリケーションモニタリング
    • IoT/Mobile、Security Information
    • Event Management

ExpediaではAmazonESを利用している

  • 5つの異なるLogアーキテクチャ
  • AmazonES 150以上のインスタンス(Instance Typeは異なる)
  • 450以上のEC2インスタンス
  • ~30B documents
  • ~30TB データ

なぜAmazonESを選んだのか

  • セットアップが容易。コンソールで数回ポチポチするだけ。
  • 簡単に可用性の高い構成がセットアップできる
  • セキュリティ。IAMのアクセスポリシーでリソースへのアクセスを制限
  • モニタリングとバックアップ
  • 他のAWSサービスとのシナジー
  • 多くの採用企業の存在
  • ストレージオプションによる柔軟性

Log Architecture

Expediaでは5つの異なるLog Architectureを構成し、ESを利用している。

docker startup logs to ES

  • DockerのスタートアップログをESで管理している

AmazonECS -log driver(ECS agent)-> docker -log driver(Docker)-> fluentd -(Forward Logs)-> AmazonES service -- Kibana(visualize)

AWS CloudTrail log analytics using AmazonES

  • CloudTrailのログを解析するためにAmazonESを利用している
  • API呼び出しのTop10を表示するDashboardなどを集計するのに利用
  • https://github.com/ExpediaDotCom/cloudtrail-log-analytics

AWS cloudtrail --log delivery--> Amazon S3 --message to sns--> AmazonSNS --triggers lambda--> Lambda --store--> AmazonES---kibana(visualize)

引用: https://github.com/ExpediaDotCom/cloudtrail-log-analytics

CI/CD platform KPIs using AmazonES

  • Success, Failed, Fallback等をビジュアライズ

Ruby/Nodejs app --deploy/release--> AmazonSNS --trigger--> Lambda --filter/decolate--> AmazonES -- nodejs(query for KPI dashboard)

Distributing tracing platform using AmazonES

  • 分散トレース環境をAmazonESを利用して構成
  • KinesisとWorkerを利用してTrace情報を管理
  • Trace情報に対して時間ベースでのクエリ
  • サービスごとにTrace情報をFilter

Microservices -telemetry(Trace)-> Java Library -Kinesis-> Amazon Kinesis <-from Kinesis(Span Collector)- Java app -Transform and push-> Kafka <-from Kafka(Span Collector)- Java app -metadata to ES(Push transaction log) -> AmazonES <- node.js

wrap up

  • スケールアップにより新しく追加したクラスタはデータが同期された状態で立ち上がる
  • クラスタの監視と最適化は自分自身で行う
  • AmazonESの異なるバージョン間でのUpgradeボタンがない(wish)
  • どれくらいディスク容量使ってるかが監視で表示されない(wish)

感想

巨大企業のLog解析システムのアーキテクチャの紹介という非常に興味深い内容でした。実際にどのようにAmazonESを利用してLog解析システムを構成しているかを垣間見ることができ、こんなこともElasticsearchでできるんだという驚きでした。話が前後したりすることがあったため、なかなか理解するのが難しかったところも多いのですが、学びのあるセッションだったかと思います。

参照