Download - Heroku × SendGridイベント管理
Heroku × SendGrid イベント管理について考えてみる
2014/1/16 佐藤 航
Heroku Meetup #11 New Year Party!! -‐ 新年会 -‐
今回はHerokuとSendGridでのイベント管理について考えてみます。�
佐藤 航について
• 本業 – 所属 株式会社 構造計画研究所 – 担当 SendGrid
• 個人的活動 – Androidアプリケーション開発者です
– @awwa500
• Heroku歴 – 21日!
Heroku歴21日です。すみません。�
構造計画研究所について
• SendGridの正規代理店 – 日本語サポート、ドキュメント提供、請求書払い対
応とか – HerokuアドオンとしてSendGridをご利用の場合も
サポートします – hDps://sendgrid.kke.co.jp
• その他 – hDp://www.kke.co.jp
日本でSendGridをいい感じで使えるようにします。�
SendGridについて
• Mail as a Service • メール配信するHerokuアドオン • ワールドワイドで月間100億通
Some App
SendGridはメールサービスの運用を楽にしてくれます。�
今日のネタ
Heroku × SendGrid イベント管理について
早速、今日のネタです。�
メールサービス運用のあるある
• 「メールが届かない!」 → 原因調査
• 配信停止リクエスト → アドレスリストから削除
• バウンスされた → メールアドレスの特定
• スパム報告された → 顧客リストと連携して対策
メールサービスを運用していてよくある問題です。この場合、まずは原因調査が必要です。�
Email AcPvity
• SendGrid標準機能 • 各種イベントを過去7日間分検索できる
こういう場合はSendGrid標準機能のEmail Activityを利用することで対応できます。�
たったの7日間
でも検索可能な期間が短いのが残念です。�
解→Event Webhook
• メール送信にまつわる各種イベントをPOST – メール受付 – ドロップ – メール配信 – 遅延 – バウンス – 開封 – クリック – スパム報告 – 配信停止リクエスト
POST (JSON)
Some Web App
そういう場合、Event Webhookが解決します。Event Webhookはメール送信にまつわる各種イベントを指定したURLにPOSTする機能です。�
POSTの受け口
では、POSTの受け口はどうすればいいでしょうか。�
• 無数にヒットする
「Heroku 初心者 入門」でググる
POST (JSON)
Postgres
自分は初心者なので「Heroku 初心者 入門」でググると、だいたいこんな構成がヒットします。これはこれで良いと思います。�
• 直接ストアされるらしい
「Heroku JSON Mongo」でググる
POST (JSON)
JSONといえばMongoDBなので検索キーワードにMongoを入れてみます。Mongolabというのがなんとかしてくれそうです。�
やってみた
hDps://api.mongolab.com/api/1/databases/<database-‐
name>/collecPons/<collecPon-‐name>?apiKey=<api-‐key>
• MongolabのURLを指定するだけ
設定は簡単です。�
できた
いきなりストアされました。�
• これだ 感
「Heroku JSON ログ」でググる
Treasure Data
Hadoop :
その他 いろいろ
POST (JSON)
他にJSONでログ系をググってみると、fluentdがヒットします。めちゃくちゃ流行ってるらしいです。�
やってみた
• Heroku上にfluentdをインストールする – hDp://docs.fluentd.org/ja/arPcles/install-‐on-‐heroku
とりあえず、fluentdの公式ドキュメントに沿ってHeroku上にfluentdをセットアップします。�
やってみた
• fluent-‐plugin-‐hDp-‐exを使う – Gemfile
– Procfile hDp-‐exを入れる
hDp-‐exを使う
インプット側はhttp-exプラグインを使います。POSTフォーマットの関係上、in_httpプラグインは使えません。�
• Treasure data向け設定
やってみた
アウトプット側はTreasure Dataプラグインを使います。�
やってみた
• fluentd(hDp-‐ex)のURLをSendGridに設定
hDp://x.herokuapp.com/js/td.tag.here
「js」はJSONリストの意味 最後にfluentdのURLをSendGrid側に設定します。�
できた
あっさりストアされました。Automatic schemaに感動しました。�
• 時間切れ
「fluentd ログ 活用」でググる
Amazon S3 MySQL MongoDB
fluentdを使うと他にもいろいろと展開が考えられそうですが、今日は時間がありません。�
• SendGrid – 1秒または1MB超どちらか早いタイミングでPOST – 200以外を返すと24時間リトライを続ける
• 性能 – 負荷テストしましょう • Loader.io
POSTの受け口
ちなみにSendGridは状況によってわりと激しくPOSTするので、一応、受け口の負荷試験をやっておきましょう。�
• HerokuもTreasure Dataも公式ドキュメントがとてもわかりやすい
• SendGridをご利用の際はぜひ弊社経由で! – hDps://sendgrid.kke.co.jp
まとめというか、感想というか
使い方が浅いので「簡単に設定できて楽でした」的な感想しかないですが、それってとても大切なことだと思います。�
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/
参考
ありがとうございました