カスタム モニタリング指標を使用してオブザーバビリティを改善する

ドキュメントのバージョンを選択してください。

AlloyDB Omni Kubernetes オペレーターでカスタム指標を使用すると、データベースに対して SQL クエリを実行して、アプリケーション固有の指標を定義して収集できます。カスタム指標は、ObservabilityConfig カスタム リソース(CR)を使用して指標収集ルールを定義します。

ObservabilityConfig を使用してカスタム指標を構成する

ObservabilityConfig CR は、dbClusterRefscustomMetrics の 2 つの主要なセクションで構成されています。

dbClusterRefs

このセクションには、この構成が適用される DBCluster リソースへの参照のリストが含まれています。各 ObservabilityConfig は、同じ Namespace 内の 1 つの DBCluster をターゲットにする必要があります。

customMetrics

このセクションでは、リソースの上限やクエリ定義など、カスタム指標の収集のコア構成を定義します。

リソースの上限(resourceLimits

データベースを保護するため、システムはカスタム クエリに上限を適用します。マニフェストでこれらの上限を指定しない場合、システムは次の表に示すデフォルト値を使用します。

パラメータ 説明 デフォルト 最大 単位
workMemory モニタリング エージェントがこれらの指標を収集するために使用する特定のデータベース接続の work_mem を指定します。この設定は指標収集プロセスにローカルであり、DBCluster 仕様で構成されたグローバル work_mem パラメータには影響しません。 4MB なし KBMB(デフォルト: KB
maxParallelWorkers モニタリング エージェントで使用される特定のデータベース接続の max_parallel_workers_per_gather を指定します。並列クエリ実行を無効にして CPU の影響を最小限に抑えるには、この値を 0 に設定します。この設定は指標収集プロセスにローカルであり、グローバル データベース構成には影響しません。 0 なし Integer
statementTimeout モニタリング エージェントで使用される特定のデータベース接続の statement_timeout を指定します。これにより、単一の指標クエリの実行に許可される最大時間が制限されます。この設定は指標収集プロセスにローカルであり、グローバル データベース構成には影響しません。 2s 30s mss(デフォルト: ms

カスタム指標の定義(definitions

definitions リストの各エントリは、クエリを定義し、その結果の解釈方法を記述します。

  • metricGroup: 指標の命名に使用される一意の名前(小文字、数字、アンダースコア)。
  • database: クエリのターゲット データベース名。モニタリング エージェントは、この特定のデータベースへの接続を確立してクエリを実行するため、クエリ対象のスキーマがこのデータベースに存在する必要があります。
  • query: 有効な SQL SELECT ステートメント。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 ユーザーがターゲット データベースに対する書き込み権限(INSERTUPDATEDELETE など)を持っていることを検出した場合、システムはエラーをログに記録し、そのデータベースからカスタム指標を収集しません。

権限付与の例

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

標準のラベル

すべてのカスタム指標には、databasedbclusterdbcluster_typedbinstancedbinstance_typedbnamespacedbnodedbnode_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 を使用してデータベースを保護します。
  • 各クエリは、ラベル値の一意の組み合わせを含む行を返す必要があります。