2018-12 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2018-12-17 (月)

Heroku と Redash は相性が良いのでは?という話 [Redash][Heroku]

Redash Logo

これは Redash Advent Calendar 2018 の 17 日目の記事です。

16 日目は @mazamachi さんの『kubernetess の redash か黒魔術』ですが、まだ投稿されていないようですね。今回の記事にも関連するので期待してます。

1 日目の『2018年12月現在における Redash のはじめかた』を拝見しました。実際問題、どこに立てれば良いか、悩む方もいらっしゃるのではないでしょうか。今回はその点をまとめていきます。


Redash をどこに立てれば良いか?


身も蓋もありませんが、ご自身が一番慣れた Docker の PaaS 上で動かすのが良いと思います。

AWS EC2 や GCE などの、非 Docker 環境は運用負荷がそれなりに発生するため、避けたほうが良いでしょう。アップグレードでハマったり、ストレージ使用量 100% になるのはあるあるです。

↓ 公式の How to Upgrade はいつの頃からか、非 Docker 環境でのアップグレード方法が "legacy guide" になってました。公式でも Docker 推しのようです。

This instructions are for those who use our new Docker based instance. If you use our older instances (or used the old bootstrap script), check the legacy guide.


業務では先月、Redash を本番環境と同じ Heroku に立てました。予想以上に簡単かつ安定して動いています。この記事では、Redash on Heroku のメリットをデメリット含めて紹介します。

メリット1: 簡単に立てられる


willnet/redash-on-heroku

Dockerfiles for hosting redash on heroku



README.md の通りにセットアップすれば、10 分程度で Redash を起動できるのではないでしょうか。

先日 heroku.yml に対応した PR がマージされたため、セットアップがより簡単になりました。git push でコンテナを起動できるのは便利です。

ちなみに私は Redash のバージョンを固定するため、Fork 版を使っています。
- ブランチ: https://github.com/masutaka/redash-on-heroku/tree/ecbooster
- 差分: https://github.com/willnet/redash-on-heroku/compare/master...masutaka:ecbooster

5.0.2.b5486 の場合、5.0.2 がバージョンで、b5486 はビルド番号です。ビルド番号は気にしなくて良いと思います。Docker Image のタグは https://hub.docker.com/r/redash/redash/tags で確認できます。

メリット2: 毎日再起動される


Heroku の Dyno はだいたい 24 時間に 1 回、自動的に再起動され、Dyno が差し替わります。

Dynos and the Dyno Manager > Automatic dyno restarts

仮に Redash にメモリリークのバグがあったとしても、次の日にはリセットされます。本番環境と違って Redash はそれなりに動けば良いため、地味にメリットだと思います。

本番環境に加えて Redash まで監視してアラートの通知が来るのは、ちょっと運用負荷が高いと思うので、とりあえずリセットされるのはうれしいですね。

メリット3: クエリが詰まっても安心?


Redash はたまにクエリが詰まることがあり、再起動が必要になることがあるそうです。

3 日目の塚田さんの記事『redashの導入、運用で得た知見、改善まとめ』で言及されています。

ですが、メモリ要因の詰まりであれば、Redash on Heroku では何もする必要はないかもしれません(今のところ手動で再起動したことはありません)。

Heroku ではメモリが Dyno の上限を超えてスワップし始めると、R14 Error (Memory quota exceeded) が発生します。例えば Hobby Dyno のメモリ上限は 512MB です。

さらにスワップが増え、メモリ上限の 2 倍を超えると R15 Error (Memory quota vastly exceeded) が発生し、Dyno は強制再起動されます。

Dynos and the Dyno Manager > Memory behavior

エンジニアが手動で再起動しなくて良いのは、運用面で大きなメリットです。もちろん頻発する場合は、Dyno type を上げたほうが良いと思います。

ちなみに、エラーや Dyno の再起動の様子は Heroku のダッシュボードで確認できます。以下は例です。もちろん Heroku のログでも確認できます。

Heroku Metrics

メリット4: DB のバックアップ


Heroku Postgres Add-on は Free 含めて全てのプランで自動/手動バックアップ可能です。

事故が起きた場合に役立つでしょう。Redash のアップグレード前の手動バックアップは忘れずに。

割と致命的なデメリット


データソースとして使いたい MySQL や PostgreSQL のエンドポイントがインターネットに露出していない場合、Redash on Heroku を採用することは出来ないでしょう。ECS や GKE など、当該プラットフォームの Docker サービスを使いましょう。

参考: Dyno type


業務で使う場合は、Hobby ($7/mo) 以上が良いでしょう。もちろん、試しに立てるだけなら Free で十分です。

Free と Hobby のメモリサイズは同じ 512MB ですが、Hobby 以上であれば Sleep がないことと、ダッシュボードで Metrics を見られるからです。結果的に運用時間の短縮になるでしょう。

参考: Dyno Types|Heroku Dev Center

参考: Add-on のプラン


Heroku Postgres Add-on のプランは Hobby Basic ($9/mo) 以上がほぼ必須です。

Hobby Dev ($0/mo) だと Row Limit が 10,000 であるためです。Redash は events Table にアクセスログっぽいものを記録するようで、一週間も経たないうちにプランを上げるハメになりました...。

ボタン一発で Hobby Dev から Hobby Basic にアップグレードすることは出来ないため、最初から Hobby Basic で始めることをオススメします。Hobby Basic だと Row Limit は 10,000,000 なので、しばらくは大丈夫でしょう。

Redis Cloud と SendGrid Add-on は無料プランで十分だと思います。

まとめ


Redash on Heroku のメリットとデメリットを紹介しました。運用が非常に楽です。一度試してみてください。

明日の Redash Advent Calendar 2018@Udomomo さんが Redash CLI について書くそうです。Redash CLI は使ったことがないので、今から楽しみです。

2018-12 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

最終更新時間: 2019-08-16 19:41 JST

検索


最近の話題
- 2019-08-16
  『改訂2版 みんなのGo言語』を読んだ
- 2019-08-13
  『カード決済業務のすべて』を読んだ
  『実行力 結果を出す「仕組み」の作りかた』を読んだ
- 2019-08-05
  Heroku Logging Add-on Papertrail と LogDNA の比較
- 2019-07-16
  ジム通いと食生活改善が 13 ヶ月目に突入した
- 2019-06-10
  esa の記事を Emacs から素早く開ける helm-esa.el を作った
- 2019-06-03
  CaSy のエアコンクリーニングサービスを使った
- 2019-05-28
  『アフターデジタル』を読んだ
最近追記された記事
- 2019-02-03-1 (4日前)
- 2018-11-28-1 (18日前)
- 2019-05-07-1 (98日前)
- 2018-04-30-1 (113日前)
- 2018-01-28-1 (125日前)
- 2019-02-11-1 (185日前)
- 2019-01-20-1 (203日前)
- 2016-10-26-1 (251日前)
- 2018-10-15-1 (298日前)
- 2018-04-30-1 (326日前)
カテゴリ
- Anthy (3)
- Apache (11)
- Apple (1)
- ATOK (4)
- au (3)
- AWS (23)
- Bazaar (1)
- Berkshelf (2)
- BigQuery (1)
- BitBar (4)
- Book (106)
- Boxen (2)
- Bugsnag (1)
- capistrano (4)
- chalow (57)
- ChatWork (1)
- Chef (17)
- Chrome (3)
- Chromecast (1)
- CircleCI (10)
- clang (26)
- Comics (2)
- Cooking (10)
- cvs (15)
- cygwin (12)
- D3.js (1)
- Debian (55)
- Docker (4)
- E-mail (9)
- elasticsearch (4)
- Emacs (223)
- Emacs講座 (10)
- English (4)
- feedforce (7)
- fetchmail (3)
- Firefox (20)
- Fluentd (4)
- ftp (2)
- Game (21)
- GCP (1)
- Gem (5)
- Git (9)
- GitHub (23)
- golang (11)
- Google (1)
- gpg (4)
- GrowthForecast (7)
- Health (6)
- Heroku (19)
- Homebrew (10)
- HTML (6)
- iBook (1)
- iPad (1)
- iPhone (17)
- IRC (1)
- Jenkins (8)
- JS (1)
- Karabiner (1)
- KeySnail (3)
- Kibana (1)
- Kindle (1)
- Kubernetes (2)
- Langrich (7)
- LDAP (6)
- Life (23)
- Linux (7)
- Mackerel (1)
- macOS (1)
- Mew (18)
- MongoDB (1)
- Mozilla (19)
- Music (1)
- MySQL (1)
- NAS (4)
- nginx (6)
- NHK (1)
- Node (1)
- ntp (4)
- OOP (2)
- OpenID (2)
- openssl (1)
- Opera (2)
- OSX (41)
- Perl (14)
- PHP (19)
- PostgreSQL (1)
- procmail (4)
- Programing (3)
- Puppet (1)
- Python (2)
- Rails (13)
- Rake (2)
- RaspberryPi (2)
- Redash (1)
- RedHat (29)
- Redmine (3)
- RSpec (2)
- Ruby (52)
- samba (3)
- screen (7)
- sed (5)
- serverspec (6)
- sh (8)
- Slack (2)
- Solaris9 (22)
- Spring (2)
- ssh (4)
- StatusNet (21)
- svn (12)
- Swift (1)
- Tablet (1)
- tdiary (3)
- Twitter (15)
- Twmode (6)
- Ubuntu (5)
- UNIX (102)
- vagrant (8)
- Video (21)
- vim (1)
- Wercker (9)
- Windows (29)
- Wine (3)
- XML (11)
- XP (1)
- zsh (26)
- インストールメモ (33)
- クイックシェイプ (12)
- ネタ (15)
- 勉強会 (17)
- 携帯 (6)
- 正規表現 (4)
過去ログ
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12