【レポート】ウェブサイトのアクセスログを分析し可視化したいが、なぜそのためにサーバが必要なのか? #reinvent #CTD408

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。AWS re:Invent2017にてブレイクアウトセッション「CTD408 - I Want to Analyze and Visualize Website Access Logs, but Why Do I Need Servers to Do That?」を聴講してきたのでレポートします。

セッションの概要は下記の通りです。

Nowadays, it’s common for a web server to be fronted by a global content delivery service, such as Amazon CloudFront, to accelerate delivery of websites, APIs, media content, and other web assets. Website administrators and developers want to generate insights in order to improve website availability through bot detection and mitigation, by optimizing web content based on the devices and browser used, by reducing perceived latency by caching a popular object closer to its viewer, and so on. In this session, we dive deep into building an end-to-end serverless analytics solution to analyze Amazon CloudFront access logs, both at rest and in transit, using Amazon Athena and Amazon Kinesis Analytics, respectively, and we generate visualization insights using Amazon QuickSight. Join a discussion with AWS solution architects to learn more about the various ways to generate insights to improve the overall perceived experience for your website users.

登壇者は以下のお三方です。

  • Joseph Pelle - Software Development Manager, Amazon Web Services
  • Sai Sriparasa - Sr. Big Data Consultant, AWS
  • Rajeev Srinivasan - SOLUTION ARCHITECT, AMAZON WEB SERVICES

レポート

アジェンダ

  • Amazon CloudFrontのアクセスログ分析の利点
  • サービス紹介
  • Amazon CloudFrontレポートと運用メトリック
  • バッチ分析を使用したカスタムレポート生成
  • バッチ&オンライン分析によるボット検出と軽減

アクセスログ分析の利点

  • ウェブサイトの待ち時間を短縮
  • コンテンツの最適化
  • ボットの検出と緩和
  • サービスとアプリケーションの可用性の向上
  • コンプライアンスと監査の要件を満たす

アクセスログ分析AWSサービスの紹介

Amazon CloudFront

  • 膨大な容量と規模を持つグローバルコンテンツ配信ネットワーク
  • パフォーマンスと規模の最適化
  • ビルトインのセキュリティ機能
  • キーとなるAWSサービスとの深い統合
  • 堅牢なリアルタイムレポート
  • 静的および動的オブジェクトおよび動画配信
  • CloudFrontは静的なコンテンツだけでなく、動的なコンテンツにも対応
  • AccessLogsはS3バケットに格納
  • オンプレミスをオリジンにすることも可能
AWS CloudFront + AWS WAF
  • CloudFrontとAWS WAFの連携
  • AWS WAFにより以下が可能
    • 不正なボットとスクレーパーからの保護
    • SQLインジェクション保護
    • クロスサイトスクリプティング保護
    • HTTP flood、スキャナ、プルーブほぼ
    • IPアドレスホワイトリスト/ブラックリスト
    • 既知の攻撃者の保護
AWS CloudFrontのアクセスログ配信
  • アクセスログは各エッジか集計される
  • ディストリビューションごとにまとめられる
  • 出力はS3バケットへ
  • 保存先のS3バケットにACLでログを書き込む許可を与える必要がある
  • ファイル名のフォーマット
    • bucket-name.s3.amazonaws.com/optional-prefix/distribution-ID.YYYY-MM-DD-HH.unique-ID.gz
  • ファイル名にはリクエストが発生した期間のデータと時刻が含まれる
  • アクセスログの配信は1時間に数回
  • 1つまたは複数のファイルを保存
CloudFrontのカスタマー
  • Media & Entertainment
  • Gaming
  • Social Media、Digital Advertising、EdTech、Finance
  • Enterprise
  • E-commerce

AWS Lambdaのストリーム処理

  • プロビジョニングまたは管理するサーバはない
  • データストリームをキャプチャ
  • キャプチャしたデータストリームからLambdaをイベントソースで起動
  • データストリームを処理して、出力をデータベースに格納

Amazon Kinesis

  • Amazon Kinesis Streams
  • Amazon Kinesis Firehose
  • Amazon Kinesis Analytics
Amazon Kinesis Streams

ストリームデータを処理するためのアプリケーションを独自に構築 - 管理が容易 - 必要なカパシティをセットしてストリームを作成するだけで利用可能。スループットやデータ量の変化に応じてスケール - 独自のリアルタイムアプリケーション - Amazon Kinesis Client Library, Apache Spark/Flink, AWS Lambda 等を利用してストリーム処理を実装 - 低コスト - あらゆるスケールのワークロードで高いコスト効果

Amazon Kinesis Firehose

ストリームデータをAmazon S3、Amazon Redshift、Amazon ESへ簡単に配信

  • 管理不要
    • アプリケーションの実装やインフラストラクチャーの管理を一切行わずにAmazon S3, Redshift, Elasticsearchにデータを配信可能
  • データストアとダイレクトに統合
    • 最短60秒でバッチ、圧縮、暗号化したストリーミングデータを配信
  • シームレスにスケール
    • データのスループットに応じて自動的にスケール
Amazon Kineisi Analytics

ストリームデータを標準的なSQLクエリでリアルタイムに分析

  • ストリームに対してSQL可能
    • 複雑な処理フレームワークやプログラミング言語の学習不要
  • リアルタイム分析アプリケーション
    • 秒以下のレイテンシーでストリームデータを連続的に分析
  • 簡単なスケーラビリティ
    • データのスループットに応じてスケール

Amazon Athena

S3上のデータにたいしてSQLのクエリできるサービス

  • 即座にクエリが実行可能
    • サーバレスであり、ETL不要
  • オープン、パワフル、スタンダード
    • Prestoを使用、標準SQLを実行
  • クエリ単位の課金
    • スキャンされたデータについてのみの支払い

Amazon QuickSight

AWSのBIツール

  • 分析
    • データを視覚的に分析可能
    • 複数のユーザでの分析も可能
  • ダッシュボード
    • 読み取り専用のダッシュボードをこう言う可能
    • Viewerは変更はせず、視覚情報をフィルタリングできる
  • ストーリーボード
    • 視覚化を他のユーザと共有可能
QuickSightのデータソースについて
  • データベースなどからSPICEを経由して視覚化
  • S3からAthenaを使って視覚化、またSPICEも利用可能
  • Redshiftなどの出たも使用可能
  • SPICE
    • Super-fast, Parallel, In-memory, Calculation Engine

AWS Glue

ETLはコスト、手間、時間がかかる。フルマネージドなETLサービスであるAWS

  • 統合データカタログ
  • 自動データ検出
  • コード生成
  • 開発者エンドポイント
  • 柔軟なジョブスケジューラ
Glueコンポーネント
  • データカタログ
    • Hive Metastore-compatibleの拡張機能
    • クローラは自動的にメタデータを抽出してテーブルを作成
    • Amazon Athena, Amazon Redshift Spectrumとの統合
  • ジョブオーサリング
    • ETLコードを自動生成する
    • open frameworksでビルド: PythonとSpark
    • Developer-centric: 編集、デバッグ、共有
  • ジョブの実行
    • サーバーレスのSparkプラットフォーム上でジョブを実行
    • 柔軟なスケジューリングを提供
    • 依存関係解決、監視、警告を処理

Amazon CloudFrontのレポートと運用メトリクス

Amazon CloudFront Reports

  • 5種類のレポートが準備されている
  • Viewerのリクエストから洞察を得る
  • Usage, Cache Stats, Popular Objects, Viewr Data, Top Referres
  • 正確な履歴表示に使用
  • 最大60日間の履歴
  • CSV形式のデータ

Amazon CloudFront Metrics

  • 6つの運用メトリクス
  • ほぼリアルタイムの操作ビュー
  • 現在何が起こっているかを見るために使用
    • 1分、5分、1時間、1日、の粒度
  • Amazon CloudFrontのコンソール、またはAmazon CloudWatchのコンソールから参照可能
  • cloudwatchのアラームをSNSの通知の連携させることが可能
  • requests, bytes, downloaded, bytes uploaded, total error, 4xx Error Rate, 5xx Error Rateがモニタリング可能

運用でのモニタリング

  • 4xx Error Rateでアラートを設定
  • CloudFrontまたはCloudWatchのコンソールから確認

運用での分析

バッチ分析によるカスタムレポートの作成

アクセスログからより深く分析する

レポーティングのためのパイプラインのセットアップ

  • CloudFrontのアクセスログはS3に出力される
  • AWS Glueを使ってデータソースを発見する
  • データカタログを構築し、Amazon Athenaで利用可能にする
  • データの分析にはAmazon QuickSightを利用
  • Amazon AthenaはS3バケットをクエリ
  • シンプル、かつ、サーバレス
  • Benefits
    • デフォルトのCloudFrontのレポートよりも深く洞察できる
    • レポートのカスタマイズ
      • 4xx, 5xxの深掘り
      • リージョンごとのエラーレート確認
      • top50以上の、ポピュラーオブジェクトの表示
    • エッジロケーションのレポート
    • セールスアンドマーケティング
    • 視聴者とGeoデータ
    • ポピュラーオブジェクトの比較

ボットの検出と軽減

例として、悪いボットのブラックリスト化

  • 不要なユーザエージェントのヘッダーをブロックし、アクセスを止める
  • バッチ分析をする場合のボット検出

  • オンラインの場合のボット検出
  • ボット検出と緩和
  • バッチを用い、オンライン分析のボット検出と緩和
  • ベストプラクティス
    • パーティショニング
      • クエリに必要なデータスキャンファイルの量を減らす
    • 圧縮ファイルサイズ
      • Athenaの実行エンジンが分割して複数ファイルを読み込み、並列処理を増やすことができるようにファイルを分割する
    • 分析用のカラム形式
      • カラムベースの読み取りに最適化する
      • Apache Parquet、Apache ORCを使う
    • 環境変数を使用して、操作パラメータを関数に渡す
    • 関数の配置パッケージ内の依存関係を制御する
    • 様々なバッチとレコードサイズを使用してラムダ関数をテストする
    • IAMポリシーの設定時に最も制限のキビシイアクセス許可を使用する
    • CloudWatchアラームの設定
      • 入出力バイトと入出力レコードを関しするCloudWatchアラームを設定する
      • MillisBehindLatesを監視して、アプリケーションがストリーミングソースからの読み込みにどれだけ遅れているかを追跡します
    • CloudWatchアラームのモニタ
      • Kinesis DatastreamおよびKinesis Firehoseの配信ステータムから読み込む最適な数のKinesis Analytic アプリケーションを決める

感想

CloudFrontのレポートとメトリクスの利用、またアクセスログをどうやってより深く分析していくか、というセッションでした。個人的にCloudFrontのレポート機能、メトリクスの参照については知っていましたが、アクセスログ自体を分析することでより深くユーザの動向などを確認できること、またその仕組みについてもサーバレスで実現できるという知見が得られて有意義なセッションでした。