heroku × sendgridイベント管理

25

Click here to load reader

Upload: wataru-sato

Post on 02-Jul-2015

2.061 views

Category:

Technology


0 download

DESCRIPTION

SendGridのイベントをMongoDB、Treasure Dataを使ってストアする方法をご紹介します

TRANSCRIPT

Page 1: Heroku × SendGridイベント管理

Heroku  ×  SendGrid  イベント管理について考えてみる

 2014/1/16  佐藤 航

Heroku  Meetup  #11  New  Year  Party!!  -­‐  新年会  -­‐

今回はHerokuとSendGridでのイベント管理について考えてみます。�

Page 2: Heroku × SendGridイベント管理

佐藤 航について

•  本業  – 所属 株式会社 構造計画研究所  – 担当 SendGrid  

•  個人的活動  – Androidアプリケーション開発者です  

– @awwa500  

•  Heroku歴  –  21日!  

Heroku歴21日です。すみません。�

Page 3: Heroku × SendGridイベント管理

構造計画研究所について

•  SendGridの正規代理店  – 日本語サポート、ドキュメント提供、請求書払い対

応とか  – HerokuアドオンとしてSendGridをご利用の場合も

サポートします  – hDps://sendgrid.kke.co.jp  

•  その他  – hDp://www.kke.co.jp  

日本でSendGridをいい感じで使えるようにします。�

Page 4: Heroku × SendGridイベント管理

SendGridについて

•  Mail  as  a  Service  •  メール配信するHerokuアドオン  •  ワールドワイドで月間100億通  

Some  App

SendGridはメールサービスの運用を楽にしてくれます。�

Page 5: Heroku × SendGridイベント管理

今日のネタ

   

Heroku × SendGrid  イベント管理について  

   

早速、今日のネタです。�

Page 6: Heroku × SendGridイベント管理

メールサービス運用のあるある

•  「メールが届かない!」 → 原因調査  

•  配信停止リクエスト → アドレスリストから削除  

•  バウンスされた → メールアドレスの特定  

•  スパム報告された → 顧客リストと連携して対策  

メールサービスを運用していてよくある問題です。この場合、まずは原因調査が必要です。�

Page 7: Heroku × SendGridイベント管理

Email  AcPvity

•  SendGrid標準機能  •  各種イベントを過去7日間分検索できる  

こういう場合はSendGrid標準機能のEmail Activityを利用することで対応できます。�

Page 8: Heroku × SendGridイベント管理

たったの7日間

でも検索可能な期間が短いのが残念です。�

Page 9: Heroku × SendGridイベント管理

解→Event  Webhook

•  メール送信にまつわる各種イベントをPOST  – メール受付  – ドロップ  – メール配信  – 遅延  – バウンス  – 開封  – クリック  – スパム報告  – 配信停止リクエスト  

POST  (JSON)

Some    Web  App

そういう場合、Event Webhookが解決します。Event Webhookはメール送信にまつわる各種イベントを指定したURLにPOSTする機能です。�

Page 10: Heroku × SendGridイベント管理

POSTの受け口

では、POSTの受け口はどうすればいいでしょうか。�

Page 11: Heroku × SendGridイベント管理

•  無数にヒットする  

「Heroku  初心者 入門」でググる

POST  (JSON)

Postgres

自分は初心者なので「Heroku 初心者 入門」でググると、だいたいこんな構成がヒットします。これはこれで良いと思います。�

Page 12: Heroku × SendGridイベント管理

•  直接ストアされるらしい  

「Heroku  JSON  Mongo」でググる

POST  (JSON)

JSONといえばMongoDBなので検索キーワードにMongoを入れてみます。Mongolabというのがなんとかしてくれそうです。�

Page 13: Heroku × SendGridイベント管理

やってみた

hDps://api.mongolab.com/api/1/databases/<database-­‐

name>/collecPons/<collecPon-­‐name>?apiKey=<api-­‐key>

•  MongolabのURLを指定するだけ  

設定は簡単です。�

Page 14: Heroku × SendGridイベント管理

できた

いきなりストアされました。�

Page 15: Heroku × SendGridイベント管理

•  これだ 感  

「Heroku  JSON ログ」でググる

Treasure  Data  

Hadoop  :  

その他  いろいろ  

 

POST  (JSON)

他にJSONでログ系をググってみると、fluentdがヒットします。めちゃくちゃ流行ってるらしいです。�

Page 16: Heroku × SendGridイベント管理

やってみた

•  Heroku上にfluentdをインストールする  – hDp://docs.fluentd.org/ja/arPcles/install-­‐on-­‐heroku  

とりあえず、fluentdの公式ドキュメントに沿ってHeroku上にfluentdをセットアップします。�

Page 17: Heroku × SendGridイベント管理

やってみた

•  fluent-­‐plugin-­‐hDp-­‐exを使う  – Gemfile  

– Procfile  hDp-­‐exを入れる

hDp-­‐exを使う

インプット側はhttp-exプラグインを使います。POSTフォーマットの関係上、in_httpプラグインは使えません。�

Page 18: Heroku × SendGridイベント管理

•  Treasure  data向け設定  

やってみた

アウトプット側はTreasure Dataプラグインを使います。�

Page 19: Heroku × SendGridイベント管理

やってみた

•  fluentd(hDp-­‐ex)のURLをSendGridに設定  

hDp://x.herokuapp.com/js/td.tag.here

「js」はJSONリストの意味 最後にfluentdのURLをSendGrid側に設定します。�

Page 20: Heroku × SendGridイベント管理

できた

あっさりストアされました。Automatic schemaに感動しました。�

Page 21: Heroku × SendGridイベント管理

•  時間切れ  

「fluentd  ログ 活用」でググる

Amazon  S3  MySQL  MongoDB

fluentdを使うと他にもいろいろと展開が考えられそうですが、今日は時間がありません。�

Page 22: Heroku × SendGridイベント管理

•  SendGrid  – 1秒または1MB超どちらか早いタイミングでPOST  – 200以外を返すと24時間リトライを続ける  

•  性能  – 負荷テストしましょう  •  Loader.io  

POSTの受け口

ちなみにSendGridは状況によってわりと激しくPOSTするので、一応、受け口の負荷試験をやっておきましょう。�

Page 23: Heroku × SendGridイベント管理

•  HerokuもTreasure  Dataも公式ドキュメントがとてもわかりやすい  

•  SendGridをご利用の際はぜひ弊社経由で!  – hDps://sendgrid.kke.co.jp  

まとめというか、感想というか

使い方が浅いので「簡単に設定できて楽でした」的な感想しかないですが、それってとても大切なことだと思います。�

Page 24: Heroku × SendGridイベント管理

i.  「Heroku上にFluentd  (td-­‐agent)をインストールする」hDp://docs.fluentd.org/ja/arPcles/install-­‐on-­‐heroku  (2013-­‐05-­‐15)  

ii.  「fluent-­‐plugin-­‐hDp-­‐ex  をリリースしました!」 hDp://nuke.hateblo.jp/entry/2013/08/07/195657  (2013-­‐08-­‐07)  

iii.  「fluentd  Log  Everything  in  JSON」hDp://www.slideshare.net/treasure-­‐data/fluentd-­‐meetup-­‐2  (2012-­‐8-­‐23)  

iv.  「Big  Data入門に見せかけたFluentd入門」hDp://www.slideshare.net/keithseahus/big-­‐datafluentd  (2013-­‐1-­‐20)  

v.  「柔軟なログ収集を可能にする「fluentd」入門」 hDp://knowledge.sakura.ad.jp/tech/1336/  (2013-­‐12-­‐9)  

vi.  「Fluentdで始めるリアルタイムでのログ有効活用」 hDp://codezine.jp/arPcle/detail/6958#note01  (2013-­‐02-­‐14)  

vii.  「アクセスログをTreasure  Dataに送ってみよう」 hDp://sstd-­‐bigdata.blogspot.jp/2013/05/treasure-­‐data.html  (2013-­‐5)  

viii.  「Treasure  Data  Plalorm  で始めるデータ分析入門 〜1.  イントロダクション〜」 hDp://doryokujin.hatenablog.jp/entry/2014/01/10/165221  (2014-­‐01-­‐10)  

ix.  「Use  a  Mongo  REST  Interface  to  Store  SendGrid  Event  Data」 hDp://sendgrid.com/blog/mongo-­‐rest-­‐event-­‐data/  (2014-­‐01-­‐07)  

x.  素材 「ヒバナ」 hDp://hibana.rgr.jp/  

参考

Page 25: Heroku × SendGridイベント管理

ありがとうございました