管理と可視性の原則
最終更新日 2022年01月27日(木)
Table of Contents
Heroku は、アプリケーション実行に内在する数多くの実行およびオーケストレーションに関する問題に対処します。しかし、1 回限りのタスクの実行やアプリケーションへの可視性を確保するなど、説明されるべき数多くの補助的機能もあります。
これらの管理原則と可視性原則は、Heroku でデプロイするときのいくつかのベストプラクティスのカテゴリの 1 つです。アプリケーション設計の原則をすべて見直して、Heroku でのアプリの適正な開発について十分に理解しましょう。
1 回限りのプロセス
本番環境アプリケーションを管理する際にしばしば行わなければ管理的タスクやメンテナンスタスクとして、データベース移行の実行、REPL セッションにおける任意コード、1 回限りのスクリプトなどがあります。
これらのプロセスは、同一の環境で、フォアグラウンドプロセスと同じコード、設定および依存関係隔離を使用して行わなければなりません。Heroku で、これらの 1 回限りのプロセスを Heroku でプロビジョニングする際に使用するOne-off dynoは、コードと設定においてアプリの他のすべての dyno と同一です。
ログ記録
ログに、実行中アプリの動作が示されます。サーバーベース環境では、ログは多くがディスク上のファイル (「ログファイル」) に書き込まれます (ただし、これは出力形式に限ります)。
ログはタイムスタンプが付いたイベントの集約されたストリームで、これらはすべての実行中プロセスとバッキングサービスの出力ストリームから収集されます。ログが raw フォームのときは一般にテキスト形式で、1 行毎に 1 つのイベントがあります (ただし例外から生じたバックトレースは複数行にまたがることがあります)。ログには固定した始まりや終わりがありませんが、アプリが動作する限り連続して流れます。
Heroku アプリは、その出力ストリームのルーティングや保管に対して関与しません。これらのアプリはログファイルに書き込もうとしたり管理しようとしたりしません。代わりに、各実行中プロセスがそれぞれのイベントストリームを、バッファなしで、stdout に書き込みます。
ローカルの開発中、開発者はこのストリームをターミナルのフォアグラウンドで見て、アプリの動作を観測します。ステージング環境または本番環境で、各プロセスのストリームが Heroku Logplex によりキャプチャされ、アプリからの他のすべてのストリームとまとめて照合されて、閲覧や長期間アーカイブのため 1 つ以上の最終移動先へルーティングされます。
開発者は自分のコンソールで CLI を使用してログをリアルタイムで見て、多数のロギングアドオンの 1 つを使用してより高度な管理タスクと検索タスクを行い、ログドレインを使用してログを外部サービスへ送信することもできます。