AlloyDB Omni Kubernetes オペレーターでカスタム指標を使用すると、データベースに対して SQL クエリを実行して、アプリケーション固有の指標を定義して収集できます。カスタム指標は、ObservabilityConfig カスタム リソース(CR)を使用して指標収集ルールを定義します。
ObservabilityConfig を使用してカスタム指標を構成する
ObservabilityConfig CR は、dbClusterRefs と customMetrics の 2 つの主要なセクションで構成されています。
dbClusterRefs
このセクションには、この構成が適用される DBCluster リソースへの参照のリストが含まれています。各 ObservabilityConfig は、同じ Namespace 内の 1 つの DBCluster をターゲットにする必要があります。
customMetrics
このセクションでは、リソースの上限やクエリ定義など、カスタム指標の収集のコア構成を定義します。
リソースの上限(resourceLimits)
データベースを保護するため、システムはカスタム クエリに上限を適用します。マニフェストでこれらの上限を指定しない場合、システムは次の表に示すデフォルト値を使用します。
| パラメータ | 説明 | デフォルト | 最大 | 単位 |
|---|---|---|---|---|
workMemory |
モニタリング エージェントがこれらの指標を収集するために使用する特定のデータベース接続の work_mem を指定します。この設定は指標収集プロセスにローカルであり、DBCluster 仕様で構成されたグローバル work_mem パラメータには影響しません。 |
4MB |
なし | KB、MB(デフォルト: KB) |
maxParallelWorkers |
モニタリング エージェントで使用される特定のデータベース接続の max_parallel_workers_per_gather を指定します。並列クエリ実行を無効にして CPU の影響を最小限に抑えるには、この値を 0 に設定します。この設定は指標収集プロセスにローカルであり、グローバル データベース構成には影響しません。 | 0 |
なし | Integer |
statementTimeout |
モニタリング エージェントで使用される特定のデータベース接続の statement_timeout を指定します。これにより、単一の指標クエリの実行に許可される最大時間が制限されます。この設定は指標収集プロセスにローカルであり、グローバル データベース構成には影響しません。 | 2s |
30s |
ms、s(デフォルト: ms) |
カスタム指標の定義(definitions)
definitions リストの各エントリは、クエリを定義し、その結果の解釈方法を記述します。
metricGroup: 指標の命名に使用される一意の名前(小文字、数字、アンダースコア)。database: クエリのターゲット データベース名。モニタリング エージェントは、この特定のデータベースへの接続を確立してクエリを実行するため、クエリ対象のスキーマがこのデータベースに存在する必要があります。query: 有効な SQLSELECTステートメント。SELECTクエリのみが許可されています。metrics: SQL 結果列を Prometheus 型にマッピングするリスト。usage: label: 列の値を Prometheus ラベルとして使用します。usage: gauge: 値を Prometheus ゲージ指標としてエクスポートします。usage: counter: 値を Prometheus カウンタ指標としてエクスポートします。
セキュリティと権限
AlloyDB Omni Operator は、alloydbmonitor ユーザーを使用して指標を収集します。デフォルトでは、AlloyDB Omni Operator は LOGIN 属性を使用してこのユーザーを作成し、postgres データベースで pg_monitor ロールを付与します。
カスタム指標を追加する場合は、このユーザーに適切な追加権限があることを確認してください。
- ユーザーの責任: データベース管理者は、カスタムクエリで使用される特定のアプリケーション テーブル、ビュー、スキーマに対して、
alloydbmonitorユーザーにSELECT権限を手動で付与する必要があります。 - 書き込み権限の安全性チェック: システムの完全性を確保し、偶発的なデータ変更を防ぐため、AlloyDB Omni Operator は安全性チェックを実行します。システムが、
alloydbmonitorユーザーがターゲット データベースに対する書き込み権限(INSERT、UPDATE、DELETEなど)を持っていることを検出した場合、システムはエラーをログに記録し、そのデータベースからカスタム指標を収集しません。
権限付与の例
warehousedb という名前のデータベースの public スキーマ内のすべてのテーブルに読み取り専用アクセス権を付与するには、次のコマンドを実行する必要があります。
psql -h <var>DB_CLUSTER_ENDPOINT</var> -U <var>DB_ADMIN_USER</var> -d warehousedb
warehousedb=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO alloydbmonitor;
マニフェストのサンプル
次のマニフェストの例では、postgres データベースに接続し、pg_stat_database システムビューを使用してトランザクション統計情報を追跡するようにモニタリング エージェントを構成します。
apiVersion: alloydbomni.dbadmin.goog/v1
kind: ObservabilityConfig
metadata:
name: obs-metrics
spec:
dbClusterRefs:
- dbcluster-sample
customMetrics:
resourceLimits:
workMemory: "4MB"
maxParallelWorkers: 0
definitions:
- metricGroup: database
database: "postgres"
query: |
SELECT
curr_db, xact_commit, xact_rollback
FROM pg_stat_database WHERE datname IS NOT NULL
metrics:
- name: curr_db
desc: "Database name"
usage: label
- name: xact_commit
desc: "Transactions committed"
usage: counter
- name: xact_rollback
desc: "Transactions rolled back"
usage: counter
指標のリファレンス
このセクションでは、カスタム指標機能が生成する指標について説明します。
生成された指標の出力
このサンプル マニフェストは、次の Prometheus 形式で指標をエクスポートします。
# HELP alloydb_omni_custom_database_xact_commit_total Transactions committed
# TYPE alloydb_omni_custom_database_xact_commit_total counter
alloydb_omni_custom_database_xact_commit_total{database="postgres",curr_db="testdb1",dbcluster="dbcluster-sample",dbcluster_type="Primary",dbinstance="n/a",dbinstance_type="n/a",dbnamespace="mc",dbnode="76d3-dbcluster-sample",dbnode_type="Primary"} 382069 1774388549568
# HELP alloydb_omni_custom_database_xact_rollback_total Transactions rolled back
# TYPE alloydb_omni_custom_database_xact_rollback_total counter
alloydb_omni_custom_database_xact_rollback_total{database="postgres",curr_db="testdb1",dbcluster="dbcluster-sample",dbcluster_type="Primary",dbinstance="n/a",dbinstance_type="n/a",dbnamespace="mc",dbnode="76d3-dbcluster-sample",dbnode_type="Primary"} 4364 1774388549568
標準のラベル
すべてのカスタム指標には、database、dbcluster、dbcluster_type、dbinstance、dbinstance_type、dbnamespace、dbnode、dbnode_type の標準ラベルが自動的に含まれます。これらのラベルの詳細については、AlloyDB Omni の指標ラベルをご覧ください。
指標収集指標
これらの指標は、各指標収集サイクルのステータスを示します。特定のクエリがタイムアウトしたか失敗したかなど、詳細なエラー メッセージはモニタリング エージェント コンテナログで確認できます。
# HELP alloydb_omni_monitor_custom_metrics_errors_total Total number of errors encountered during execution of the custom query
# TYPE alloydb_omni_monitor_custom_metrics_errors_total counter
alloydb_omni_monitor_custom_metrics_errors_total{metricGroup="database",dbcluster="dbcluster-sample",dbnode="...",...} 0 1773703411350
カスタム指標を使用する前に、次の点を考慮してください。
SELECTステートメントのみが許可されます。システムは、データを変更しようとするステートメントを拒否します。クエリを手動で実行し、結果とパフォーマンスを確認してから、カスタム指標の構成に含めます。- 結果の行数が最小限になるように各 SQL クエリを設計します。5 行未満の行と 1 つの行を指定することをおすすめします。これにより、クエリ結果から導出された指標とラベルが過剰なカーディナリティにつながり、モニタリング システムのパフォーマンスに悪影響を及ぼすことがなくなります。
- クエリを最適化し、過剰なリソースを必要としないようにします。
resourceLimitsを使用してデータベースを保護します。 - 各クエリは、ラベル値の一意の組み合わせを含む行を返す必要があります。