Postgres

Supported OS Linux Windows Mac OS

통합 버전22.6.0

PostgreSQL 그래프

개요

Postgres 통합은 Postgres 데이터베이스에 대한 상태 및 성능 메트릭을 거의 실시간으로 제공합니다. 제공된 대시보드를 사용하여 이러한 메트릭을 시각화하고 모니터를 만들어 팀에 PostgreSQL 상태를 알릴 수 있습니다.

데이터베이스 모니터링(DBM)을 활성화하면 쿼리 성능 및 데이터베이스 상태에 대한 향상된 인사이트를 얻을 수 있습니다. 표준 통합, Datadog DBM은 쿼리 수준 메트릭, 실시간 및 과거 쿼리 스냅샷, 대기 이벤트 분석, 데이터베이스 로드, 쿼리 설명 계획, 차단 쿼리 인사이트 등을 제공합니다.

Postgres 버전 9.6-16이 지원됩니다.

설정

이 페이지는 표준 Postgres 에이전트 통합에 대해 설명합니다. Postgres용 데이터베이스 모니터링 제품을 찾고 계신다면 Datadog 데이터베이스 모니터링을 참조하세요.

설치

PostgreSQL 점검은 에이전트와 함께 패키지화되어 있습니다. PostgreSQL 메트릭 및 로그를 수집하려면 에이전트을 설치하세요.

구성

참고: PostgreSQL용 데이터베이스 모니터링을 설치하려면 데이터베이스 모니터링 설명서에서 호스팅 솔루션을 선택하여 지침을 확인하세요.

표준 통합을 단독으로 설치하는 경우에만 이 가이드의 다음 단계를 진행하세요.

Postgres 준비

표준 PostgreSQL 통합을 시작하려면 PostgreSQL 서버에 대한 적절한 액세스 권한이 있는 읽기 전용 datadog 사용자를 만드세요. PostgreSQL 데이터베이스에서 psql을 시작합니다.

PostgreSQL 버전 10 이상의 경우 실행합니다.

create user datadog with password '<PASSWORD>';
grant pg_monitor to datadog;
grant SELECT ON pg_stat_database to datadog;

이전 PostgreSQL 버전의 경우 다음을 실행합니다.

create user datadog with password '<PASSWORD>';
grant SELECT ON pg_stat_database to datadog;

권한이 올바른지 확인하려면 다음 명령을 실행합니다.

psql -h localhost -U datadog postgres -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"

비밀번호를 입력하라는 메시지가 표시되면 첫 번째 명령에 사용한 비밀번호를 입력합니다.

참고: PostgreSQL 버전 9.6 이하의 경우 다음을 실행하고 SECURITY DEFINER를 생성하여 pg_stat_activity에서 읽습니다.

CREATE FUNCTION pg_stat_activity() RETURNS SETOF pg_catalog.pg_stat_activity AS
$$ SELECT * from pg_catalog.pg_stat_activity; $$
LANGUAGE sql VOLATILE SECURITY DEFINER;

CREATE VIEW pg_stat_activity_dd AS SELECT * FROM pg_stat_activity();
grant SELECT ON pg_stat_activity_dd to datadog;

참고: 추가 테이블을 쿼리해야 하는 커스텀 메트릭을 생성하는 경우 해당 테이블에 대한 SELECT 권한을 datadog 사용자에게 부여해야 할 수 있습니다. 예: grant SELECT on <TABLE_NAME> to datadog;. 자세한 내용은 FAQ 섹션을 참조하세요.

호스트

호스트에서 실행 중인 에이전트에 이 점검을 구성하는 방법:

메트릭 수집
  1. postgres.d/conf.yaml 파일을 편집하여 host/port를 가리키도록 하고 마스터를 모니터로 설정합니다. 사용 가능한 모든 설정 옵션은 샘플 postgres.d/conf.yaml을 참조하세요.

    init_config:
    
    instances:
      ## @param host - string - required
      ## The hostname to connect to.
      ## NOTE: Even if the server name is "localhost", the agent connects to
      ## PostgreSQL using TCP/IP, unless you also provide a value for the sock key.
      #
      - host: localhost
    
        ## @param port - integer - optional - default: 5432
        ## The port to use when connecting to PostgreSQL.
        #
        # port: 5432
    
        ## @param username - string - required
        ## The Datadog username created to connect to PostgreSQL.
        #
        username: datadog
    
        ## @param password - string - optional
        ## The password associated with the Datadog user.
        #
        # password: <PASSWORD>
    
        ## @param dbname - string - optional - default: postgres
        ## The name of the PostgresSQL database to monitor.
        ## Note: If omitted, the default system Postgres database is queried.
        #
        # dbname: <DBNAME>
    
        # @param disable_generic_tags - boolean - optional - default: false
        # The integration will stop sending server tag as is redundant with host tag
        disable_generic_tags: true
    
  2. 관계 메트릭을 수집하려면, 에이전트를 모든 논리적 데이터베이스에 연결합니다. 이러한 데이터베이스는 자동으로 검색되거나 설정에서 각 데이터베이스를 명시적으로 나열할 수 있습니다.

    • 특정 인스턴스에서 논리 데이터베이스를 자동으로 검색하려면 해당 인스턴스에서 자동탐지를 활성화하세요.
    instances:
      - host: localhost
        # port: 5432
        database_autodiscovery:
          enabled: true
          # Optionally, set the include field to specify
          # a set of databases you are interested in discovering
          include:
            - mydb.*
            - example.*
        relations:
          - relation_regex: .*
    
    • 또는 설정에서 각 논리적 데이터베이스를 인스턴스로 목록화할 수 있습니다.
    instances:
      - host: example-service-primary.example-host.com
        # port: 5432
        username: datadog
        password: '<PASSWORD>'
        relations:
          - relation_name: products
          - relation_name: external_seller_products
      - host: example-service-replica-1.example-host.com
        # port: 5432
        username: datadog
        password: '<PASSWORD>'
        relations:
          - relation_regex: inventory_.*
            relkind:
              - r
              - i
      - host: example-service-replica-2.example-host.com
        # port: 5432
        username: datadog
        password: '<PASSWORD>'
        relations:
          - relation_regex: .*
    
  3. 에이전트를 다시 시작합니다.

트레이스 수집

Datadog 애플리케이션 성능 모니터링(APM)은 분산 시스템에서 트레이스를 볼 수 있도록 Postgres와 통합됩니다. 트레이스 수집은 Datadog 에이전트 v6+에서 기본적으로 활성화됩니다. 트레이스 수집을 시작하려면 다음을 수행합니다.

  1. Datadog에서 트레이스 수집을 활성화합니다.
  2. Postgres에 요청하는 애플리케이션 계측.
로그 수집

에이전트 버전 > 6.0에서 사용 가능

PostgreSQL 기본 로깅은 stderr입니다. 로그에는 자세한 정보가 포함되어 있지 않습니다. 로그 줄 접두어에 지정된 추가 세부 정보를 사용해 파일에 로그인하는 것이 좋습니다. 자세한 내용은 오류 보고 및 로깅에 대한 PostgreSQL 설명서를 참조하세요.

  1. /etc/postgresql/<VERSION>/main/postgresql.conf 파일에서 로깅을 설정합니다. 문 출력과 같은 정기적인 로그 결과를 보려면 로그 섹션에서 다음 파라미터의 주석 처리를 제거합니다.

      logging_collector = on
      log_directory = 'pg_log'  # directory where log files are written,
                                # can be absolute or relative to PGDATA
      log_filename = 'pg.log'   # log file name, can include pattern
      log_statement = 'all'     # log all queries
      #log_duration = on
      log_line_prefix= '%m [%p] %d %a %u %h %c '
      log_file_mode = 0644
      ## For Windows
      #log_destination = 'eventlog'
    
  2. 자세한 기간 메트릭을 수집하여 Datadog 인터페이스에서 검색할 수 있도록 하려면 문 자체를 사용해 인라인으로 설정해야 합니다. 위와 권장 설정의 차이점은 아래를 참조하세요. 참고: log_statementlog_duration 옵션은 모두 주석 처리되어 있습니다. 이 주제에 대한 자세한 내용은 같은 줄에 문/기간 로깅하기를 참조하세요.

    이 설정은 모든 문을 기록합니다. 기간에 따라 출력을 줄이려면 log_min_duration_statement 값을 원하는 최소 기간(밀리초)으로 설정합니다.

      log_min_duration_statement = 0    # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
                                        # statements running at least this number
                                        # of milliseconds
      #log_statement = 'all'
      #log_duration = on
    
  3. 로그 수집은 Datadog 에이전트에서 기본적으로 비활성화되어 있습니다. datadog.yaml 파일에서 활성화합니다.

    logs_enabled: true
    
  4. 이 설정 블록을 postgres.d/conf.yaml 파일에 추가하고 편집하여 PostgreSQL 로그 수집을 시작하세요.

    logs:
      - type: file
        path: "<LOG_FILE_PATH>"
        source: postgresql
        service: "<SERVICE_NAME>"
        #To handle multi line that starts with yyyy-mm-dd use the following pattern
        #log_processing_rules:
        #  - type: multi_line
        #    pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
        #    name: new_log_start_with_date
    

    servicepath 파라미터 값을 변경하여 환경을 설정합니다. 사용 가능한 모든 설정 옵션은 샘플 postgres.d/conf.yaml을 참조하세요.

  5. 에이전트를 다시 시작합니다.

도커(Docker)

컨테이너에서 실행 중인 에이전트에 이 점검을 구성하는 방법:

메트릭 수집

애플리케이션 컨테이너에 자동탐지 통합 템플릿을 Docker 레이블로 설정하세요.

LABEL "com.datadoghq.ad.check_names"='["postgres"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"host":"%%host%%", "port":5432,"username":"datadog","password":"<PASSWORD>"}]'
로그 수집

기본적으로 로그 수집은 Datadog 에이전트에서 비활성화되어 있습니다. 활성화하려면 Docker 로그 수집을 참고하세요.

그런 다음 Docker 레이블로 로그 통합을 설정하세요.

LABEL "com.datadoghq.ad.logs"='[{"source":"postgresql","service":"postgresql"}]'
트레이스 수집

컨테이너화된 앱용 APM은 Agent v6+에서 지원되지만 트레이스 수집을 시작하려면 추가 구성이 필요합니다.

Agent 컨테이너의 필수 환경 변수:

파라미터
<DD_API_KEY>api_key
<DD_APM_ENABLED>true
<DD_APM_NON_LOCAL_TRAFFIC>true

사용 가능한 환경 변수 및 구성의 전체 목록은 Docker 애플리케이션 추적을 참조하세요.

그런 다음 [Postgres에 요청하는 애플리케이션 컨테이너]를 계측하고3 DD_AGENT_HOST를 에이전트 컨테이너의 이름으로 설정합니다.

Kubernetes

쿠버네티스에서 실행 중인 에이전트에 이 점검을 구성하는 방법:

메트릭 수집

자동탐지 통합 템플릿을 애플리케이션 컨테이너의 포드 주석으로 설정합니다. 이외 템플릿은 또한 파일, configmap, key-value store로 설정할 수 있습니다.

주석 v1(Datadog 에이전트 v7.36 이하용)

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  annotations:
    ad.datadoghq.com/postgresql.check_names: '["postgres"]'
    ad.datadoghq.com/postgresql.init_configs: '[{}]'
    ad.datadoghq.com/postgresql.instances: |
      [
        {
          "host": "%%host%%",
          "port":"5432",
          "username":"datadog",
          "password":"<PASSWORD>"
        }
      ]      
spec:
  containers:
    - name: postgres

주석 v2(Datadog 에이전트 v7.36 이상용)

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  annotations:
    ad.datadoghq.com/postgres.checks: |
      {
        "postgres": {
          "init_config": {},
          "instances": [
            {
              "host": "%%host%%",
              "port":"5432",
              "username":"datadog",
              "password":"<PASSWORD>"
            }
          ]
        }
      }      
spec:
  containers:
    - name: postgres
로그 수집

Datadog 에이전트에서 기본적으로 로그 수집이 비활성화되어 있습니다. 활성화하려면 [쿠버네티스 로그 수집]을 확인하세요.

그런 다음 로그 통합을 포드 주석으로 설정합니다. 또한 파일, configmap, 또는 key-value store로 설정할 수 있습니다.

주석 v1/v2

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  annotations:
    ad.datadoghq.com/postgres.logs: '[{"source":"postgresql","service":"<SERVICE_NAME>"}]'
spec:
  containers:
    - name: postgres
트레이스 수집

컨테이너화된 앱용 APM은 Agent v6+를 실행하는 호스트에서 지원되지만 트레이스 수집을 시작하려면 추가 구성이 필요합니다.

Agent 컨테이너의 필수 환경 변수:

파라미터
<DD_API_KEY>api_key
<DD_APM_ENABLED>true
<DD_APM_NON_LOCAL_TRAFFIC>true

사용 가능한 환경 변수 및 구성의 전체 목록은 Kubernetes 애플리케이션 추적Kubernetes DaemonSet 설정을 참조하세요.

그런 다음 Postgres에 요청하는 애플리케이션 컨테이너를 계측합니다.

ECS

ECS에서 실행 중인 에이전트에 이 점검을 구성하는 방법:

메트릭 수집

애플리케이션 컨테이너에 자동탐지 통합 템플릿을 Docker 레이블로 설정하세요.

{
  "containerDefinitions": [{
    "name": "postgres",
    "image": "postgres:latest",
    "dockerLabels": {
      "com.datadoghq.ad.check_names": "[\"postgres\"]",
      "com.datadoghq.ad.init_configs": "[{}]",
      "com.datadoghq.ad.instances": "[{\"host\":\"%%host%%\", \"port\":5432,\"username\":\"datadog\",\"password\":\"<PASSWORD>\"}]"
    }
  }]
}
로그 수집

기본적으로 로그 수집은 Datadog 에이전트에서 비활성화되어 있습니다. 활성화하려면 ECS 로그 수집을 참조하세요.

그런 다음 Docker 레이블로 로그 통합을 설정하세요.

{
  "containerDefinitions": [{
    "name": "postgres",
    "image": "postgres:latest",
    "dockerLabels": {
      "com.datadoghq.ad.logs": "[{\"source\":\"postgresql\",\"service\":\"postgresql\"}]"
    }
  }]
}
트레이스 수집

컨테이너화된 앱용 APM은 Agent v6+에서 지원되지만 트레이스 수집을 시작하려면 추가 구성이 필요합니다.

Agent 컨테이너의 필수 환경 변수:

파라미터
<DD_API_KEY>api_key
<DD_APM_ENABLED>true
<DD_APM_NON_LOCAL_TRAFFIC>true

사용 가능한 환경 변수 및 구성의 전체 목록은 Docker 애플리케이션 추적을 참조하세요.

그런 다음 Postgres에 요청하는 애플리케이션 컨테이너 을 계측하고 [DD_AGENT_HOST]를 EC2 비공개 IP 주소로 설정합니다.

검증

에이전트의 상태 하위 명령을 실행하고 점검 섹션에서 postgres를 찾습니다.

수집한 데이터

아래 나열된 메트릭 중 일부는 추가 설정이 필요합니다. 설정 가능한 모든 옵션은 샘플 postgres.d/conf.yaml을 참조하세요.

메트릭

에이전트 버전 7.32.0 이상의 경우, 데이터베이스 모니터링를 활성화한 경우 postgresql.connections 메트릭에 state, app, dbuser 태그가 지정됩니다.

이벤트

PostgreSQL 점검에는 이벤트가 포함되어 있지 않습니다.

서비스 점검

트러블슈팅

도움이 필요하신가요? Datadog 지원팀에 문의하세요.

참고 자료

기타 유용한 문서, 링크 및 기사:

FAQ

블로그 게시물

PREVIEWING: may/embedded-workflows