Heroku アプリの監視機能
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年05月09日(火)
Table of Contents
監視機能は問題を事前に突き止め、インシデントに素早く対応するのに役立ちます。この記事では、Heroku アプリのあらゆる側面を監視するのに必要な主要な監視ツールと、最も効果的に使用する方法の手順について説明します。
Premier または Signature Success Plan の Heroku Enterprise の顧客は、Customer Solutions Architecture (CSA) チームに、このトピックに関する詳細なガイダンスを要求できます。ここでエキスパートコーチングセッションについて学習するか、または Salesforce の担当者にお問い合わせください。
ログ記録
ログ記録ツールは、Heroku アプリおよびデータベースのログを収集して格納します。インシデントの際は、ログを使用して、何が発生しているかを特定し、修正方法を絞り込むのに活用することができます。インシデントの後は、根本原因分析でログを参照することができます。
Heroku アドオンをインストールして、ログ記録ツールを設定します。ログのカテゴリには、さまざまな機能と保持期間を持ついくつかのログ記録ツールが含まれているため、アドオンの機能をニーズと比較してください。
アドオンをインストールしたら、次の設定を行うことをお勧めします。
- 選択したログ記録ツールおよびプランのログボリュームクォータを超えていないことを確認します。クォータを超えている場合、プロバイダーのプランをアップグレードするか、ログフィルタリングを設定するか、アプリのログ記録設定を調整します。
- インシデントが起きる前にログ記録ツールの検索機能を学習しておき、インシデントが発生したときに問題を掘り下げることができるようにします
- アプリのログにリクエスト ID でタグ付けすることで、特定のリクエストについてのすべてのログを収集できるようにします
- 他のツールで表示されない可能性があるプラットフォームエラーに対し、ログベースのアラートを設定します。R14/R15 のメモリエラーと H10 のアプリクラッシュから開始します。
- 構造化ログを生成するために、アプリの言語に対してさまざまなログ記録ライブラリを検討します (Python で structlog など)
Heroku では、最新のログを少量保持しますが、このセクションで扱うようなツールを使用して、過去のログを保持して検索する必要があります。
Heroku アドオンではない既存のログ記録ツールがある場合、ログドレインを設定してログをそのツールに送信できます。Heroku Shield を使用している場合は、Private Space Logging を使用して、すべてのログを Space から外部ツールにドレインできます。
アプリケーションパフォーマンス監視 (APM)
アプリケーションパフォーマンス監視 (APM) ツールでは、アプリのパフォーマンスの詳細が表示され、速度低下の原因になっている可能性があるアプリの部分を特定するのに役立ちます。APM ツールからのデータを使用して、パフォーマンスに関する取り組みを導き、低速のエンドポイントを最適化します。
Heroku アドオンをインストールして、APM ツールを設定します。Monitoring (監視) カテゴリには、New Relic APM、Scout APM、Solarwinds AppOptics などの APM ツールがあります。
アドオンのプロビジョニングが済み、それを使用するようアプリを設定したら、次のことができます。
- 最も遅いエンドポイントを特定し、最適化する機会がないか探します。遅いエンドポイントをバックグラウンドジョブに変えるか、キャッシング戦略を採用することを検討します。
- リクエストのキューイング時間を調べます。トラフィックが多いときにキューイング時間が急増している場合、アプリの並列性設定を確認します。Node および Ruby アプリに関するガイダンスを参照してください。
- 外部 API やデータベースなどの外部サービスのパフォーマンスに注目します。外部サービスによって Web リクエストの速度が低下している場合、作業のバックグラウンド化を検討してください。
APM ツールからの分析情報に対する操作の詳細を参照してください。
エラー監視
エラー監視ツールは、コード、依存関係、フレームワークのいずれから発信されたかにかかわらず、アプリによってスローされた例外またはエラーを取得します。エラー監視により、エラーのスタックトレースを表示し、その根本原因にドリルダウンできます。インシデントの発生の際は、アプリからスローされるエラーを見ることで、トラブルシューティングのすばやい実行に役立ちます。
Heroku アドオンをインストールして、エラー監視を設定します。Errors and Exceptions (エラーと例外) カテゴリには、Bugsnag、Raygun、Sentry などのエラー監視ツールが含まれています。
アドオンのインストール後、エラーを取得するためにそのライブラリをアプリに追加します。詳細は、各アドオンのドキュメントを参照してください。
エラー監視ツールとそのライブラリをインストールしたら、次を行います。
- エラーの急増についてユーザーにアラートを出すようツールを設定します。それらのアラートをアラート管理ツールに送信して、チームに連絡します
- ツールを GitHub と統合して、新しいエラーを特定のデプロイと関連付けます
プラットフォーム監視
プラットフォーム監視ツールは dyno のメトリクス、Postgres のメトリクス、Redis のメトリクス、および ルーターのメトリクスを Heroku プラットフォームから取得し、それらを視覚ダッシュボードに表示します。これらのツールを使用して、メモリが不足している dyno やデータベース負荷の急増といった問題を表面化させます。
Heroku アドオンをインストールして、プラットフォーム監視を設定します。Monitoring (監視) カテゴリには Librato や AppOptics などのプラットフォーム監視ツールが含まれています。
log-runtime-metrics を有効にして、Heroku ログ経由で dyno レベルのメトリックをプラットフォーム監視ツールに公開します。
ツールがインストールされたら、重要なメトリックについて確認し、アラートを設定します。
- 選択したツールがネイティブでサポートする Heroku メトリックを確認します。Librato は、デフォルトで表面化した Heroku メトリックを要約します。
- メモリ使用量、dyno の負荷、Web 応答時間、エラーレートなどの主要なシステムメトリックについてアラートを設定します
プラットフォーム監視ツールを使用したデータベースの監視に関するヒントについては、「Heroku Postgres の監視」を参照してください。
Heroku しきい値アラート
Heroku しきい値アラートは、エラーレートや応答時間が大きすぎるときに通知します。一般的に、Heroku では応答時間は 500 ミリ秒以下とすることをお勧めします。しきい値アラートではパフォーマンスの問題がほぼリアルタイムで通知されるため、ダウンタイムの原因となる前に解決できます。
アプリのしきい値アラートは、Heroku Dashboard でこれを有効化することによって設定します。
しきい値アラートを設定するときは、次のようにします。
- 応答時間のしきい値と感度は、問題を早期に見つけ出すのに十分な低さとするが、誤報を防ぐための十分な高さに設定します。
- ツールのメール統合機能を使用してアラート管理ツールにアラートを送信し、問題がある場合にチームに連絡します。アラート監視ツールがない場合は、チーム全体の配信リストにアラートを送信します。
稼働時間の監視
稼働時間監視ツールは、アプリの可用性をエンドユーザーの視点から測定します。これらのツールでは、無効な DNS レコード、CDN の問題、特定のリージョンでの長い応答時間など、他のツールでは検出できない問題が検出されることがあります。
Heroku アドオンをインストールして、稼働時間の監視を設定します。Monitoring (監視) カテゴリには Pingdom や Better Uptime などの稼働時間監視ツールが含まれています。
稼働時間監視ツールを使用するときは、次のようにします。
- さまざまなリージョンからのアプリの可用性を確認するようツールを設定します
- 公開されている URL を使用して、稼働時間検査で DNS や CDN の問題が見つかるようにします
- アラート監視ツールと統合して、問題がある場合にチームに連絡するようにします
アプリとデータベースのための Heroku 通知
Heroku では、次のような特定のアプリおよびデータベースイベントに対してメール通知が送信されます。
- Heroku Postgres、Heroku Data for Redis、Apache Kafka on Heroku の通知 (次に予定しているメンテナンスやメンテナンスステータスを含む)
- アプリによって使用される Heroku スタックのサポート終了
- ユーザーの介入が必要な Heroku Connect エラー
アプリの共同作業者であるか、アプリを含むチームの管理者である場合、メール通知を受け取ります。Heroku Connect アラートを管理するには、Connect ダッシュボードの Settings -> Manage Connection -> Access
にアクセスします。
緊急でない通知は無視されて忘れられがちです。メールを読んで指示に従うようにしてください。
Heroku Status
Heroku Status では、プラットフォームのインシデントやメンテナンスの問題に関する更新情報が提供されます。メンテナンスアラートにより、チームは事前に準備することができます。インシデントアラートでは、アプリ、データベース、または Heroku のツールに影響を及ぼすおそれのある問題をチームに通知します。
Heroku Status アラートをサブスクライブすると、アラートが発生したときにメール通知を受け取ります。
ステータス通知を設定するときは、次のようにします。
- アラート管理ツールのメール統合機能を使用して、重要なインシデントをアラート管理ツールに送信します。"Critical incidents only" (重要なインシデントのみ) を選択して、インシデントが本番アプリに直接影響する可能性がある場合のみチームに連絡します
- ステータス通知をチーム配信リストに送信し、すべてのチームメンバーが情報共有の輪に入るようにします
アラート管理
アラート管理ツールは、監視ツールからのアラートをチームに通知します。
アラートの受信を「待機している」人を選択したり、その人が応答できない場合に通知する別の人を選択することができます。
PagerDuty や OpsGenie などのアラート管理ツールを設定します。
ツールを設定した後、次のことを行います。
- 事前に作成された統合機能やメールを使用して、監視ツールからアラート管理ツールにアラートを送信します
- いつ誰に通知するかを指定する、チームのアラートポリシーを設定します
- アラートポリシーには、メインのチームメンバーが応答できない場合に応答するバックアップチームメンバーを含めるようにします
データベース監視
データベースのパフォーマンスはアプリのパフォーマンスに影響します。「monitoring your Heroku Postgres database」(Heroku Postgres データベースの監視) のガイダンスを参照してください。