Google Cloud Platform

Fastly のリアルタイム ストリーミング ログを BigQuery で分析する方法

編集部注 : 今回は Fastly からの寄稿です。Fastly のエッジ クラウド プラットフォームは、コンテンツ配信、ストリーミング、セキュリティ、負荷分散などの領域で従来よりも優れたサービスをグローバルに提供するウェブ アプリケーションを支えています。また、Google Cloud Platform(GCP)上で構築されたアプリケーションの応答時間を短縮するだけでなく、ログを Cloud Storage と BigQuery にストリーミングして深く分析できるようにしています。本稿では、この統合と、お客様の環境でのセットアップ方法について解説します。

私たち Fastly と Google Cloud のコラボレーションは、GCP のパワーと Fastly エッジ クラウド プラットフォームのスピードおよび柔軟性を結びつけました。私たちは全世界 14 の戦略拠点で Google との間にプライベートな相互接続を設けており、GCP と Fastly を併用するお客様の環境では Google サービスとストレージの応答時間が劇的に向上しています。

そしてこのたび、私たちは Google BigQuery との統合を発表しました。これで、Google Cloud Storage と BigQuery に Fastly のログをリアルタイムでストリーミングでき、お客様は無限とも言える膨大なエッジ データを分析することが可能になります。

もしあなたが Fastly のお客様なら、人口統計や地理的な位置などの側面に応じて、ウェブ サイトの月単位のページ ビューや利用状況に関する実用的な知見を獲得できます。このデータがあれば、接続の問題の解決、パフォーマンス チューニングが必要な構成領域の特定、サービス停止の原因の特定、エンドユーザーのエクスペリエンスの向上などを図れるのです。

さらに BigQuery テーブルを使用して、Fastly のログ データと、Google Analytics、Google Ads などのデータやセキュリティ、ファイアウォール ログを結合することもできます。Fastly のリアルタイム ログを Cloud Storage に保存すれば、冗長性を確保することも可能です。実際、多くのお客様が Fastly から Cloud Storage に直接ログをバックアップしています。

20dwF0hRdvjia7AgZnc59SF-dL-N7M78BRZBIVu74NrjrjomWZjvTLgdHWNh5RZQmduMDZTXMDT8nYH0bA-5pWAnFBTWyj73Zqda0msA_VMViDXuIX9yJi3VHRnE6JDMcZS7GauYt072.PNG
Fastly POP は GCP ベースのアプリケーションに直結し、BigQuery にログをストリーミングします

それでは、統合のセットアップ方法と、Cloud Storage および BigQuery による Fastly ログの分析について説明しましょう。

Fastly-BigQuery 統合のセットアップ

Fastly サービスのロギング エンドポイントとして BigQuery を追加する前に、Cloud Storage アカウントを登録して Cloud Storage バケットを作成する必要があります。この準備を済ませたら、以下の手順でセットアップを行ってください。

1. Google Cloud サービス アカウントの作成

BigQuery は、サードパーティ アプリケーションの認証のためにサービス アカウントを使用します。サービス アカウントの作成方法については、Google のサービス アカウント認証情報生成のページを参照してください。サービス アカウントを作成するときは、鍵タイプに JSON を指定してください。

2. private_key と client_email の入手

サービス アカウントを作成したら、サービス アカウントの JSON ファイルをダウンロードします。このファイルには、BigQuery サービス アカウントの認証情報が格納されています。ファイルを開き、private_key とclient_email の内容をメモしてください。

3. BigQuery API の有効化(無効にしている場合)

Fastly ログを Cloud Storage バケットに送るには、GCP の API Manager で BigQuery API を有効にする必要があります。

4. BigQuery データセットの作成

BigQuery API を有効にしたら、次の手順で BigQuery データセットを作ってください。

  • BigQuery にログインします。
  • サイドバーのアカウント名の横にある矢印をクリックし、Create new dataset を選択します。

SzjfHH0q-FU8Swx_8XpfLQ9kgVuE2prwLJkMx6WMcm2kt3JayDStmGtHpGiGfjaS76PB3sgUcWErv29SuiHju9tVRUATu56c3DHUdhQO8L8N95EHTAVkCJe-MyeyHWi7dL6CyTsvfpt5.PNG

Create Dataset ウィンドウが表示されます。

  • Dataset ID フィールドにデータセットの名前(たとえばfastly_bigquery)を入力し、OK ボタンをクリックします。
cZB7CCnGpyg9bK6hhSeHlfmQgA5iO5_4fTDI5ibzXchu2IAK5Q4WHbpEXUbfJ8HRzWDohw4cH-Uc7cr5LMcl8XiYutwY__bX-G7HaiTr0YOIMIrQGWJF2KCGWLGD35_ZnB6i0mvu0i3b.PNG

5. BigQuery テーブルの追加

BigQuery データセットを作成したら、BigQuery テーブルの追加が必要です。テーブル スキーマの作成方法には次の 3 つがあります。

    1. BigQuery のウェブ インターフェースを使ってスキーマを編集する。
    2. BigQuery のウェブ インターフェースのテキスト フィールドを使ってスキーマを編集する。
    3. 既存のテーブルを利用する。

私たちとしては、新しいテーブルを作り、ユーザー インターフェースを使ってスキーマを作成する方法をお勧めしますが、テーブル スキーマのテキスト表現を編集してもよいでしょう。実際、テキスト バージョンとユーザー インターフェース バージョンはいつでも切り替えられます。

なお、Fastly ユーザー インターフェースで使うロギングのフォーマットの例と、それに対応するテキスト形式の BigQuery スキーマを後述していますので、お役立てください。重要なのは、Fastly から送るデータが BigQuery テーブルのスキーマと一致していることです。一致していない場合は、データが壊れたり、エラー メッセージなしで格納されなかったりします。

BigQuery のドキュメントに従い、サイドバーのデータセット名の横にある矢印をクリックし、Create new table を選択します。

6543897.png

Create Table ページが表示されます。

684626.png
  • Source Data セクションで Create empty table を選択します。
  • Table name フィールドにテーブル名を入力します(たとえば、logs)。
  • BigQuery ウェブ サイトの Schema セクションで、インターフェースを使ってフィールドを追加し、スキーマを完成させます。そして Create Table ボタンをクリックします。

6. ロギング エンドポイントとしての BigQuery の追加

次の手順に従い、ロギング エンドポイントとして BigQuery を追加します。

  • Fastly の『Setting up remote log streaming』ガイドに目を通してください。
  • BigQuery のロゴをクリックし、BigQuery エンドポイント作成ページを開きます。
m7mkcpcZm76yrsH1-WKmGokvlsDvwykb8uxKUdcOe_0zq0yCreepBd2E2QJ9EkAnRcAu9KscWGEOfhdI2FmTs69u1WaCF6o1dXghnm6mcz2_rJroL46W_bi1KQoMJHcOGnQt-X_Pjx3h.PNG

  • Create a BigQuery endpoint の各フィールドを次のように指定してください。
Name フィールドには人間が読めるエンドポイント名を入力します。
■ Log format フィールドには BigQuery に送るデータを入力します。詳細は『Log streaming : Google BigQuery』ガイドの Example format セクションをご覧ください。
■ Email フィールドには BigQuery アカウントの client_email アドレスを入力します。
■ Secret key フィールドには BigQuery アカウントの秘密鍵を入力します。
■ Project ID フィールドには GCP プロジェクトの ID を入力します。
■ Dataset フィールドには BigQuery データセットの名前を入力します。
■ Table フィールドには BigQuery テーブルの名前を入力します。
■ Template フィールドには、テーブルのテンプレート サフィックスとして使う strftime 互換文字列を入力します(オプション)。

  • Create をクリックし、新しいロギング エンドポイントを作成します。
  • Activate ボタンをクリックし、構成変更をデプロイします。

BigQuery に送信する JSON オブジェクトのフォーマット例

BigQuery に送るデータは、JSON オブジェクトとしてシリアライズする必要があります。また、JSON オブジェクトのフィールドは、すべてテーブルのスキーマの文字列に対応していなければなりません。

JSON では入れ子状のデータを格納できます(たとえば、オブジェクトのキーに対応するバリューは他のオブジェクトになることがあります)。次に示すのは、BigQuery にデータを送るためのフォーマット文字列の例です。

  {
  "timestamp":"%{begin:%Y-%m-%dT%H:%M:%S%z}t",
  "time_elapsed":%{time.elapsed.usec}V,
  "is_tls":%{if(req.is_ssl, "true", "false")}V,
  "client_ip":"%{req.http.Fastly-Client-IP}V",
  "geo_city":"%{client.geo.city}V",
  "geo_country_code":"%{client.geo.country_code}V",
  "request":"%{req.request}V",
  "host":"%{req.http.Fastly-Orig-Host}V",
  "url":"%{cstr_escape(req.url)}V",
  "request_referer":"%{cstr_escape(req.http.Referer)}V",
  "request_user_agent":"%{cstr_escape(req.http.User-Agent)}V",
  "request_accept_language":"%{cstr_escape(req.http.Accept-Language)}V",
  "request_accept_charset":"%{cstr_escape(req.http.Accept-Charset)}V",
  "cache_status":"%{regsub(fastly_info.state, "^(HIT-(SYNTH)|(HITPASS|HIT|MISS|PASS|ERROR|PIPE)).*", "\\2\\3") }V"
}

BigQuery スキーマの例

上に示したフォーマット例に対応するテキスト形式の BigQuery スキーマは、次のようなものになります。

  timestamp:STRING,time_elapsed:FLOAT,is_tls:BOOLEAN,client_ip:STRING,geo_city:STRING,geo_co
untry_code:STRING,request:STRING,host:STRING,url:STRING,request_referer:STRING,request_use
r_agent:STRING,request_accept_language:STRING,request_accept_charset:STRING,cache_status:S
TRING

BigQuery テーブルを作るときは、“Edit as Text” をクリックし、この例をペーストします。

今すぐお試しを!

以上で、Fastly のログがリアルタイムで Cloud Storage と BigQuery に送信されるようになります。BigQuery ではログの分析が簡単になり、あなたのアプリケーションとエンドユーザーとのやり取りがより深く理解できるでしょう。

質問があれば、私たち Fastly にお問い合わせください。すでに Fastly をご利用なら、Fastly と GCP をどのように使っているかをぜひ教えてください。まだご利用でなければ、無料でお試しいただけます。こちらでサインアップしてください。

* この投稿は米国時間 8 月 17 日、Fastly の VP of Product Strategy である Simon Wistow によって投稿されたもの(投稿はこちら)の抄訳です。

- By Simon Wistow, VP of Product Strategy, Fastly