Herokuアプリの監視

Hosted GraphiteでHerokuアドオンを監視する実践ガイド

Table of Contents

はじめに

HerokuのアドオンはHerokuプラットフォームにおける最大の強みの1つで、データベース、キャッシュ、ロギング、モニタリングなどを数秒で追加することができます。しかし、本番システムではアドオンを追加するだけでは十分ではありません。

PostgresRedis、またはサードパーティのサービスのような重要なインフラストラクチャをHerokuアドオンで管理している場合、それらのパフォーマンスと信頼性を監視することは不可欠となります。

このガイドでは、Hosted Graphite by MetricFireを使用してHerokuアドオンのカスタムなリアルタイム監視を設定する方法についてご説明します。このブログでは一例として、Heroku Dynosと選択したアドオンからHosted Graphiteバックエンドにパフォーマンスメトリクスを転送する方法を詳しく説明します。

アプリだけでなくアドオンを監視すべき理由

Herokuはインフラストラクチャの多くを処理してくれますが、アドオンで何か問題が発生すると、アプリのパフォーマンスや信頼性がいつの間にか低下する可能性があります。

ログだけでは把握できない一般的なリスクは以下になります。

  • Redisの接続数が限界に近づいている
  • Postgresデータベースのサイズがクォータに近づいている
  • TTLの設定ミスにより、キャッシュレイヤーが古いデータを提供している
  • 外部ウェブフックサービスが500sを返し、再試行を引き起こしている

これらのエラーは、必ずしもアプリのログで確認できるものではありませんが、メトリクスで確認することができます

Hosted GraphiteがHerokuとうまく機能する理由

MetricFireのHosted Graphiteは、Herokuと統合されたクラウドネイティブなモニタリングプラットフォームです。以下のようなエンジニアリングチームに最適です:

  • 1つの場所ですべてのHerokuダイノとアドオンを監視する
  • Grafanaを自分で管理せずにGrafanaダッシュボードを使用する
  • アプリやスクリプトからカスタムメトリクスを送信する
  • Datadogのようなプラットフォームの複雑さと高コストを回避する

MetricFireを使用すると、システムレベルのメトリクス(CPU、メモリ)、カスタムメトリクス(キューの深さ、エラー)、サードパーティ製アドオンの使用状況を、すべて最小限のオーバーヘッドで追跡できます。

Step-by-Step:Hosted Graphiteでアドオンを監視する方法

Step 1: HerokuアドオンとしてHosted Graphiteを追加する

MetricFireのHosted Graphiteは、データを使用してカスタムダッシュボードやアラートを作成できる堅牢なデータストレージバックエンドです。Hosted Graphiteは、Herokuのログドレイン出力を解析し、データをGraphite形式に変換し、Hosted Graphiteアカウントに転送するサービスを管理します。その後、カスタムダッシュボードやアラートを構築するためにこれらのGraphiteメトリックを使用することができます。さらに、Herokuのメトリクス以外も保存することができ、インフラストラクチャの複数のレイヤーを1つのガラスペインで可視化することができます。

HerokuにはHosted Graphiteのアドオンがあり、Heroku UIから、またはHeroku CLI内の同様のコマンドから簡単に有効にすることができます:

Herokuプロジェクトで以下を実行します:

heroku addons:create hostedgraphite

これは、Hosted Graphiteアカウントを規定し、組み込みのHerokuメトリクス(例:ダイノメモリ、応答時間)をHosted Graphiteダッシュボードに送信し始めます。

以下で、ダッシュボードにアクセスできます:

heroku addons:open hostedgraphite

Hosted Graphiteアドオンがプロビジョニングされると(デフォルトプランはIntro)、Heroku UI内からアカウントに移動することができます:

Heroku UI showing Hosted Graphite add-on

HerokuダイノメトリクスがHosted Graphiteアカウントに流れ込むと、デフォルトのHerokuダッシュボードが自動的にインストールされます。このダッシュボードは、モニタリングのための素晴らしいスタート地点を提供してくれ、さらにカスタマイズすることもできます:

Default Heroku dashboard in Hosted Graphite

ウェブメトリクスを受信していない場合は、おそらくHeroku CLIからログランタイムメトリクスを有効にする必要があります:

heroku labs:enable log-runtime-metrics -a <app-name>
heroku restart -a <app-name>

Step 2: Heroku Postgresアドオンの監視

HerokuのPostgresアドオンをスタンダードまたはプレミアムティアで使用すると、DBインスタンスごとに30のパフォーマンスメトリクスがHosted Graphiteアカウントに転送されます。これらはheroku.<app-name>.heroku-postgres.<instance-name>.<type>というプレフィックスが付き、Graphite(ドット-ノテーション)形式で表示されるメトリクスです:

heroku.<app-name>.heroku-postgres.<instance-name>.database.active-connections
heroku.<app-name>.heroku-postgres.<instance-name>.database.current_transaction
heroku.<app-name>.heroku-postgres.<instance-name>.database.db_size
heroku.<app-name>.heroku-postgres.<instance-name>.database.index-cache-hit-rate
heroku.<app-name>.heroku-postgres.<instance-name>.database.table-cache-hit-rate
heroku.<app-name>.heroku-postgres.<instance-name>.database.tables
heroku.<app-name>.heroku-postgres.<instance-name>.database.waiting-connections
heroku.<app-name>.heroku-postgres.<instance-name>.server.load-avg-15m
heroku.<app-name>.heroku-postgres.<instance-name>.server.load-avg-1m
heroku.<app-name>.heroku-postgres.<instance-name>.server.load-avg-5m
heroku.<app-name>.heroku-postgres.<instance-name>.server.memory-cached
heroku.<app-name>.heroku-postgres.<instance-name>.server.memory-free
heroku.<app-name>.heroku-postgres.<instance-name>.server.memory-postgres
heroku.<app-name>.heroku-postgres.<instance-name>.server.memory-total
heroku.<app-name>.heroku-postgres.<instance-name>.server.read-iops
heroku.<app-name>.heroku-postgres.<instance-name>.server.tmp-disk-available
heroku.<app-name>.heroku-postgres.<instance-name>.server.tmp-disk-used
heroku.<app-name>.heroku-postgres.<instance-name>.server.wal-percentage-used
heroku.<app-name>.heroku-postgres.<instance-name>.server.write-iops

また、Hosted Graphiteは、ダッシュボード・ライブラリからインストールできる、これらのメトリクス用の事前設定済みダッシュボードも提供しています:

Heroku Postgres dashboard in Hosted Graphite

Step 3: Heroku Redisアドオンの監視

どの階層でもHeroku Redisアドオンを使用すると、12個のメトリクスが自動的にHosted Graphiteアカウントに転送されます。これらのメトリクスのプレフィックスは: heroku.<アプリ名>.heroku-redis.<インスタンス名>.<タイプ>で、これらはGraphiteフォーマットで表示されるメトリクスのものとなります:

heroku.<app-name>.heroku-redis.<instance-name>.database.active-connections
heroku.<app-name>.heroku-redis.<instance-name>.redis.evicted-keys
heroku.<app-name>.heroku-redis.<instance-name>.redis.hit-rate
heroku.<app-name>.heroku-redis.<instance-name>.redis.memory-redis
heroku.<app-name>.heroku-redis.<instance-name>.server.load-avg-15m
heroku.<app-name>.heroku-redis.<instance-name>.server.load-avg-1m
heroku.<app-name>.heroku-redis.<instance-name>.server.load-avg-5m
heroku.<app-name>.heroku-redis.<instance-name>.server.memory-cached
heroku.<app-name>.heroku-redis.<instance-name>.server.memory-free
heroku.<app-name>.heroku-redis.<instance-name>.server.memory-total
heroku.<app-name>.heroku-redis.<instance-name>.server.read-iops
heroku.<app-name>.heroku-redis.<instance-name>.server.write-iops

Hosted Graphiteはまた、ダッシュボードライブラリで利用可能なHeroku Redisダッシュボードを事前に設定しています:

Heroku Redis dashboard in Hosted Graphite

Step 4: Heroku Kafkaアドオンのモニタリング

Heroku KafkaアドオンをStandard階層以上で使用すると、クラスタノードごとに10個のメトリクスが自動的にHosted Graphiteアカウントに転送されます。これらはheroku.<app-name>.heroku-kafka.<node>.<instance-name>.<type>というプレフィックスが付き、Graphiteフォーマットではこのようになります:

heroku.<app-name>.heroku-kafka.<node>.<instance-name>.kafka.bytes-in-per-second
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.kafka.bytes-out-per-second
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.server.load-avg-15m
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.server.load-avg-1m
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.server.load-avg-5m
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.server.memory-cached
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.server.memory-free
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.server.memory-total
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.server.read-iops
heroku.<app-name>.heroku-kafka.<node>.<instance-name>.server.write-iops

Hosted Graphiteには、ダッシュボード・ライブラリから生成できるHeroku Kafkaダッシュボードも設定済みです:

Heroku Kafka dashboard in Hosted Graphite

Step 5: アドオンのカスタムメトリクスの送信

Herokuはアドオン固有のメトリクスをGraphiteにネイティブに送信しません。しかし、APIクエリやサービス統合を使って手動で送信することができます。以下にその方法を示します:

  • 例: Heroku Postgresのメトリクスを監視

Herokuはデータベースメトリクスを取得するためのCLIプラグインを提供しています:

heroku pg:info --app your-app-name

これは以下のようなメトリクスを返す:

  • 接続数
  • データベース・サイズ
  • トランザクション・スループット
  • テーブル・キャッシュ・ヒット率

BashまたはPythonを使用してこれをスクリプト化し、StatsDまたは直接TCPを使用してHosted Graphiteにメトリクスを送信できます。

Pythonの例:

import statsd
import subprocess

statsd_client = statsd.StatsClient('carbon.hostedgraphite.com', 2003, prefix='YOUR_API_KEY')

# Example: Send connection count
output = subprocess.check_output(['heroku', 'pg:info', '--app', 'your-app-name']).decode()
if "Connections" in output:
    connections = int(output.split("Connections")[1].split()[0])
    statsd_client.gauge("heroku.postgres.connections", connections)

cronジョブまたは軽量のHeroku worker dynoでスケジュールします。

Step 6: Graphite データを使用してカスタムアラートを作成する

Hosted Graphite UI で、Alerts => Graphite Alerts に移動して新しいアラートを作成します。アラートに名前を付け、アラートのメトリックフィールドにクエリを追加し、このアラートが何であるかの説明を追加します(注:ワイルドカード(*)検索を使用して、指定したインデックスからすべてのメトリックを取得することができます):

Creating alerts in Hosted Graphite

次にAlert Criteriaタブを選択して閾値を設定し、通知チャネルを選択します。デフォルトの通知チャネルは、Hosted Graphiteアカウントにサインアップする際に使用したメールになりますが、Slack、PagerDuty、Microsoft Teams、OpsGenie、カスタムWebhookなどのチャネルを簡単に設定することができます。通知チャンネルの詳細については、Hosted Graphiteのドキュメントを参照してください:

Setting alert criteria in Hosted Graphite

MetricFireでは、任意の時系列メトリックのアラートしきい値を定義することができます。

例:

  • 🚨 Redisのメモリ使用率が85%を超えた場合にアラート
  • 📉 Postgresキャッシュのヒット率が90%未満の場合にアラート
  • 🛑 ウェブフック5xxレートが5分間1%を超えた場合にアラート

アラートの送信先

  • Slack
  • Email
  • PagerDuty
  • Webhooks

これは、サードパーティのサービスに依存している場合に特に便利です。サードパーティのサービスのパフォーマンスが変化したときに、あなたのサービスが壊れる前にアラートを出すことができます。

Herokuでアドオンを監視するためのベストプラクティス

  1. アドオンを本番環境のインフラストラクチャのように扱う - アドオンはしばしば、あなた自身のコードよりも重要です。
  2. 使用量とクォータを追跡する - 不意なスロットリングや超過請求を避ける。
  3. モニタリングで予算を設定する - 特にRedisや外部APIのような従量制サービスの場合。
  4. タグを使用して環境を分ける - ステージング、プロダクション、QAなどのメトリクスにタグを付け、混乱を避ける。
  5. 失敗と沈黙の両方にアラートを出す - メトリクスのない状態は、エラーの急増と同じくらい危険です。

実際の使用例:RedisとPostgresを使用したSaaSチーム

MetricFireの多くの顧客は、キャッシュとジョブキューにHeroku Redis、プライマリデータにHeroku Postgresを使用してPythonまたはRailsベースのアプリを実行しています。

彼らはMetricFireを以下のように使用しています:

  • Redisのメモリ使用量を可視化し、キーの立ち消えを防止
  • Postgres接続の飽和を警告
  • SidekiqまたはCeleryキューの待ち時間を監視
  • StripeまたはSendGridからのWebhookリトライ動作を追跡

これにより、チームは顧客が気付く前に低速な劣化をキャッチし、インシデント時間を削減し、ダイノとプランを適切なサイズに設定することができます。

結論 :アドオンの観測可能性はオプションではない

Herokuアドオンはインストールするのは簡単ですが、可視性がないとうまく運用するのが難しくなります。データベース、キャッシング、ロギング、バックグラウンドジョブなど、これらのアドオンのパフォーマンスはアプリケーションに直接影響します。

MetricFireのHosted Graphiteを使用すると、次のことが可能になります:

  • ダイノとアドオンを一箇所で監視
  • お客様のビジネスに合わせたカスタムメトリクスを送信
  • パフォーマンスの傾向とボトルネックを可視化
  • 事態が壊れる前にアラートを設定

アドオンをコントロールする準備はできていますか?

Herokuインフラストラクチャとアドオンを監視することは、パフォーマンスを最適化し、リソース効率を確保し、問題にプロアクティブに対処するために非常に重要です。ボトルネック、異常、セキュリティインシデントをリアルタイムで検出し解決することができ、より良いユーザーエクスペリエンスに貢献します。さらに、効果的な監視により、使用されていないリソースを特定し、業界標準や規制へのコンプライアンスを確保することで、コストの最適化を支援します。Hosted GraphiteはHerokuとシームレスに統合され、Datadogのような他のプラットフォームよりもはるかに安価に監視環境を提供します。

ダッシュボードやアラートのようなツールは、堅牢で効率的なインフラストラクチャを維持するために不可欠な、リアルタイムの可視化、問題のプロアクティブな特定、過去の傾向分析、情報に基づいた意思決定の促進を提供することで、データを補完します。

無料トライアルにサインアップして、今すぐHerokuスタックのモニタリングをお試しください。また、デモを予約し、モニタリングのニーズについてMetricFireチームと直接話すこともできます。

You might also like other posts...
metricfire Jul 08, 2025 · 5 min read

Introducing MetricFire Logging: Visualize Logs Alongside Metrics

By combining logs and metrics in MetricFire's Hosted Grafana, you can troubleshoot faster, spot... Continue Reading

metricfire Jul 01, 2025 · 3 min read

ログをメトリクスに変換: Loki、Python、Telegrafによるオープンソースの構築(前編)

ELKスタックを使用せず、最小限の労力で、軽量でオープンソースのセットアップを使用して、生のログを使用可能なメトリクスに変換する方法を紹介します。Loki、Python、Telegrafを使用して、ログをGraphiteメトリクスに変換し、簡単に監視やアラートを出すことができます。システム管理者、DevOps初心者、またはゼロからより革新的なモニタリングパイプラインを構築することに興味がある方に最適です。 Continue Reading

metricfire Jul 01, 2025 · 5 min read

OpenTelemetryを使用してSnowflakeの観測性を高める方法

このガイドでは、OpenTelemetry(contrib)をSnowflakeに統合して、クエリのパフォーマンス、実行時間、キューイング、ストレージの使用率、課金への影響を可視化する方法を説明します。SnowflakeメトリクスをスクレイピングするためのOpenTelemetry Collectorをセットアップし、データをエクスポートするためのエンドポイントを設定し、よくある落とし穴のトラブルシューティングを行います。最後には、クエリとリソースのパフォーマンスに関する実用的な洞察を提供する、Snowflake用のスケーラブルで自動化されたモニタリングの設定ができるようになります。 Continue Reading

header image

We strive for 99.999% uptime

Because our system is your system.

14-day trial 14-day trial
No Credit Card Required No Credit Card Required