Heroku Postgres のメトリクスのログ
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2024年05月15日(水)
Table of Contents
Heroku Postgres Standard および Premium 層のデータベースのユーザーには、そのアプリのログストリームにデータベース関連のイベントが表示されます。これらのイベントは、時間の経過に伴う使用状況の記録や分析に役立ちます。
Postgres ログの表示は、Heroku CLI、ダッシュボード、ログ記録アドオン、またはログドレインで行うことができます。これらのメトリクスを監視するために、プラットフォーム監視アドオンをインストールすることもできます。
heroku-postgres
で表示される Heroku Postgres のメトリクスは、postgres
ですべてのアプリケーションに対して表示される Postgres 自体から送出される標準のアラートとは別のものです。
たとえば、postgres
ログを取得するには、コマンド heroku logs -p postgres -a app-name
を実行します。heroku-postgres
ログを取得するには、コマンド heroku logs -p heroku-postgres -a app-name
を実行します。
ログ形式
特定のアプリの Heroku Postgres のメトリクスのログを表示するには、プロセスタイプ -p heroku-postgres
フラグとアプリ名を使用します。
$ heroku logs -p heroku-postgres -a example-app
たとえば、Heroku Postgres のメトリクスのログは次のようになります。
2024-03-15T12:10:39.000000+00:00 app[heroku-postgres]: source=HEROKU_POSTGRESQL_SILVER addon=postgresql-devcenter-123456 sample#current_transaction=54017686 sample#db_size=16012956319bytes sample#tables=97 sample#active-connections=7 sample#waiting-connections=0 sample#index-cache-hit-rate=0.9239 sample#table-cache-hit-rate=0.93609 sample#load-avg-1m=0 sample#load-avg-5m=0 sample#load-avg-15m=0 sample#read-iops=0 sample#write-iops=0.13333 sample#tmp-disk-used=33849344 sample#tmp-disk-available=72944943104 sample#memory-total=4044960kB sample#memory-free=46920kB sample#memory-cached=3667532kB sample#memory-postgres=20824kB sample#wal-percentage-used=0.06512959334021144
すべての Standard および Premium 層のデータベースのアプリケーションログには、次の属性が表示されます。
source
: 測定に関連するデータベースのアタッチメント名 (HEROKU_POSTGRESQL_VIOLET
など)。- addon: 測定に関連するデータベースのアドオン名 (
postgres-metric-68904
など)。 - ログ行のタイムスタンプは、測定が取得された時刻です。
データベースメトリクス
2024 年 5 月 15 日より、データベースメトリクスの追加フィールドの展開を段階的に開始します。
次の属性は、特定のデータベースに適用されます。
sample#db_size
: データベースに含まれているバイト数。このメトリクスには、ディスク上のすべてのテーブルおよびインデックスデータが含まれます (データベースの肥大化を含む)。sample#tables
: データベース内のテーブルの数。sample#active-connections
: データベース上で確立された接続の数。sample#waiting-connections
: ロックの取得を待機している接続の数。多数の接続が待機している場合、このメトリクスは不適切に処理されているデータベース並列性の兆候である可能性があります。sample#current_transaction
: 現在のトランザクション ID。時間の経過に伴う書き込みを追跡するために使用できます。sample#index-cache-hit-rate
: 共有バッファキャッシュから処理されたインデックス参照の比率 (小数点以下 5 桁に四捨五入)。Heroku では、可能であれば 0.99 以上の値をお勧めします。インデックスヒット率が常に 0.99 未満である場合は、高コストのクエリを調査するか、データベースプランの大容量 RAM へのアップグレードを行います。sample#table-cache-hit-rate
: 共有バッファキャッシュから処理されたテーブル参照の比率 (小数点以下 5 桁に四捨五入)。Heroku では、可能であれば 0.99 以上の値をお勧めします。テーブルヒット率が常に 0.99 未満である場合は、データベースプランの大容量 RAM へのアップグレードを行います。sample#follower-lag-commits
: 複製ラグ。このフォロワーがそのリーダーに対して遅れているコミットの数として測定されます。複製は非同期であるため、この数が 0 を超えていても問題ではありませんが、値が増えている場合は調査する必要があります。詳細は、「フォロワーを監視する」を参照してください。このメトリクスは、フォロワーデータベースに対してのみ公開されます。sample#primary-available
: 高可用性データベースの場合1
の値はデータベースの可用性を表し、0
はデータベースの停止を表します。sample#standby-available
: 高可用性データベースの場合1
の値はデータベースの可用性を表し、0
はデータベースの停止を表します。sample#service-available
: 高可用性データベースの場合1
の値はデータベースの可用性を表し、0
はデータベースの停止を表します。sample#rollback-from
: ロールバックをサポートするデータベースの場合、ログには、利用可能な最も古いロールバックポイントのタイムスタンプ、または、最初のバックアップが進行中の場合はcapturing-snapshot
が表示されます。
サーバーメトリクス
これらのメトリクスはサーバーオペレーティングシステムから直接得られます。
sample#load-avg-1m
、sample#load-avg-5m
、およびsample#load-avg-15m
: 1 分、5 分、および 15 分の期間での平均システム負荷を、使用可能な CPU の数で割ったもの。1.0 のload-avg
は、平均して、プロセスがタイムスパンの 100% で CPU リソースを要求していたことを示します。この数値には I/O の待機が含まれます。バースト可能なパフォーマンスを備えたデータベースの場合は、ベースラインの負荷平均が保証されます。詳細は、技術的特性に関する記事のバースト可能なパフォーマンスのセクションを参照してください。sample#read-iops
およびsample#write-iops
: 16 KB ブロックの I/O サイズでの読み取りまたは書き込み操作の数。sample#memory-total
: 使用可能なサーバーメモリの合計量。sample#memory-free
: 使用可能な空きメモリの量 (KB 単位)。sample#memory-cached
: ページキャッシュに OS で使用されているメモリの量 (KB 単位)。sample#memory-postgres
: Postgres で使用されているメモリの量 (KB 単位)。sample#tmp-disk-used
、sample#tmp-disk-available
: tmp マウントで使用中の、および使用可能なバイト数。sample#wal-percentage-used
: 使用されている WAL ディスクの割合 (0.0
から1.0
で示す)。詳細は、こちらの記事を参照してください。
オペレーティングシステムは、ページキャッシュに使用するメモリ量を最大化するように設計されていますが、アプリケーションが要求した場合はそのメモリを解放することがあります。サーバーで使用できるメモリの合計量を見積もるには、sample#memory-free
と sample#memory-cached
を一緒に追加してください。
PgBouncer メトリクス
これらのメトリクスは、PgBouncer プーラーアタッチメントがあるすべての Heroku Postgres サーバーに含まれています。これらのメトリクスは、PgBouncer の特殊内部データベースに接続したときに SHOW POOLS;
コマンドを実行することによって表示可能なメトリクスのサブセットです。
sample#client_active
: アクティブなサーバー接続の割り当てがあるプーラーへのクライアント接続の数。sample#client_waiting
: サーバー接続の割り当てを待機しているプーラーへのクライアント接続の数。sample#server_active
: クライアント接続に現在割り当てられているサーバー接続の数。sample#server_idle
: クライアント接続に現在割り当てられていないサーバー接続の数。sample#max_wait
: サーバー接続の割り当てを現在待機しているすべてのクライアントで最も長い待機時間。sample#avg_query
: プールされている接続経由で実行されるすべてのクエリの平均クエリ時間。sample#avg_recv
: クライアントから受け取る秒あたりのバイト数。sample#avg_sent
: クライアントに送信する秒あたりのバイト数。