본문 바로가기
WIKI 기술 지식 베이스

Aurora 관리형 Postgres용 데이터베이스 모니터링 설정

원문 보기 위키 갱신

Database Monitoring은 Postgres 데이터베이스에 대한 깊은 가시성을 제공해요. 쿼리 메트릭, 쿼리 샘플, 실행 계획(explain plan), 데이터베이스 상태, 장애 조치(failover), 이벤트까지 한눈에 볼 수 있어요.

Agent가 읽기 전용 사용자로 데이터베이스에 로그인해서 텔레메트리(telemetry)를 직접 수집합니다. Postgres 데이터베이스에서 Database Monitoring을 활성화하려면 다음 설정을 순서대로 진행해요.

  1. 데이터베이스 파라미터 설정
  2. Agent에 데이터베이스 접근 권한 부여
  3. Agent 설치 및 설정
  4. RDS 통합 설치

출처: 문서

본문

시작하기 전에

{% dl %}

{% dt %} 지원되는 PostgreSQL 버전 {% /dt %}

{% dd %} 9.6, 10, 11, 12, 13, 14, 15, 16, 17, 18 {% /dd %}

{% dt %} 지원되는 Agent 버전 {% /dt %}

{% dd %} 7.36.1+ {% /dd %}

{% dt %} 성능 영향 {% /dt %}

{% dd %} Database Monitoring의 기본 Agent 설정은 보수적이지만, 수집 간격이나 쿼리 샘플링 비율 같은 설정은 필요에 맞게 조정할 수 있어요. 대부분의 워크로드에서 Agent는 데이터베이스의 쿼리 실행 시간의 1% 미만, CPU의 1% 미만을 차지합니다. Database Monitoring은 기본 Agent 위에서 통합(integration)으로 실행돼요 (벤치마크 참고). {% /dd %}

{% dt %} 프록시, 로드 밸런서, 커넥션 풀러 {% /dt %}

{% dd %} Datadog Agent는 모니터링 대상 호스트에 직접 연결해야 해요. 자체 호스팅 데이터베이스라면 127.0.0.1 또는 소켓을 사용해요. Agent는 프록시, 로드 밸런서, pgbouncer 같은 커넥션 풀러, 또는 Aurora 클러스터 엔드포인트를 통해서 데이터베이스에 연결하면 안 됩니다. 클러스터 엔드포인트에 연결하면 Agent가 임의의 레플리카(replica) 하나에서 데이터를 수집해서 그 레플리카에 대한 가시성만 제공하기 때문이에요. 실행 중에 Agent가 다른 호스트에 연결하면(장애 조치, 로드 밸런싱 등) 두 호스트 간의 통계 차이를 계산하므로 부정확한 메트릭이 만들어져요. {% /dd %}

{% dt %} 데이터 보안 고려 사항 {% /dt %}

{% dd %} Agent가 데이터베이스에서 수집하는 데이터와 안전하게 보호하는 방법에 대해서는 민감 정보를 참고해요. {% /dd %}

{% /dl %}

Postgres 설정 구성

DB 파라미터 그룹에서 다음 파라미터를 설정하고 설정이 적용되도록 서버를 재시작하세요. 파라미터에 대한 자세한 내용은 Postgres 문서를 참고해요.

필수 파라미터

Parameter Value Description
shared_preload_libraries pg_stat_statements postgresql.queries.* 메트릭에 필요해요. pg_stat_statements 확장으로 쿼리 메트릭을 수집할 수 있게 해요. Aurora에서는 기본적으로 켜져 있어요.
track_activity_query_size 4096 더 큰 쿼리 수집에 필요해요. pg_stat_activity의 SQL 텍스트 크기를 늘려줘요. 기본값으로 두면 1024자보다 긴 쿼리는 수집되지 않아요.

선택 파라미터

Parameter Value Description
pg_stat_statements.track ALL 저장 프로시저와 함수 내부의 문장 추적을 활성화해요.
pg_stat_statements.max 10000 pg_stat_statements에 추적되는 정규화된 쿼리 수를 늘려요. 다양한 클라이언트가 다양한 종류의 쿼리를 보내는 대용량 데이터베이스에 권장해요.
pg_stat_statements.track_utility off PREPARE, EXPLAIN 같은 유틸리티 명령을 비활성화해요. off로 설정하면 SELECT, UPDATE, DELETE 같은 쿼리만 추적됩니다.
track_io_timing on 쿼리의 블록 읽기/쓰기 시간 수집을 활성화해요.

Agent 접근 권한 부여

Datadog Agent는 통계와 쿼리를 수집하려면 데이터베이스 서버에 대한 읽기 전용 접근이 필요해요.

Postgres가 복제된 경우 기본(primary) 데이터베이스 서버(작성자/writer)에서 다음 SQL 명령을 실행하세요. Agent는 연결한 데이터베이스와 무관하게 서버의 모든 데이터베이스에서 텔레메트리를 수집할 수 있어요. Agent가 다른 데이터베이스에 고유한 데이터에 대한 커스텀 쿼리를 실행해야 하는 경우가 아니라면 기본 postgres 데이터베이스를 사용해요.

선택한 데이터베이스에 수퍼유저(또는 충분한 권한이 있는 사용자)로 연결하세요. 예를 들어 psql로 postgres 데이터베이스에 연결하려면:

psql -h mydb.example.com -d postgres -U postgres

datadog 사용자를 생성하세요:

CREATE USER datadog WITH password '<PASSWORD>';

참고: IAM 인증도 지원돼요. Aurora 인스턴스에 적용하는 방법은 가이드를 참고하세요.

{% tab title="Postgres ≥ 10" %} 모든 데이터베이스에 다음 스키마를 생성하세요:

CREATE SCHEMA datadog;
GRANT USAGE ON SCHEMA datadog TO datadog;
GRANT USAGE ON SCHEMA public TO datadog;
GRANT pg_monitor TO datadog;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

{% /tab %}

{% tab title="Postgres 9.6" %} 모든 데이터베이스에 다음 스키마를 생성하세요:

CREATE SCHEMA datadog;
GRANT USAGE ON SCHEMA datadog TO datadog;
GRANT USAGE ON SCHEMA public TO datadog;
GRANT SELECT ON pg_stat_database TO datadog;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

Agent가 pg_stat_activity와 pg_stat_statements의 전체 내용을 읽을 수 있도록 모든 데이터베이스에 함수를 생성하세요:

CREATE OR REPLACE FUNCTION datadog.pg_stat_activity() RETURNS SETOF pg_stat_activity AS
  $$ SELECT * FROM pg_catalog.pg_stat_activity; $$
LANGUAGE sql
SECURITY DEFINER;
CREATE OR REPLACE FUNCTION datadog.pg_stat_statements() RETURNS SETOF pg_stat_statements AS
    $$ SELECT * FROM pg_stat_statements; $$
LANGUAGE sql
SECURITY DEFINER;

{% /tab %}

{% alert level="info" %} 추가 테이블을 쿼리해야 하는 데이터 수집이나 커스텀 메트릭의 경우, 해당 테이블에 대한 SELECT 권한을 datadog 사용자에게 부여해야 할 수 있어요. 예: grant SELECT on <TABLE_NAME> to datadog;. 자세한 내용은 PostgreSQL 커스텀 메트릭 수집을 참고해요. {% /alert %}

실행 계획 함수 생성

Agent가 실행 계획을 수집할 수 있도록 모든 데이터베이스에 다음 함수를 생성하세요:

CREATE OR REPLACE FUNCTION datadog.explain_statement(
   l_query TEXT,
   OUT explain JSON
)
RETURNS SETOF JSON AS
$$
DECLARE
curs REFCURSOR;
plan JSON;

BEGIN
   SET TRANSACTION READ ONLY;

   OPEN curs FOR EXECUTE pg_catalog.concat('EXPLAIN (FORMAT JSON) ', l_query);
   FETCH curs INTO plan;
   CLOSE curs;
   RETURN QUERY SELECT plan;
END;
$$
LANGUAGE 'plpgsql'
RETURNS NULL ON NULL INPUT
SECURITY DEFINER;

컬럼 통계 함수 생성

Agent가 pg_stats에서 컬럼 수준 테이블 통계를 수집할 수 있도록 모든 데이터베이스에 다음 함수를 생성하세요:

CREATE OR REPLACE FUNCTION datadog.column_statistics()
RETURNS TABLE (
    schemaname name, tablename name, attname name,
    n_distinct real, avg_width integer, null_frac real,
    inherited boolean, correlation real, most_common_freqs real[]
) AS
$$ SELECT schemaname, tablename, attname, n_distinct, avg_width, null_frac,
          inherited, correlation, most_common_freqs
          FROM pg_catalog.pg_stats
          WHERE schemaname NOT IN ('pg_catalog', 'information_schema'); $$
LANGUAGE sql
SECURITY DEFINER
SET search_path = pg_catalog, pg_temp;

함수가 생기면 Postgres 인스턴스 설정에서 수집을 활성화하세요:

instances:
  - dbm: true
    ...
    collect_column_statistics:
      enabled: true

튜닝 옵션은 고급 설정을 참고해요.

비밀번호 안전하게 보관

Vault 같은 시크릿 관리 소프트웨어로 비밀번호를 보관하세요. 그러면 Agent 설정 파일에서 ENC[<SECRET_NAME>] 형식으로 참조할 수 있어요. 예를 들어 ENC[datadog_user_database_password]처럼요. 자세한 내용은 Secrets Management를 참고해요.

이 페이지의 예제는 비밀번호가 저장된 시크릿 이름으로 datadog_user_database_password를 사용해요. 비밀번호를 평문으로도 참조할 수 있지만 권장하지 않아요.

데이터베이스 권한 확인

권한이 올바른지 확인하려면 다음 명령으로 Agent 사용자가 데이터베이스에 연결하고 핵심 테이블을 읽을 수 있는지 확인하세요:

{% tab title="Postgres ≥ 10" %}

psql -h localhost -U datadog postgres -A \
  -c "select * from pg_stat_database limit 1;" \
  && echo -e "\e[0;32mPostgres connection - OK\e[0m" \
  || echo -e "\e[0;31mCannot connect to Postgres\e[0m"
psql -h localhost -U datadog postgres -A \
  -c "select * from pg_stat_activity limit 1;" \
  && echo -e "\e[0;32mPostgres pg_stat_activity read OK\e[0m" \
  || echo -e "\e[0;31mCannot read from pg_stat_activity\e[0m"
psql -h localhost -U datadog postgres -A \
  -c "select * from pg_stat_statements limit 1;" \
  && echo -e "\e[0;32mPostgres pg_stat_statements read OK\e[0m" \
  || echo -e "\e[0;31mCannot read from pg_stat_statements\e[0m"

{% /tab %}

{% tab title="Postgres 9.6" %}

psql -h localhost -U datadog postgres -A \
  -c "select * from pg_stat_database limit 1;" \
  && echo -e "\e[0;32mPostgres connection - OK\e[0m" \
  || echo -e "\e[0;31mCannot connect to Postgres\e[0m"
psql -h localhost -U datadog postgres -A \
  -c "select * from datadog.pg_stat_activity() limit 1;" \
  && echo -e "\e[0;32mPostgres pg_stat_activity read OK\e[0m" \
  || echo -e "\e[0;31mCannot read from pg_stat_activity\e[0m"
psql -h localhost -U datadog postgres -A \
  -c "select * from datadog.pg_stat_statements() limit 1;" \
  && echo -e "\e[0;32mPostgres pg_stat_statements read OK\e[0m" \
  || echo -e "\e[0;31mCannot read from pg_stat_statements\e[0m"

{% /tab %}

비밀번호를 묻는 메시지가 나오면 datadog 사용자를 만들 때 입력했던 비밀번호를 사용하세요.

Agent 설치 및 설정

Aurora 호스트를 모니터링하려면 인프라에 Datadog Agent를 설치하고 각 인스턴스 엔드포인트에 원격으로 연결하도록 설정하세요. Agent가 데이터베이스에서 실행될 필요는 없고 연결만 하면 돼요. 여기 언급되지 않은 추가 Agent 설치 방법은 Agent 설치 안내를 참고해요.

Autodiscovery 설정 (권장)

Datadog Agent는 클러스터 내 모든 Aurora 엔드포인트에 대한 Autodiscovery를 지원해요.

특정 인스턴스에 다른 설정이 필요하거나, Aurora 엔드포인트를 수동으로 지정하고 싶다면 아래 수동 설정 섹션을 따라가세요. 그렇지 않다면 Datadog는 Aurora DB 클러스터용 Autodiscovery 설정 안내를 사용할 것을 권장해요.

{% tab title="Host" %} 호스트에서 실행 중인 Agent로 Database Monitoring 메트릭을 수집하도록 설정하려면(예: Aurora 데이터베이스에서 수집할 작은 EC2 인스턴스를 준비한 경우):

  1. postgres.d/conf.yaml 파일을 편집해 host / port를 지정하고 모니터링할 마스터를 설정하세요. 사용 가능한 모든 설정 옵션은 샘플 postgres.d/conf.yaml을 참고해요.

    init_config:
    instances:
      - dbm: true
        host: '<AWS_INSTANCE_ENDPOINT>'
        port: 5432
        username: datadog
        password: 'ENC[datadog_user_database_password]'
        aws:
          instance_endpoint: '<AWS_INSTANCE_ENDPOINT>'
          region: '<REGION>'
    
        ## Optional: Connect to a different database if needed for `custom_queries`
        # dbname: '<DB_NAME>'
    

{% alert level="danger" %} 여기서는 클러스터 엔드포인트가 아닌 Aurora 인스턴스 엔드포인트를 사용하세요. {% /alert %} Agent를 재시작하세요. {% /tab %}

{% tab title="Docker" %} ECS나 Fargate 같은 Docker 컨테이너에서 실행 중인 Agent로 통합을 설정하려면 몇 가지 방법이 있어요. 모두 Docker 설정 문서에 자세히 나와 있으니 참고해요.

아래 예제는 Docker 라벨과 Autodiscovery 템플릿으로 Postgres 통합을 설정하는 방법을 보여줘요.

참고: 라벨 Autodiscovery가 동작하려면 Agent가 Docker 소켓에 읽기 권한이 있어야 해요.

명령줄

Agent를 시작하려면 커맨드 라인에서 다음 명령을 실행하세요. 플레이스홀더 값은 계정과 환경에 맞게 바꿔요.

export DD_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export DD_AGENT_VERSION=<AGENT_VERSION>

docker run -e "DD_API_KEY=${DD_API_KEY}" \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -l com.datadoghq.ad.checks='{"postgres": {
    "init_config": {},
    "instances": [{
      "dbm": true,
      "host": "<AWS_INSTANCE_ENDPOINT>",
      "port": 5432,
      "username": "datadog",
      "password": "<UNIQUEPASSWORD>",
       "aws": {
         "instance_endpoint": "<AWS_INSTANCE_ENDPOINT>",
         "region": "<REGION>"
       },
      "tags": ["dbinstanceidentifier:<DB_INSTANCE_NAME>"]
    }]
  }}' \
  registry.datadoghq.com/agent:${DD_AGENT_VERSION}

Postgres 9.6이라면 host와 port를 지정하는 인스턴스 설정에 다음 항목을 추가하세요:

"pg_stat_statements_view": "datadog.pg_stat_statements()",
"pg_stat_activity_view": "datadog.pg_stat_activity()"

Dockerfile

Dockerfile에서 라벨을 지정할 수도 있어요. 그러면 인프라 설정을 수정하지 않고 커스텀 Agent를 빌드·배포할 수 있어요:

FROM registry.datadoghq.com/agent:<AGENT_VERSION>

LABEL "com.datadoghq.ad.check_names"='["postgres"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"dbm": true, "host": "<AWS_INSTANCE_ENDPOINT>", "port": 5432,"username": "datadog","password": "ENC[datadog_user_database_password]","aws": {"instance_endpoint": "<AWS_INSTANCE_ENDPOINT>", "region": "<REGION>"}, "tags": ["dbinstanceidentifier:<DB_INSTANCE_NAME>"]}]'

Postgres 9.6이라면 host와 port를 지정하는 인스턴스 설정에 다음 항목을 추가하세요:

"pg_stat_statements_view": "datadog.pg_stat_statements()",
"pg_stat_activity_view": "datadog.pg_stat_activity()"

datadog 사용자의 비밀번호를 평문으로 노출하지 않으려면 Agent의 시크릿 관리 패키지를 사용하고 ENC[] 구문으로 비밀번호를 선언하세요. 또는 Autodiscovery 템플릿 변수 문서를 참고해 비밀번호를 환경 변수로 제공할 수도 있어요. {% /tab %}

{% tab title="Kubernetes" %} Kubernetes 클러스터를 운영 중이라면 Datadog Cluster Agent를 사용해 Database Monitoring을 활성화하세요.

참고: 진행 전에 Datadog Cluster Agent에서 클러스터 체크가 활성화되어 있는지 확인하세요.

아래는 다양한 Datadog Cluster Agent 배포 방식으로 Postgres 통합을 설정하는 단계별 안내예요.

Operator

Kubernetes 및 통합의 Operator 안내를 참고하면서 아래 단계로 Postgres 통합을 설정해요:

  1. 다음 설정으로 datadog-agent.yaml 파일을 생성하거나 업데이트하세요:

    apiVersion: datadoghq.com/v2alpha1
    kind: DatadogAgent
    metadata:
      name: datadog
    spec:
      global:
        clusterName: <CLUSTER_NAME>
        site: <DD_SITE>
        credentials:
          apiSecret:
            secretName: datadog-agent-secret
            keyName: api-key
    
      features:
        clusterChecks:
          enabled: true
    
      override:
        nodeAgent:
          image:
            name: agent
            tag: <AGENT_VERSION>
    
        clusterAgent:
          extraConfd:
            configDataMap:
              postgres.yaml: |-
                cluster_check: true
                init_config:
                instances:
                - host: <AWS_INSTANCE_ENDPOINT>
                  port: 5432
                  username: datadog
                  password: 'ENC[datadog_user_database_password]'
                  dbm: true
                  aws:
                    instance_endpoint: <AWS_INSTANCE_ENDPOINT>
                    region: <REGION>
                  tags:
                  - "dbinstanceidentifier:<DB_INSTANCE_NAME>"
    

참고: Postgres 9.6이라면 host와 port를 지정하는 인스턴스 설정에 다음 줄을 추가하세요:

pg_stat_statements_view: datadog.pg_stat_statements()
pg_stat_activity_view: datadog.pg_stat_activity()
  1. 다음 명령으로 Datadog Operator에 변경 사항을 적용하세요:

    kubectl apply -f datadog-agent.yaml
    

Helm

Kubernetes 및 통합의 Helm 안내를 참고하면서 아래 단계로 Postgres 통합을 설정해요:

  1. (Cluster Agent 설치 안내에서 사용한) datadog-values.yaml 파일을 다음 설정으로 업데이트하세요:

    datadog:
      clusterChecks:
        enabled: true
    
    clusterChecksRunner:
      enabled: true
    
    clusterAgent:
      enabled: true
      confd:
        postgres.yaml: |-
          cluster_check: true
          init_config:
          instances:
          - dbm: true
            host: <AWS_INSTANCE_ENDPOINT>
            port: 5432
            username: datadog
            password: 'ENC[datadog_user_database_password]'
            aws:
              instance_endpoint: <AWS_INSTANCE_ENDPOINT>
              region: <REGION>
            tags:
            - "dbinstanceidentifier:<DB_INSTANCE_NAME>"
    

참고: Postgres 9.6이라면 host와 port를 지정하는 인스턴스 설정에 다음 줄을 추가하세요:

pg_stat_statements_view: datadog.pg_stat_statements()
pg_stat_activity_view: datadog.pg_stat_activity()
  1. 위 설정 파일로 Agent를 다음 명령으로 배포하세요:

    helm install datadog-agent -f datadog-values.yaml datadog/datadog
    

{% alert level="info" %} Windows라면 helm install 명령에 --set targetSystem=windows를 추가하세요. {% /alert %}

마운트된 파일로 설정

마운트된 설정 파일로 클러스터 체크를 설정하려면, 설정 파일을 Cluster Agent 컨테이너의 /conf.d/postgres.yaml 경로에 마운트하세요:

cluster_check: true  # Make sure to include this flag
init_config:
instances:
  - dbm: true
    host: '<AWS_INSTANCE_ENDPOINT>'
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    aws:
      instance_endpoint: <AWS_INSTANCE_ENDPOINT>
      region: <REGION>
    tags:
    - "dbinstanceidentifier:<DB_INSTANCE_NAME>"

Kubernetes 서비스 어노테이션으로 설정

파일을 마운트하는 대신 인스턴스 설정을 Kubernetes 서비스로 선언할 수도 있어요. Kubernetes에서 실행 중인 Agent에 이 체크를 설정하려면 다음 구문으로 서비스를 생성하세요:

Autodiscovery 어노테이션 v2

apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    tags.datadoghq.com/env: '<ENV>'
    tags.datadoghq.com/service: '<SERVICE>'
  annotations:
    ad.datadoghq.com/service.checks: |
      {
        "postgres": {
          "init_config": <INIT_CONFIG>,
          "instances": [
            {
              "dbm": true,
              "host": "<AWS_INSTANCE_ENDPOINT>",
              "port": 5432,
              "username": "datadog",
              "password": "ENC[datadog_user_database_password]",
              "aws": {
                "instance_endpoint": "<AWS_INSTANCE_ENDPOINT>",
                "region": "<REGION>"
              },
              "tags": [
                "dbinstanceidentifier:<DB_INSTANCE_NAME>"
              ]
            }
          ]
        }
      }
spec:
  ports:
  - port: 5432
    protocol: TCP
    targetPort: 5432
    name: postgres

자세한 내용은 Autodiscovery 어노테이션을 참고해요.

Postgres 9.6을 사용한다면 인스턴스 설정에 다음을 추가하세요:

"pg_stat_statements_view": "datadog.pg_stat_statements()",
"pg_stat_activity_view": "datadog.pg_stat_activity()"

Cluster Agent가 이 설정을 자동으로 등록하고 Postgres 체크를 실행하기 시작해요.

datadog 사용자의 비밀번호를 평문으로 노출하지 않으려면 Agent의 시크릿 관리 패키지를 사용하고 ENC[] 구문으로 비밀번호를 선언하세요. {% /tab %}

Agent 설정 확인

Agent의 status 하위 명령을 실행하고 Checks 섹션에서 postgres를 찾아보세요. 또는 Databases 페이지를 방문해 바로 시작해도 돼요!

예제 Agent 설정

하나의 Agent가 여러 호스트에 연결

단일 Agent 호스트가 여러 원격 데이터베이스 인스턴스에 연결하도록 설정하는 건 흔한 일이에요 (DBM의 Agent 설치 아키텍처 참조). 여러 호스트에 연결하려면 Postgres 통합 설정에서 호스트마다 항목을 만들어요.

{% alert level="info" %} Datadog는 하나의 Agent로 최대 30개의 데이터베이스 인스턴스를 모니터링할 것을 권장해요. 벤치마크에 따르면 t4g.medium EC2 인스턴스(2 CPU, 4GB RAM)에서 실행 중인 Agent 하나가 RDS db.t3.medium 인스턴스(2 CPU, 4GB RAM) 30개를 성공적으로 모니터링할 수 있어요. {% /alert %}

init_config:
instances:
  - dbm: true
    host: example-service-primary.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
  - dbm: true
    host: example-service–replica-1.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
  - dbm: true
    host: example-service–replica-2.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
    [...]

데이터베이스 호스트의 여러 데이터베이스 모니터링

database_autodiscovery 옵션을 사용하면 Agent가 호스트의 모든 데이터베이스를 발견해 모니터링할 수 있어요. include 또는 exclude 필드로 발견할 데이터베이스 범위를 좁힐 수 있어요. 자세한 내용은 postgres.d/conf.yaml 샘플을 참고해요.

init_config:
instances:
  - dbm: true
    host: example-service-primary.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    database_autodiscovery:
      enabled: true
      # Optionally, set the include field to specify
      # a set of databases you are interested in discovering
      include:
        - mydb.*
        - example.*
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'

커스텀 쿼리 실행

커스텀 메트릭을 수집하려면 custom_queries 옵션을 사용해요. 자세한 내용은 postgres.d/conf.yaml 샘플을 참고해요.

init_config:
instances:
  - dbm: true
    host: localhost
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    custom_queries:
    - metric_prefix: employee
      query: SELECT age, salary, hours_worked, name FROM hr.employees;
      columns:
        - name: custom.employee_age
          type: gauge
        - name: custom.employee_salary
           type: gauge
        - name: custom.employee_hours
           type: count
        - name: name
           type: tag
      tags:
        - 'table:employees'

여러 데이터베이스의 relation 메트릭 모니터링

relation 메트릭(예: postgresql.seq_scans, postgresql.dead_rows, postgresql.index_rows_read, postgresql.table_size)을 수집하려면 Agent가 각 데이터베이스에 연결하도록 설정해야 해요 (기본적으로 Agent는 postgres 데이터베이스에만 연결해요).

모든 데이터베이스에서 DBM 텔레메트리를 수집하도록 단일 "DBM" 인스턴스를 지정하세요. 각 데이터베이스 이름을 지정하지 않으려면 database_autodiscovery 옵션을 사용해요.

init_config:
instances:
  # This instance is the "DBM" instance. It will connect to the
  # all logical databases, and send DBM telemetry from all databases
  - dbm: true
    host: example-service-primary.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    database_autodiscovery:
      enabled: true
      exclude:
        - ^users$
        - ^inventory$
    relations:
      - relation_regex: .*
  # This instance only collects data from the `users` database
  # and collects relation metrics from tables prefixed by "2022_"
  - host: example-service-primary.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    dbname: users
    dbstrict: true
    relations:
      - relation_regex: 2022_.*
        relkind:
          - r
          - i
  # This instance only collects data from the `inventory` database
  # and collects relation metrics only from the specified tables
  - host: example-service-primary.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    dbname: inventory
    dbstrict: true
    relations:
      - relation_name: products
      - relation_name: external_seller_products

스키마 수집

이 기능을 활성화하려면 collect_schemas 옵션을 사용해요. 각 논리적 데이터베이스에 연결하도록 Agent도 설정해야 해요.

각 논리적 데이터베이스를 지정하지 않으려면 database_autodiscovery 옵션을 사용해요. 자세한 내용은 postgres.d/conf.yaml 샘플을 참고해요.

init_config:
# This instance only collects data from the `users` database
# and collects relation metrics only from the specified tables
instances:
  - dbm: true
    host: example-service-primary.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    dbname: users
    dbstrict: true
    collect_schemas:
      enabled: true
    relations:
      - products
      - external_seller_products
  # This instance detects every logical database automatically
  # and collects relation metrics from every table
  - dbm: true
    host: example-service–replica-1.example-host.com
    port: 5432
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    database_autodiscovery:
      enabled: true
    collect_schemas:
      enabled: true
    relations:
      - relation_regex: .*

프록시를 통한 호스트 연결

Cloud SQL Auth proxy 같은 프록시를 통해 Agent가 연결해야 한다면 모든 텔레메트리의 호스트네임이 데이터베이스 인스턴스가 아닌 프록시로 태그돼요. reported_hostname 옵션으로 Agent가 감지하는 호스트네임을 커스텀 오버라이드하세요.

init_config:
instances:
  - dbm: true
    host: localhost
    port: 5000
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    reported_hostname: example-service-primary
  - dbm: true
    host: localhost
    port: 5001
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    reported_hostname: example-service-replica-1

RDS 통합 설치

DBM에서 데이터베이스 텔레메트리와 함께 AWS의 CPU 같은 인프라 메트릭을 보려면 RDS 통합을 설치하세요 (선택 사항).

문제 해결

통합과 Agent를 설명한 대로 설치·설정했는데도 예상대로 동작하지 않는다면 문제 해결을 참고해요.

더 알아보기 (Learn more)

추가로 도움이 되는 문서, 링크, 아티클: