Snowflake Postgresメトリック¶
Snowflake Postgresはインスタンスメトリックを自動的に収集し、アカウントのアクティブな イベントテーブル にそれらを格納します。モニタリングエージェントは、メトリックのタイプに応じて約5~30秒ごとにメトリックをサンプリングし、それらを RECORD_TYPE = 'METRIC' とともに SNOWFLAKE.TELEMETRY.EVENTS に書き込みます。
これらのメトリックは、Snowflakeで直接クエリするか、GrafanaやObserveなどの外部の可観測性プラットフォームに転送できます。
注釈
イベントテーブルからのPostgres ログ データのクエリに関する情報は、 Snowflake Postgresのログ記録 をご参照ください。
利用可能なメトリック¶
Postgresメトリック¶
メトリック |
型 |
説明 |
|---|---|---|
|
gauge |
アクティブなバックエンド接続の数 |
|
gauge |
すべてのデータベースの合計サイズ(バイト) |
|
gauge |
WAL ディレクトリサイズ(バイト) |
|
gauge |
ログディレクトリのサイズ(バイト) |
|
gauge |
仮ファイルサイズ(バイト) |
|
gauge |
付与されたロックの数 |
|
gauge |
待機中/ブロック済みロックの数 |
|
gauge |
整数としてのPostgresバージョン(例: 180003 = 18.0.3) |
Postgresプロセスメトリック¶
メトリック |
型 |
単位 |
ディメンション |
|---|---|---|---|
|
sum |
秒 |
state (user, system, wait) process.command、process.executable.name、process.owner, process.pid、process.parent_pid |
|
sum |
bytes |
process.command、process.executable.name、process.owner、process.pid、process.parent_pid |
|
sum |
bytes |
process.command、process.executable.name、process.owner、process.pid、process.parent_pid |
注釈
各Postgresプロセスには各 CPU 状態に対して1つの process.cpu.time 行があり、各 process.memory.usage および process.memory.virtual に対して1つの行があります。
process.* ディメンション属性は、各行の resource_attributes 列にあります。他のメトリックの state 値と同様に、 state ディメンション属性は record_attributes 列にあります。
CPU メトリック¶
メトリック |
型 |
単位 |
ディメンション |
|---|---|---|---|
|
sum |
秒 |
state: user、system、wait、idle、nice、interrupt、softirq、steal cpu: cpu# |
|
gauge |
threads |
--- |
|
gauge |
threads |
--- |
|
gauge |
threads |
--- |
注釈
各CPU#(CPU0やCPU2など)には、各 CPU 状態に対して1つの system.cpu.time 行があります。
system.cpu.time は累積カウンターです。パーセンテージを取得するには、連続するサンプル間のデルタを計算し、経過間隔で除算します。
メモリメトリック¶
メトリック |
型 |
単位 |
ディメンション |
|---|---|---|---|
|
sum |
bytes |
state: used、free、cached、buffered、slab_reclaimable、slab_unreclaimable |
注釈
各状態に対して1つの system.memory.usage 行。
ディスクメトリック¶
メトリック |
型 |
単位 |
ディメンション |
|---|---|---|---|
|
sum |
bytes |
mountpoint、device、state (used、free)、type、mode |
注釈
各状態に対して1つの system.filesystem.usage 行。
ネットワークメトリック¶
メトリック |
型 |
単位 |
ディメンション |
|---|---|---|---|
|
sum |
bytes |
device、direction (transmit、receive) |
注釈
各デバイス(「eth0」と「lo」)には各方向に対して1つの system.network.io 行があります。
ページングメトリック¶
メトリック |
型 |
単位 |
ディメンション |
|---|---|---|---|
|
sum |
bytes |
device、state (used、free) |
注釈
各状態に対して1つの system.paging.usage 行。
リソース属性¶
すべてのメトリック行には、 RESOURCE_ATTRIBUTES に次のフィールドが含まれます。
属性 |
説明 |
例 |
|---|---|---|
|
Postgresインスタンス識別子 |
|
|
サーバーホスト名 |
|
|
EC2 インスタンス ID |
|
|
インスタンスファミリー |
|
|
AWS リージョン |
|
|
可用性ゾーン |
|
|
常に |
|
|
常に |
|
メトリックのクエリ¶
特定のSnowflake Postgresインスタンスでは、プライマリサーバーや HA サーバーなど、いつでも複数のサーバーを実行できます。または、アップグレード交換に、インスタンスのメンテナンスウィンドウの交換を待機させることができます。これらの各サーバーはインスタンスの指定された instance_id のメトリックを報告するため、インスタンスの現在アクティブなサーバーのサーバー host_name も必要になります。
Postgresインスタンスの instance_id を見つけるには、 DESCRIBE POSTGRES INSTANCE を使用します。
インスタンスの instance_id は返された host 値の最初のセグメント(最初のピリオドの前のすべて)です。
注釈
SHOW POSTGRES INSTANCES コマンドの出力の host 列を使用して、アカウントで実行中のすべてのSnowflake Postgresインスタンスのインスタンスホスト値を表示できます。
インスタンスの現在のサーバー host_name を見つけるには、インスタンスの host 値の単純な DNS CNAME ルックアップを使用します。
返された host 値が「4jypgsndvzd5ta6ufaryx6owja.sfengineering-pgtest.preprod.us-west-2.aws.postgres.snowflake.app」(つまりインスタンスの instance_id は「4jypgsndvzd5ta6ufaryx6owja」であることがわかります)であるとします。
以下は dig CLI ユーティリティを使用して、 DNS CNAME ルックアップを行っている例です。
また、以下はPythonの dns.resolver モジュールを使用した例です。
host_name 値は、戻り値の最初のセグメント、つまり上記の例の「df6m4y5m5fgfpb5idy2pj67xrm」です。
次のクエリは、過去5分間に収集された各メトリックの最新値を返します。
注釈
上記のクエリは、アカウントのデフォルトイベントテーブル SNOWFLAKE.TELEMETRY.EVENTS を使用します。カスタムイベントテーブルを設定している場合は、クエリを適切に調整します。
メトリッククエリの例¶
アクティブな接続¶
状態別のメモリ使用状況¶
CPU ロード平均¶
データベースサイズ¶
メトリックの外部ツールへの転送¶
メトリックは標準的なSnowflakeテーブルに格納されるため、Snowflake接続をサポートする任意の可観測性プラットフォームに転送することができます。特定のツールを使ったステップごとの設定については、以下をご参照ください。