맞춤 모니터링 측정항목을 사용하여 관측 가능성 개선

문서 버전을 선택합니다.

AlloyDB Omni Kubernetes 연산자에서 커스텀 측정항목을 사용하여 데이터베이스에 대해 SQL 쿼리를 실행하여 애플리케이션별 측정항목을 정의하고 수집할 수 있습니다. 커스텀 측정항목은 ObservabilityConfig 커스텀 리소스 (CR)를 사용하여 측정항목 수집 규칙을 정의합니다.

ObservabilityConfig를 사용하여 커스텀 측정항목 구성

ObservabilityConfig CR은 dbClusterRefscustomMetrics라는 두 가지 기본 섹션으로 구성됩니다.

dbClusterRefs

이 섹션에는 이 구성이 적용되는 DBCluster 리소스에 대한 참조 목록이 포함되어 있습니다. 각 ObservabilityConfig는 동일한 네임스페이스에서 하나의 DBCluster를 타겟팅해야 합니다.

customMetrics

이 섹션에서는 리소스 한도 및 쿼리 정의를 비롯한 커스텀 측정항목 수집의 핵심 구성을 정의합니다.

리소스 한도 (resourceLimits)

데이터베이스를 보호하기 위해 시스템은 커스텀 쿼리에 한도를 적용합니다. 매니페스트에서 이러한 한도를 지정하지 않으면 시스템은 다음 표에 나열된 기본값을 사용합니다.

매개변수 설명 기본값 고속 충전 단위
workMemory 모니터링 에이전트가 이러한 측정항목을 수집하는 데 사용하는 특정 데이터베이스 연결의 work_mem을 지정합니다. 이 설정은 측정항목 수집 프로세스에 로컬이며 DBCluster 사양에 구성된 전역 work_mem 매개변수에는 영향을 미치지 않습니다. 4MB 해당 사항 없음 KB, MB (기본값: KB)
maxParallelWorkers 모니터링 에이전트가 사용하는 특정 데이터베이스 연결의 max_parallel_workers_per_gather를 지정합니다. 동시 쿼리 실행을 사용 중지하고 CPU 영향을 최소화하려면 이 값을 0으로 설정합니다. 이 설정은 측정항목 수집 프로세스에 로컬이며 전역 데이터베이스 구성에는 영향을 미치지 않습니다. 0 해당 사항 없음 정수
statementTimeout 모니터링 에이전트가 사용하는 특정 데이터베이스 연결의 statement_timeout을 지정합니다. 이렇게 하면 단일 측정항목 쿼리가 실행될 수 있는 최대 시간이 제한됩니다. 이 설정은 측정항목 수집 프로세스에 로컬이며 전역 데이터베이스 구성에는 영향을 미치지 않습니다. 2s 30s ms, s (기본값: ms)

커스텀 측정항목 정의 (definitions)

definitions 목록의 각 항목은 쿼리를 정의하고 결과를 해석하는 방법을 설명합니다.

  • metricGroup: 측정항목 이름 지정에 사용되는 고유한 이름 (소문자, 숫자, 밑줄)
  • database: 쿼리의 대상 데이터베이스 이름입니다. 모니터링 에이전트는 이 특정 데이터베이스에 연결하여 쿼리를 실행하므로 쿼리되는 스키마가 데이터베이스에 있어야 합니다.
  • query: 유효한 SQL SELECT 문입니다. SELECT 쿼리만 허용됩니다.
  • metrics: SQL 결과 열을 Prometheus 유형에 매핑하는 목록입니다.
    • usage: label: 열 값을 Prometheus 라벨로 사용합니다.
    • usage: gauge: 값을 Prometheus 게이지 측정항목으로 내보냅니다.
    • usage: counter: 값을 Prometheus 카운터 측정항목으로 내보냅니다.

보안 및 권한

AlloyDB Omni 연산자는 alloydbmonitor 사용자를 사용하여 측정항목을 수집합니다. 기본적으로 AlloyDB Omni 연산자는 이 사용자를 LOGIN 속성으로 만들고 pg_monitor 역할을 postgres 데이터베이스에서 부여합니다.

커스텀 측정항목을 추가할 때는 이 사용자에게 적절한 추가 권한이 있는지 확인하세요.

  • 사용자 책임: 데이터베이스 관리자는 커스텀 쿼리에 사용되는 특정 애플리케이션 테이블, 뷰 또는 스키마에 대해 alloydbmonitor 사용자에게 SELECT 권한을 수동으로 부여해야 합니다.
  • 쓰기 권한 안전 점검: 시스템 무결성을 보장하고 실수로 인한 데이터 수정을 방지하기 위해 AlloyDB Omni 연산자는 안전 점검을 실행합니다. 시스템에서 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개 미만의 행과 단일 행을 지정하는 것이 좋습니다. 이렇게 하면 쿼리 결과에서 파생된 측정항목과 라벨이 과도한 카디널리티로 이어지지 않아 모니터링 시스템의 성능에 부정적인 영향을 미치지 않습니다.
  • 쿼리를 최적화하고 과도한 리소스가 필요하지 않도록 합니다. resourceLimits를 사용하여 데이터베이스를 보호합니다.
  • 각 쿼리는 라벨 값의 고유한 조합으로 행을 반환해야 합니다.