LoginSignup
84

More than 5 years have passed since last update.

Fluentd+BigQueryの$300無料体験版を30分で試す手順

Last updated at Posted at 2014-11-12

Fluentd+BigQueryをできるだけ簡単に、30分くらいで試せるDockerコンテナを作ったので、使い方を記しておく。tacke_jpさんもBQとTwitter API連携の例を書いていたけど、今回はnginxログをBQに投げる例をできるだけシンプルに作ってみた。GCPを使ったことないという人向けに$300分の無料体験プログラムも始まったので、お昼休みの合間にでも試してみてほしい。

手順は以下のとおり。

  • BigQueryにサインアップ
  • BQのデータセットとテーブルを作る
  • Google Compute Engine (GCE)インスタンスを作る
  • nginx+FluentdのDockerコンテナを動かす
  • BQクエリでアクセスログを見る

BigQueryにサインアップ

(既存のGCPプロジェクトを使う場合はスキップ)

Google Developer Consoleで新規プロジェクト作成

これまでGoogle Cloud Platformを使ったことがないという人は、$300分の無償枠を利用できる。cloud.google.comを開き、無料体験版をクリックし、ユーザー登録を行う。一方、これまでGCPを利用したことのある人は、Google Developer Consoleを直接開こう。

Create Projectボタンをクリックすると、30秒ほどでプロジェクトが作成される。このサンプルではBQのテーブルを作成するので、課金登録が必要となる。作成したプロジェクトを選択し、Billing & settings-Enable billingを選択し、カード情報を入力する。無料体験版であれば、ユーザー登録時に入力したカード情報が適用されるが、$300分までは課金されることはない。

つづいて、左側のナビゲーションメニューからBig Data - BigQueryをクリックし、BigQueryブラウザツールを開く。COMPOSE QUERYをクリックし、New Queryフィールドに以下のSQLを入力してRUN QUERYをクリックする。

SELECT title FROM [publicdata:samples.wikipedia] 
WHERE REGEXP_MATCH(title, r'.*Query.*')
LIMIT 100

これで結果が帰ってくれば、BQの動作確認はOK。

BQのデータセットとテーブルを作る

Google Cloud SDKをインストール後、以下のコマンドを実行してアカウント認証を済ませる。

$ gcloud auth login

つづいて以下のコマンドでBQのデータセット(テーブルをまとめる入れ物のようなもの)を作る。YOUR_PROJECT_IDの部分は先ほど作成したプロジェクトのIDを指定する。

bq mk YOUR_PROJECT_ID:bq_test

次に、テーブルを作成するためのスキーマファイルschema.jsonを以下の内容で用意する。

[
  {
    "name": "agent",
    "type": "STRING"
  },
  {
    "name": "code",
    "type": "STRING"
  },
  {
    "name": "host",
    "type": "STRING"
  },
  {
    "name": "method",
    "type": "STRING"
  },
  {
    "name": "path",
    "type": "STRING"
  },
  {
    "name": "referer",
    "type": "STRING"
  },
  {
    "name": "size",
    "type": "INTEGER"
  },
  {
    "name": "user",
    "type": "STRING"
  },
  {
    "name": "time",
    "type": "INTEGER"
  }
]

そして以下のコマンドを実行し、テーブルaccess_logを作成。

$ bq mk -t YOUR_PROJECT_ID:bq_test.access_log ./schema.json

ブラウザツール画面をリロードし、テーブルが正しく作成されたことを確認する。

Google Compute Engineインスタンスの作成

GCEのサインアップ

(GCEを利用したことのある場合はスキップ)

Google Developer Consoleを開き、先ほど作成したプロジェクトを選択。APIs & auth-APIsをクリック。Google Compute EngineをEnableに設定する。

GCEインスタンス作成

以下のコマンドを実行し、GCEインスタンスbq-testを作成する。20秒〜30秒くらいで、Docker入りDebianイメージのGCEインスタンスがasia-east1-aリージョンに作成される。

$ gcloud config set project YOUR_PROJECT_ID

$ gcloud compute instances create "bq-test" \
  --zone "asia-east1-a" --machine-type "n1-standard-1" \
  --network "default" --maintenance-policy "MIGRATE" \
  --scopes "https://www.googleapis.com/auth/devstorage.read_only" \
  "https://www.googleapis.com/auth/bigquery" \
  --image container-vm-v20140929 --image-project google-containers

このおまじないの意味は、

  • bq-testという名前のn1-standard-1 インスタンスをasia-east1-aリージョンに作成
  • defaultネットワークに接続、ライブマイグレーションを有効に設定
  • Metadata Serverで取得できるOAuth2アクセストークンのscopeをCloud StorageとBQに設定
  • Docker入りのDebianイメージを利用

である。

nginx+FluentdのDockerコンテナを動かす

以下のコマンドでGCEインスタンスにsshする。

$ gcloud compute ssh bq-test --zone=asia-east1-a

GCEの中に入ったら、以下のコマンドでDockerコンテナを起動する。YOUR_PROJECT_IDの部分は作成したプロジェクトのIDで置き換える。

$ sudo docker run -e GCP_PROJECT="YOUR_PROJECT_ID" -p 80:80 -t -i -d kazunori279/fluentd-bigquery-sample

Google Developer Consoleに戻り、Compute-Compute Engine-VM instancesを選択。bq-testインスタンスを選択し、External IPのリンクをクリックする。ダイアログが表示されたらAllow HTTP trafficを選択してApplyをクリック。これで、ポート80番が外に向けて公開される。

Updating instance tags for "bq-test"の処理が完了したら、External IPのリンクを再度クリックする。今度はDockerコンテナ内で稼働するnginxに接続し、ブラウザ上にWelcome to nginx!のメッセージが表示される。リロードボタンを何回か押してHTTPリクエストを送っておこう。

BQクエリでアクセスログを見る

BQブラウザツールを開き、COMPOSE QUERYをクリックして以下のクエリを実行する。

SELECT * FROM [bq_test.access_log] LIMIT 1000

ただし、初回はアクセスログがBQに反映されるまで1分ほど時間がかかるかも。一度動き始めれば、nginxへのアクセスが数秒後にはBQクエリの結果にリアルタイムに反映されるのがわかる。これでお試し手順は完了。

Dockerfileとtd-agent.confの中身

このサンプルではあらかじめ構築済みのDockerイメージを使ったためにあっという間に構築が完了したが、Dockerfileを見れば構築手順の詳細がわかる。Ubuntuイメージを用意したのち、Fluentd、nginx、そしてfluent-plugin-bigqueryをそれぞれインストールしている。

FROM ubuntu:12.04
MAINTAINER kazunori279-at-gmail.com

# environment
ENV DEBIAN_FRONTEND noninteractive
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list

# update, curl, sudo
RUN apt-get update && apt-get -y upgrade
RUN apt-get -y install curl 
RUN apt-get install sudo

# fluentd
RUN curl -O http://packages.treasure-data.com/debian/RPM-GPG-KEY-td-agent && apt-key add RPM-GPG-KEY-td-agent && rm RPM-GPG-KEY-td-agent
RUN curl -L http://toolbelt.treasuredata.com/sh/install-ubuntu-precise-td-agent2.sh | sh 
ADD td-agent.conf /etc/td-agent/td-agent.conf

# nginx
RUN apt-get install -y nginx
ADD nginx.conf /etc/nginx/nginx.conf

# fluent-plugin-bigquery
RUN /usr/sbin/td-agent-gem install fluent-plugin-bigquery --no-ri --no-rdoc -V

# start fluentd and nginx
EXPOSE 80
ENTRYPOINT /etc/init.d/td-agent restart && /etc/init.d/nginx start && /bin/bash

またtd-agent.confでは、Fluentdのログをfluent-plugin-bigqueryに流すための設定が記されている。以下のとおり、とても簡単だ。

<match nginx.access>
  type bigquery
  auth_method compute_engine

  project "#{ENV['GCP_PROJECT']}"
  dataset bq_test
  tables access_log

  time_format %s
  time_field time
  fetch_schema true
  field_integer time
</match>

今回はBQのデータセットと同じプロジェクト内のGCEインスタンスからアクセスしているため、上記のようにauth_method compute_engineと書くだけで認証設定は完了。BQプラグインがMetadata ServerからOAuth2アクセストークンを取得するので、自分で秘密鍵を作ってコピーしてうんぬんは不要だ。"#{ENV['GCP_PROJECT']}"の部分は、Docker起動時の環境変数を通じてプロジェクトIDを受け取っているところ。

あとかたづけ

GCEインスタンスを立ち上げっぱなしにしておくと課金されてしまうので、以下のコマンドで削除しておこう。

gcloud compute instances delete bq-test --zone=asia-east1-a

またBQブラウザツールを開き、bq_testデータセットをドロップダウンメニューからDelete datasetを選択して削除する。

以上、Fluentd+BigQueryお試し手順をまとめた。

2015.1.27 追記(Google Spreadsheet連携など)

この記事の英語版がGCP公式サイトに公開された。こちらにはさらにGoogle Spreadsheetとの連携についても手順が解説されてるのでお試しあれ。


Disclaimer この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
84