Configurando DBM para Postgres administrado por Amazon RDS

DBM proporciona una visibilidad profunda de sus bases de datos Postgres al exponer métricas de consultas, muestras de consultas, planes de explicación, estados de bases de datos, conmutaciones por error y eventos.

El Agente recopila telemetría directamente de la base de datos iniciando sesión como un usuario de solo lectura. Realice la siguiente configuración para habilitar DBM en su base de datos Postgres:

  1. Configure la integración de AWS
  2. Configure los parámetros de la base de datos
  3. Otorgue al Agente acceso a la base de datos
  4. Instale y configure el Agente
  5. Instale la integración de RDS
Instalación Rápida de RDS es nuestro método de instalación recomendado para entornos más pequeños (por ejemplo, 20 hosts de base de datos) o aquellos nuevos en DBM que desean probarlo rápidamente. Para aquellos que gestionan grandes flotas de bases de datos donde implementar el agente a través de la interfaz de usuario no escala tan bien, recomendamos la instalación estándar, para gestionar el agente manualmente o integrarlo con sus prácticas de automatización.

Antes de comenzar

Versiones de PostgreSQL soportadas
9.6, 10, 11, 12, 13, 14, 15, 16, 17
Versiones de Agente soportadas
7.36.1+

Impacto en el rendimiento La configuración predeterminada del Agente para DBM es conservadora, pero puede ajustar configuraciones como el intervalo de recolección y la tasa de muestreo de consultas para adaptarlas mejor a sus necesidades. Para la mayoría de las cargas de trabajo, el Agente representa menos del uno por ciento del tiempo de ejecución de consultas en la base de datos y menos del uno por ciento de la CPU.

DBM se ejecuta como una integración sobre el Agente base (ver benchmarks).

Proxies, balanceadores de carga y agrupadores de conexiones
El Agente de Datadog debe conectarse directamente al host que se está monitoreando. Para bases de datos autoalojadas, utiliza 127.0.0.1 o el socket. El Agente no debe conectarse a la base de datos a través de un proxy, balanceador de carga o agrupador de conexiones como pgbouncer. Si el Agente se conecta a diferentes hosts mientras está en funcionamiento (como en el caso de conmutación por error, balanceo de carga, etc.), el Agente calcula la diferencia en estadísticas entre dos hosts, produciendo métricas inexactas.
Consideraciones sobre la seguridad de los datos
Consulta Información sensible para obtener información sobre qué datos recopila el Agente de sus bases de datos y cómo asegurarse de que estén seguros.

Configure la integración de AWS

Habilite Resource Collection en la sección Resource Collection de su panel de integración de Amazon Web Services.

Configure los ajustes de Postgres

Configure los siguientes parámetros en el grupo de parámetros de DB y luego reinicie el servidor para que los ajustes surtan efecto. Para más información sobre estos parámetros, consulte la documentación de Postgres.

Parámetros requeridos

ParámetroValorDescripción
shared_preload_librariespg_stat_statementsRequerido para métricas de postgresql.queries.*. Habilita la recolección de métricas de consulta utilizando la extensión pg_stat_statements.
track_activity_query_size4096Requerido para la recolección de consultas más grandes. Aumenta el tamaño del texto SQL en pg_stat_activity. Si se deja en el valor predeterminado, las consultas de más de 1024 caracteres no serán registradas.

Parámetros opcionales

ParámetroValorDescripción
pg_stat_statements.trackALLHabilita el seguimiento de declaraciones dentro de procedimientos almacenados y funciones.
pg_stat_statements.max10000Aumenta el número de consultas normalizadas rastreadas en pg_stat_statements. Recomendado para bases de datos de alto volumen que reciben muchos tipos diferentes de consultas de muchos clientes diferentes.
pg_stat_statements.track_utilityoffDesactiva comandos de utilidad como PREPARE y EXPLAIN. Establecer este valor en off significa que solo se rastrean consultas como SELECT, UPDATE y DELETE.
track_io_timingonHabilita la recopilación de tiempos de lectura y escritura de bloques para consultas.

Habilite auto_explain (opcional)

Por defecto, el agente solo recopila EXPLAIN planes para una muestra de consultas en vuelo. Estos planes son de naturaleza más general, especialmente cuando el código de la aplicación utiliza declaraciones preparadas.

Para recopilar planes completos de EXPLAIN ANALYZE tomados de todas las consultas, necesitas usar auto_explain, una extensión propia incluida con PostgreSQL disponible en todos los proveedores principales. La recopilación de registros es un requisito previo para la recopilación de auto_explain, por lo que debe habilitarla antes de continuar.

Importante: auto_explain produce líneas de registros que pueden contener datos sensibles de la aplicación, similares a valores en bruto en SQL no ofuscado. Utilice el dbm_parameterized_queries_readUtilice el permiso para controlar el acceso a los planes resultantes. Para restringir la visibilidad de las líneas de registro, que son visibles para todos los usuarios en su organización de Datadog por defecto, configure también RBAC para Registros. Datadog recomienda utilizar ambos permisos para proteger la información sensible de manera efectiva.
  1. Configure los ajustes auto_explain. El formato de registro _ debe _ ser json, pero otros ajustes pueden variar según su aplicación. Este ejemplo registra un EXPLAIN ANALYZE plan para todas las consultas que superan un segundo, incluyendo información de búfer pero omitiendo el tiempo (que puede generar sobrecarga).
ParámetroValorDescripción
shared_preload_librariespg_stat_statements,auto_explainHabilita EXPLAIN ANALYZE
auto_explain.log_formatjsonGenera planes legibles por máquina
auto_explain.log_min_duration1000Registra planes cuando las consultas superan un segundo
auto_explain.log_analyzeonUtilice la forma ANALYZE de EXPLAIN
auto_explain.log_buffersonIncluya el uso de búfer en los planes
auto_explain.log_timingoffNo incluya la medición del tiempo (alto costo)
auto_explain.log_triggersonIncluya planes para la declaración de activación
auto_explain.log_verboseonUtilice el tipo de plan detallado
auto_explain.log_nested_statementsonIncluya declaraciones anidadas
auto_explain.sample_rate1Explique todas las consultas que superen una duración determinada
  1. Cambie el log_line_prefix para habilitar una correlación de eventos más completa. Para más información, consulte la documentación de grupos de parámetros de RDS DB. auto_explain La ingestión requiere que esto se establezca en %m:%r:%u@%d:[%p]:%l:%e:%s:%v:%x:%c:%q%a.

  2. Para asegurar que sus instancias de RDS estén enviando registros a CloudWatch y Datadog, siga las instrucciones para Colección de Registros de Amazon RDS.

Otorgue acceso al Agente

El Agente de Datadog requiere acceso de solo lectura al servidor de base de datos para recopilar estadísticas y consultas.

Ejecuta los siguientes comandos SQL en el servidor de base de datos primario (el escritor) en el clúster si Postgres está replicado. El Agente puede recopilar telemetría de todas las bases de datos en el servidor, independientemente de a qué base de datos se conecte. Utiliza la base de datos postgres predeterminada a menos que necesites que el Agente ejecute consultas personalizadas contra datos únicos de otra base de datos.

Conéctese a la base de datos seleccionada como superusuario (o como otro usuario con permisos suficientes). Por ejemplo, para conectarse a la base de datos postgres utilizando psql:

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

Cree el datadog usuario:

CREATE USER datadog WITH password '<PASSWORD>';

Nota: La autenticación IAM también es compatible. Consulte la guía sobre cómo configurar esto para su instancia de RDS.

Otorga al datadog usuario permiso para las tablas relevantes:

ALTER ROLE datadog INHERIT;

Crea el siguiente esquema en cada base de datos:

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 schema public;

Crea el siguiente esquema en cada base de datos:

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 schema public;

Crea el siguiente esquema en cada base de datos:

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;

Crea funciones en cada base de datos para permitir que el Agente lea el contenido completo de pg_stat_activity y 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;
Para la recolección de datos o métricas personalizadas que requieran consultar tablas adicionales, es posible que deba otorgar el acceso correspondiente. SELECT permiso en esas tablas al datadog usuario. Ejemplo: grant SELECT on <TABLE_NAME> to datadog;. Consulta la recolección de métricas personalizadas de PostgreSQL para más información.

Crea la función de explain plan

Crea la siguiente función en cada base de datos para permitir que el Agente recoja explain plans:

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;

Almacena tu contraseña de forma segura

Store your password using secret management software such as Vault. You can then reference this password as ENC[<SECRET_NAME>] in your Agent configuration files: for example, ENC[datadog_user_database_password]. See Secrets Management for more information.

The examples on this page use datadog_user_database_password to refer to the name of the secret where your password is stored. It is possible to reference your password in plain text, but this is not recommended.

Verifica los permisos de la base de datos

Para verificar que los permisos son correctos, ejecuta los siguientes comandos para confirmar que el usuario del Agente puede conectarse a la base de datos y leer las tablas principales:

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"
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"

Cuando se te pida una contraseña, utiliza la contraseña que ingresaste al crear el datadog usuario.

Instala y configura el Agente

Para monitorear los hosts de RDS, instala el Agente de Datadog en tu infraestructura y configúralo para conectarse a cada punto de conexión de instancia de forma remota. El Agente no necesita ejecutarse en la base de datos, solo necesita conectarse a ella. Para métodos adicionales de instalación del Agente no mencionados aquí, consulta las instrucciones de instalación del Agente.

Para configurar la recolección de métricas de Monitoreo de Base de Datos para un Agente que se ejecuta en un host, por ejemplo, cuando provisionas una pequeña instancia de EC2 para que el Agente recolecte de una base de datos RDS:

  1. Edita el archivo postgres.d/conf.yaml para apuntar a tu host / port y establece los maestros a monitorear. Consulta el archivo de ejemplo postgres.d/conf.yaml para ver todas las opciones de configuración disponibles.

    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>"
    
        ## Required for Postgres 9.6: Uncomment these lines to use the functions created in the setup
        # pg_stat_statements_view: datadog.pg_stat_statements()
        # pg_stat_activity_view: datadog.pg_stat_activity()
    
        ## Optional: Connect to a different database if needed for `custom_queries`
        # dbname: '<DB_NAME>'
    

    Para versiones del Agente ≤ 7.49, agrega la siguiente opción a la configuración de la instancia donde se especifican host y port:

    ssl: allow
    

    Si deseas autenticarte con IAM, especifica los parámetros region y instance_endpoint, y establece managed_authentication.enabled en true.

    Nota: solo habilita managed_authentication si deseas usar la autenticación IAM. La autenticación IAM tiene prioridad sobre el campo password.

    init_config:
    instances:
      - dbm: true
        host: '<AWS_INSTANCE_ENDPOINT>'
        port: 5432
        username: datadog
        aws:
          instance_endpoint: '<AWS_INSTANCE_ENDPOINT>'
          region: '<REGION>'
          managed_authentication:
            enabled: true
        tags:
          - "dbinstanceidentifier:<DB_INSTANCE_NAME>"
    
        ## Required for Postgres 9.6: Uncomment these lines to use the functions created in the setup
        # pg_stat_statements_view: datadog.pg_stat_statements()
        # pg_stat_activity_view: datadog.pg_stat_activity()
    
        ## Optional: Connect to a different database if needed for `custom_queries`
        # dbname: '<DB_NAME>'
    

    Para información sobre cómo configurar la autenticación IAM en tu instancia de RDS, consulta Conexión con Autenticación Administrada.

  2. Reiniciar el Agente.

Para configurar una integración para un Agente que se ejecuta en un contenedor Docker, como en ECS o Fargate, tienes un par de métodos disponibles, todos los cuales se cubren en detalle en la Documentación de Configuración de Docker.

Los ejemplos a continuación muestran cómo usar Etiquetas de Docker y Plantillas de Autodiscovery para configurar la integración de Postgres.

Nota: El Agente debe tener permiso de lectura en el socket de Docker para que el Autodiscovery de etiquetas funcione.

Línea de comandos

Ejecute el siguiente comando desde su línea de comandos para iniciar el Agente. Reemplace los valores de marcador de posición con los de su cuenta y entorno.

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}

Para Postgres 9.6, agregue la siguiente configuración a la instancia donde se especifican el servidor y el puerto:

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

Dockerfile

También puede especificar etiquetas en un Dockerfile, lo que le permite construir y desplegar un Agente personalizado sin modificar la configuración de su infraestructura.

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>"]}]'

Para Postgres 9.6, agregue la siguiente configuración a la instancia donde se especifican el servidor y el puerto:

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

Para evitar exponer la contraseña del usuario datadog en texto plano, use el paquete de gestión de secretos del Agent y declare la contraseña utilizando la sintaxis ENC[]. Alternativamente, consulte la documentación de variables de plantilla de Autodiscovery para proporcionar la contraseña como una variable de entorno.

Si está ejecutando un clúster de Kubernetes, use el Datadog Cluster Agent para habilitar Database Monitoring.

Nota: Asegúrese de que verificaciones de clúster estén habilitadas para su Datadog Cluster Agent antes de continuar.

A continuación se presentan instrucciones paso a paso para configurar la integración de Postgres utilizando diferentes métodos de implementación del Datadog Cluster Agent.

Operador

Usando las instrucciones del Operador en Kubernetes e Integraciones como referencia, siga los pasos a continuación para configurar la integración de Postgres:

  1. Cree o actualice el archivo datadog-agent.yaml con la siguiente configuración:

    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>"
    

    Note: For Postgres 9.6, add the following lines to the instance config where host and port are specified:

    pg_stat_statements_view: datadog.pg_stat_statements()
    pg_stat_activity_view: datadog.pg_stat_activity()
    
  2. Aplique los cambios al Datadog Operator utilizando el siguiente comando:

    kubectl apply -f datadog-agent.yaml
    

Helm

Usando las instrucciones de Helm en Kubernetes e Integrations como referencia, siga los pasos a continuación para configurar la integración de Postgres:

  1. Actualice su archivo datadog-values.yaml (utilizado en las instrucciones de instalación del Agente del Clúster) con la siguiente configuración:

    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>"
    

    Note: For Postgres 9.6, add the following lines to the instance config where host and port are specified:

    pg_stat_statements_view: datadog.pg_stat_statements()
    pg_stat_activity_view: datadog.pg_stat_activity()
    
  2. Despliega el Agente con el archivo de configuración anterior usando el siguiente comando:

    helm install datadog-agent -f datadog-values.yaml datadog/datadog
    
Para Windows, añade --set targetSystem=windows al helm install comando.

Configura con archivos montados

Para configurar una verificación de clúster con un archivo de configuración montado, monta el archivo de configuración en el contenedor del Agente del Clúster en la ruta: /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>"

    ## Required: For Postgres 9.6, uncomment these lines to use the functions created in the setup
    # pg_stat_statements_view: datadog.pg_stat_statements()
    # pg_stat_activity_view: datadog.pg_stat_activity()

Configura con anotaciones de servicio de Kubernetes

En lugar de montar un archivo, puedes declarar la configuración de la instancia como un servicio de Kubernetes. Para configurar esta verificación para un Agente que se ejecuta en Kubernetes, crea un servicio usando la siguiente sintaxis:

Autodiscovery anotaciones 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

Para más información, consulta Autodiscovery Annotations.

Si estás usando Postgres 9.6, añade lo siguiente a la configuración de la instancia:

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

El Agente del Clúster registra automáticamente esta configuración y comienza a ejecutar la verificación de Postgres.

Para evitar exponer la contraseña del datadog usuario en texto plano, utiliza el paquete de gestión de secretos del Agente y declara la contraseña usando la sintaxis ENC[].

Verifica la configuración del Agente

Ejecuta el subcomando de estado del Agente y busca postgres en la sección de Verificaciones. O visita la página de Bases de Datos para comenzar!

Ejemplos de configuraciones del Agente

One agent connecting to multiple hosts

It is common to configure a single Agent host to connect to multiple remote database instances (see Agent installation architectures for DBM). To connect to multiple hosts, create an entry for each host in the Postgres integration config.

Datadog recommends using one Agent to monitor no more than 30 database instances.

Benchmarks show that one Agent running on a t4g.medium EC2 instance (2 CPUs and 4GB of RAM) can successfully monitor 30 RDS db.t3.medium instances (2 CPUs and 4GB of RAM).
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'
    [...]

Monitoring multiple databases on a database host

Use the database_autodiscovery option to permit the Agent to discover all databases on your host to monitor. You can specify include or exclude fields to narrow the scope of databases discovered. See the sample postgres.d/conf.yaml for more details.

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'

Running custom queries

To collect custom metrics, use the custom_queries option. See the sample postgres.d/conf.yaml for more details.

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'

Monitoring relation metrics for multiple databases

In order to collect relation metrics (such as postgresql.seq_scans, postgresql.dead_rows, postgresql.index_rows_read, and postgresql.table_size), the Agent must be configured to connect to each database (by default, the Agent only connects to the postgres database).

Specify a single “DBM” instance to collect DBM telemetry from all databases. Use the database_autodiscovery option to avoid specifying each database name.

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

Collecting schemas

To enable this feature, use the collect_schemas option. You must also configure the Agent to connect to each logical database.

Use the database_autodiscovery option to avoid specifying each logical database. See the sample postgres.d/conf.yaml for more details.

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: .*

Working with hosts through a proxy

If the Agent must connect through a proxy such as the Cloud SQL Auth proxy, all telemetry is tagged with the hostname of the proxy rather than the database instance. Use the reported_hostname option to set a custom override of the hostname detected by the 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

Instala la integración de RDS

Para ver métricas de infraestructura de AWS, como CPU, junto con la telemetría de la base de datos en DBM, instala la integración de RDS (opcional).

Solución de problemas

Si has instalado y configurado las integraciones y el Agente como se describe y no está funcionando como se esperaba, consulta Solución de problemas.

Lectura adicional