IDCFクラウドとYahoo!ビッグデータインサイトでイベントデータを活用する方法(Event Webhook)
はじめに
先日、SendGridはIDCFクラウドとの提携を発表しましたが、今回はIDCFクラウドおよびYahoo!ビッグデータインサイト(以下、YBI)と組み合わせてSendGridのイベントデータを活用する方法についてご紹介します。YBIはIDCフロンティア様が提供するデータ分析プラットフォームです。
イベントデータとは
SendGridは、メール配信に関わる様々なイベント(メールの送信、バウンス、開封、クリック、配信停止、迷惑メール報告など)を通知するEvent Webhookという機能を提供しています。SendGridではイベントデータの保存期間は1週間なので、実際の運用ではEvent Webhookで通知されるイベントデータをどこかに保存する必要があります。
イベントデータの保存方法
本ブログでは、過去に様々なイベントデータの活用方法をご紹介してきました。
- Railsアプリでイベントデータを保存・活用する方法
- MongoDBにイベントデータを保存する方法
- FalconとFluentdを用いたイベントデータロガーの作り方
- Sinatraとngrokを使ってイベントデータを取得する方法
準備
今回ご紹介する方法を試すには、以下のサービスでアカウント作成が必要です。
- IDCFクラウド
- Yahoo!ビッグデータインサイト
- SendGrid(IDCFクラウド経由でお申し込みいただくと、1ヶ月あたり25,000通まで送信可能な特別無料プランがご利用いただけます)
最終的な構成
冒頭に掲載した構成で構築します。最終的にはYBIにイベントデータが格納されます。セットアップは図の右側から順に進めていきます。
セットアップ
Yahoo!ビッグデータインサイトの準備
YBIでは特にセットアップは必要ありません。ここで必要なのは、API Keyの確認のみです。YBIのダッシュボードにログインして、My ProfileでAPI Keyを確認します。API Keyの確認にはパスワードの入力が必要となります。後で説明しますが、このAPI KeyをFluentdに設定します。
Fluentdのセットアップ
Fluentdはオープンソースのデータコレクターです。SendGridのイベントデータを受け、YBIにデータを転送します。FluentdはIDCFクラウドの仮想マシン上で実行します。今回は、CentOS 7.1(64bit)の仮想マシンを作成します。
IPアドレスのファイアウォール設定とポートフォワード設定で、TCPポート8888番を仮想マシンに転送するよう設定します。このIPアドレスとポート番号は後でSendGrid側に設定するのでメモしておきます。
仮想マシンのコンソールにログインして、rubyの開発環境、fluentd、Treasure Dataプラグイン(fluent-plugin-td)をインストールします。YBIに対するデータの登録はTreasure Dataプラグインを利用して行います。
# yum install gcc ruby-devel.x86_64 -y # gem install fluentd --no-ri --no-rdoc # fluent-gem install fluent-plugin-td
fluentdの設定ファイルのひな形を作成して、設定ファイルを編集します。
# fluentd --setup ./fluent # vi ./fluent/fluent.conf
設定ファイル(fluent.conf)の末尾に次の設定を追記します。
<match td.*.*> type tdlog endpoint ybi.jp-east.idcfcloud.com apikey <API_KEY> buffer_type file buffer_path /root/fluent use_ssl true auto_create_table flush_interval 5s </match>
主なパラメータの意味は次の通りです。
- <match td.*.*>
「td」で始まるリクエストとマッチしたものをYBIにデータを転送します。 - apikey
<API_KEY>部分には、先ほどYBIのダッシュボードで確認したAPI Keyを設定します。 - auto_create_table
YBI側にデータベースやテーブルがない場合、自動的に作成します。非常に便利な機能です。
その他のパラメータについてはYBIのドキュメントを参照してください。設定ファイルを編集したら、fluentdを起動します。fluentdは標準設定で、http(ポート8888番)で待ち受けます。
# fluentd -c ./fluent/fluent.conf -vv
SendGridのEvent Notificationのセットアップ
最後に、SendGridのWebポータルでEvent Webhookの設定(ログインが必要)を行います。「HTTP POST URL」に次のように設定します。
http://xxx.xxx.xxx.xxx:8888/td.sendgrid.event
URLのIPアドレスとポート番号は、先ほどIDCFクラウドで確認したものを設定します。
パスの「td.sendgrid.event」部分は、次のように使用されます。
- td:fluentdの<match>設定で一致するものが転送処理対象となります
- sendgrid:YBI内でデータベース名として使用されます。任意の文字列に変更できます
- event:YBI内でテーブル名として使用されます。任意の文字列に変更できます
設定を保存したら、「Test Your Integration」ボタンを選択してサンプルイベントを送信します。
設定がうまくいっていれば、YBIにデータベースおよびテーブルが作成され、サンプルのイベントが保存されます。
確認
再びYBIのダッシュボードを確認します。Databaseの配下に「sendgrid」というデータベース、「event」というテーブルが作成されます。テーブルを選択すると、先ほど送信したサンプルのイベントを確認することができます。
さいごに
いかがでしたか?YBIのようなデータベース分析プラットフォームを利用すると、簡単な設定のみでSendGridのイベントデータを保存できます。保存したイベントデータは、ユーザのエンゲージメント分析、バウンスのトラッキング、パフォーマンス分析など、様々な用途に活用できます。是非お試しください!