AlloyDB Omni 로그 순환 구성

문서 버전을 선택합니다.

이 문서에서는 AlloyDB Omni Kubernetes 연산자를 사용할 때 AlloyDB Omni 진단 로그 순환을 구성하는 방법을 설명합니다.

다음 로그 파일은 /obs/diagnostic/ 디렉터리에 있습니다.

  1. postgresql.audit: 이 로그 파일은 세션 및 객체 액세스 감사 로그를 수집합니다. 감사 로그를 수집하려면 감사 로그를 사용 설정해야 합니다.

  2. postgresql.log: 이 로그 파일은 PostgreSQL 서버 로그를 수집합니다. 이러한 로그는 항상 수집되며 사용 설정되지 않아도 됩니다.

로그 파일이 순환되면 다음과 같은 결과가 발생합니다.

  1. 로그 파일이 /obs/diagnostic/archive/ 디렉터리에 복사됩니다. 이름이 같은 로그 파일이 해당 디렉터리에 있으면 덮어씁니다.

  2. 파일이 비어 있도록 원래 순환된 로그 파일의 콘텐츠가 삭제됩니다.

  3. 로그 정보가 즉시 비어 있는 순환 로그 파일에 기록되기 시작합니다. 로그 정보는 파일이 크기 또는 기간 기준점에 도달할 때까지 로그 파일에 기록되며 이 시점에서 다시 순환됩니다. 로그가 너무 커지지 않도록 순환됩니다.

기본적으로 순환은 크기가 200MB에 도달하면 각 로그 파일이 순환되도록 설정되어 있습니다. 기본 순환에는 기간 설정이 포함되지 않습니다.

보관처리된 파일은 7일 동안 보관됩니다. 마지막 순환 중에 보관처리된 파일을 제외하고 7일이 지난 보관처리된 파일은 자동으로 삭제됩니다. 예를 들어 log_rotation_age가 7일이 지난 경우 보관처리된 파일이 현재 파일이 순환되기 전에 7일 기준점에 도달합니다. 이 경우 다음 순환에서 새 보관처리된 파일을 생성할 때까지 이 보관처리된 파일은 삭제되지 않습니다.

순환된 각 로그 파일 이름은 postgresql-%Y-%m-%d_%H%M%S.log 형식을 따릅니다. 타임스탬프는 로그 순환 시에 결정되며 협정 세계시 (UTC)로 표시됩니다. 예를 들어 2024년 12월 20일 13시 1분 2초(UTC)에 로그가 순환되면 보관처리된 파일 이름은 postgresql-2024-12-20_130102.log입니다.

보관처리된 각 파일은 Gzip 파일 형식을 통해 개별적으로 압축됩니다.

감사 로그 사용 설정

세션 및 객체 액세스 로깅을 사용 설정하려면 데이터베이스 클러스터에서 pgAudit 파라미터를 구성하고 데이터베이스에 확장 프로그램을 설치해야 합니다.

1단계: DBCluster 파라미터에서 pgAudit 구성

세션 및 객체 액세스 로그가 postgresql.audit 파일에 수집되려면 pgAudit를 사용 설정하고 pgaudit.log를 사용하여 로깅할 문을 구성해야 합니다.

v1_dbcluster_parameters.yaml 파일의 parameters 섹션에 다음 줄을 추가합니다.

alloydb.enable_pgaudit: "on"
pgaudit.log: "all"

다음은 DBCluster 매니페스트에서 이 항목이 어떻게 표시되는지 보여주는 예시입니다.

apiVersion: v1
kind: Secret
...
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
   name: DB_CLUSTER_NAME
spec:
  databaseVersion: "17.7.0"
  primarySpec:
    ...
    parameters:
      ...
      alloydb.enable_pgaudit: "on"
      pgaudit.log: "all"

자세한 내용은pgaudit 지원되는 데이터베이스 확장 프로그램을 참조하세요.

2단계: 데이터베이스에서 pgAudit 확장 프로그램 만들기

파라미터를 구성하고 데이터베이스가 다시 시작되었는지 확인한 후 데이터베이스에 연결하고 pgAudit 확장 프로그램을 설치해야 합니다.

CREATE EXTENSION IF NOT EXISTS pgaudit;

감사 로깅을 사용 설정하려는 모든 데이터베이스에서 이 명령어를 실행해야 합니다. 이 단계는 DDL 감사에 필요한 이벤트 트리거를 설치하는 데 필요합니다.

pgAudit 파라미터 (GUC)

다음 표에서는 사양의 parameters 섹션에서 구성할 수 있는 주요 pgAudit Grand Unified Configuration 파라미터 (GUC)를 설명합니다. 자세한 내용은 pgAudit 문서를 참조하세요.DBCluster

매개변수 설명 기본값
pgaudit.log 세션 감사 로깅으로 로깅되는 문의 클래스를 지정합니다. 유효한 값은 none, all, read, write, function, role, ddl, misc, misc_set입니다. none
pgaudit.log_catalog 문의의 모든 관계가 pg_catalog에 있는 경우 세션 로깅이 사용 설정되도록 지정합니다. 이 기능을 사용 중지하면 데이터베이스 클라이언트의 로그 노이즈가 줄어듭니다. on
pgaudit.log_parameter 감사 로깅에 문과 함께 전달된 파라미터가 포함되도록 지정합니다. off
pgaudit.log_relation 세션 감사에서 SELECT 또는 DML 문에서 참조되는 각 관계(테이블, 뷰 등)에 대해 별도의 로그 항목을 만드는지 지정합니다. off
pgaudit.log_rows 감사 로깅에 문으로 검색되거나 영향을 받는 행 수가 포함되도록 지정합니다. off
pgaudit.log_statement 로깅에 문 텍스트와 파라미터가 포함되는지 지정합니다. on
pgaudit.role 객체 감사 로깅에 사용할 기본 역할을 지정합니다. 없음

PostgreSQL 서버 로그는 항상 postgresql.log 파일에 수집되며 pgAudit를 사용 설정하지 않아도 됩니다.

감사 로그 파일 경로 보기

SQL 함수 alloydb_audit_current_logfile을 사용하여 감사 로그 파일 경로를 봅니다. 감사가 사용 중지되면 결과는 NULL입니다.

SELECT alloydb_audit_current_logfile();

 alloydb_audit_current_logfile
----------------------------------
 /obs/diagnostic/postgresql.audit

로그 로테이션 구성

로그 순환 시점을 더 세밀하게 제어하려면 최대 파일 크기, 로그 순환 간 기간 또는 둘 다를 구성합니다. 로그 순환 간 기간을 로그 수명이라고도 합니다. 두 설정 모두 사용하면 각 로그는 기준점 중 하나에 도달하면 순환됩니다.

로그 순환을 구성하려면 DBCluster 매니페스트의 parameters 섹션에서 다음 파라미터 중 하나 또는 둘 다 설정합니다.

  • log_rotation_size: 'SIZE_IN_KB'
  • log_rotation_age: 'AGE_IN_MINUTES'

로그 로테이션 설정 중 하나를 사용 중지하려면 0("0")으로 설정합니다. 파일 크기가 200MB에 도달하면 로그를 순환하는 기본 설정을 유지하려면 파라미터를 설정하지 마세요.

로그 로테이션 최대 로그 크기 및 기간 예시

다음 샘플은 파일 크기가 400MB에 도달하거나 로그 순환 간 시간이 1일에 도달하는 것 중 하나가 먼저 발생하면 로그가 순환되도록 설정합니다.

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
spec:
...
  primarySpec:
  ...
    parameters:
      log_rotation_size: "400000" # 400 MB
      log_rotation_age: "1440" # 24 hours * 60 minutes = 1 day

로그 순환 최대 로그 크기 예시

다음 샘플은 파일 크기가 400MB에 도달하면 로그가 순환되도록 설정합니다.

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
spec:
...
  primarySpec:
  ...
    parameters:
      log_rotation_size: "400000" # 400 MB
      log_rotation_age: "0" # Set to 0 to disable

로그 순환 기간 예시

다음 샘플은 24시간마다 한 번씩 로그가 순환되도록 설정합니다.

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
spec:
...
  primarySpec:
  ...
    parameters:
      log_rotation_size: "0" # Set to 0 to disable
      log_rotation_age: "1440" # 24 hours * 60 minutes = 1 day

감사 로그를 중앙 집중식 싱크로 전달

AlloyDB Omni는 데이터베이스 컨테이너 내의 /obs/diagnostic/postgresql.audit 파일에 감사 로그를 씁니다. 이러한 로그를 중앙 집중식 로깅 싱크 (예: Cloud Logging, Datadog, Splunk 또는 Elasticsearch)로 전달하려면 Sidecar 커스텀 리소스 (CR)를 사용하여 사이드카 컨테이너를 배포하면 됩니다.

사이드카 컨테이너는 데이터베이스와 동일한 포드에서 실행되고 로그 볼륨 (obsdisk)을 마운트하며 로그 파일을 테일링하여 로깅 대상으로 전달합니다.

예: Fluent Bit 사이드카를 사용하여 로그 전달

다음 예시에서는 Fluent Bit 사이드카를 사용하여 pgAudit 로그를 테일링하고 표준 출력으로 출력하는 방법을 보여줍니다. 표준 출력에서 표준 Kubernetes 클러스터 로그 수집기 (예: Google Cloud Google Kubernetes Engine (GKE)의 Logging 에이전트)로 수집할 수 있습니다.

  1. Fluent Bit 구성을 위한 ConfigMap 만들기:

    감사 로그를 테일링하는 Fluent Bit 구성이 포함된 ConfigMap을 만듭니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: fluentbit-config
      namespace: NAMESPACE
    data:
      fluent-bit.conf: |
        [SERVICE]
            Flush        1
            Daemon       Off
            Log_Level    info
    
        [INPUT]
            Name         tail
            Path         /obs/diagnostic/postgresql.audit
            Tag          pgaudit
            DB           /tmp/fluent-bit-pgaudit.db
    
        [OUTPUT]
            Name         stdout
            Match        *
    

    NAMESPACE를 데이터베이스 클러스터의 네임스페이스로 바꿉니다.

  2. Sidecar 커스텀 리소스 만들기:

    Fluent Bit 컨테이너를 정의하고 AlloyDB Omni 로그가 포함된 obsdisk 볼륨과 ConfigMap 볼륨을 모두 마운트하는 Sidecar 매니페스트를 만듭니다.

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Sidecar
    metadata:
      name: pgaudit-forwarder
      namespace: NAMESPACE
    spec:
      additionalVolumes:
      - name: fluentbit-config-volume
        configMap:
          name: fluentbit-config
      sidecars:
      - name: fluent-bit
        image: fluent/fluent-bit:3.0
        command: ["/fluent-bit/bin/fluent-bit"]
        args: ["-c", "/fluent-bit/etc/fluent-bit.conf"]
        volumeMounts:
        - name: obsdisk
          mountPath: /obs
        - name: fluentbit-config-volume
          mountPath: /fluent-bit/etc/
    
  3. 사이드카를 데이터베이스 클러스터에 등록:

    사이드카를 참조하도록 DBCluster 매니페스트를 업데이트하거나 다음 명령어를 사용하여 클러스터를 패치합니다.

    kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"sidecarRef":{"name":"pgaudit-forwarder"}}}}' --type=merge

    DB_CLUSTER_NAME을 데이터베이스 클러스터 이름으로 바꿉니다.

    사이드카 관리에 대한 자세한 내용은 사이드카 컨테이너 구성을 참조하세요.

다음 단계