みなさん、メリークリスマス!!
こんにちは、サーバーサイドエンジニアの柿本です。
この記事は、ユニファ Advent Calender 2020の10日目の記事になります。
今年のクリスマス、みなさんはサンタさんに何をお願いしましたか?
私は「自分専用のダッシュボードをください!」とお願いしたのですが、「フォッフォッフォ。それは自分でなんとかしたまえ!byサンタ」とのことだったので、自分で構築することにします。
とはいえ自分へのプレゼントにお金をかけたくないので、無料で入手できるものを探しました。
いくつかの無料や OSS のダッシュボードツールを比較してみて、Grafanaがクリスマスにはもってこいだったのでそれにします!
Merry Christmas Everyone! Thanks for an incredible 2019! pic.twitter.com/sbvjwXFrW8
— Grafana (@grafana) December 24, 2019
24時間動かし続けるわけではないので、 Heroku の Free Dyno を使えば間に合いそうです。
Grafana を Heroku にデプロイする bolierplate はいくつか GitHub にありますが、対象のバージョンが古かったり手順が多かったり sqlite を使っていたり*1したので自分で作ることにしました。
Grafana は docker image を提供しているので、それを使います。
tl;dr
1クリックで Heroku にデプロイすることができます。
コマンドをパチパチ打つのがお好きな方は README.md をご参照ください。
工夫したところ
ポートのバインドに失敗する(らしい)
Grafana の docker image を普通に Heroku にデプロイするとポートのバインドに失敗する、という事前情報があったので、 Stack OVerflow の回答をそのまま参考にさせていただきました。
やっていることは単純でカスタムの設定ファイル( grafana.ini )にプレイスホルダーをおいておいて、デプロイの直前に sed
で置換処理を差し込みます。
// grafana.ini [server] http_port = <HTTP_PORT>
// heroku-run.sh sed -i -e 's|<HTTP_PORT>|'$PORT'|' /etc/grafana/grafana.ini
DB の接続情報を同様にセット
Heroku は Postgres の Add-on を追加すると同時に DATABASE_URL
という環境変数をセットしてくれます。
ありがたいことに grafana.ini に database の url をそのままセットすることができるので、上と同じ方法で設定します。
// grafana.ini [database] url = <DATABASE_URL>
// heroku-run.sh sed -i -e 's|<DATABASE_URL>|'$DATABASE_URL'|' /etc/grafana/grafana.ini
最後に
サンタさんにお願い事をしても断られることがあるんだな、と大人になって初めて知りましたが、こういう困難を乗り越えて人は成長するんだなと学びの多い年末になりそうです。
来年のクリスマスは何をお願いしようかなぁ。
それではみなさんハッピーホリデー!!
ユニファでは サンタさんに断られた 保育をハックするエンジニアを募集中です。 一緒にスマート保育園を実現しましょう!
*1:Heroku では sqlite は24時間ごとに削除されます!涙