Supported OS Linux Windows Mac OS

Versión de la integración22.0.1

Gráfico de PostgreSQL

Información general

La integración Postgres proporciona métricas del estado y el rendimiento de tu base de datos Postgres casi en tiempo real. Visualiza estos métricas con el dashboard proporcionado y crea monitores para alertar a tu equipo sobre los estados de PostgreSQL.

Habilita Database Monitoring (DBM) para obtener información mejorada sobre el rendimiento de las consultas y el estado de las bases de datos. Además de la integración estándar, Datadog DBM proporciona métricas a nivel de consulta, snapshots de consultas históricas y actuales, análisis de eventos de espera, carga de bases de datos, planes de explicación de consultas e información sobre bloqueos de consultas.

Se admiten las versiones 9.6-16 de Postgres.

Configuración

En esta página se describe la integración estándar del Agent con Postgres. Si buscas el producto Database Monitoring para Postgres, consulta Datadog Database Monitoring.

Instalación

El check de PostgreSQL viene en el mismo paquete que el Agent. Para empezar a reunir tus métricas y logs de PostgreSQL, instala el Agent.

Configuración

Nota: Para instalar Database Monitoring para PostgreSQL, selecciona tu solución de alojamiento en la documentación de Database Monitoring para obtener instrucciones.

Procede con los siguientes pasos de esta guía, sólo si vas a instalar la integración estándar únicamente.

Preparación de Postgres

Para empezar con la integración PostgreSQL estándar, crea un usuario datadog de sólo lectura con el acceso adecuado a tu servidor PostgreSQL. Inicia psql en tu base de datos PostgreSQL.

Para la versión 10 y superiores de PostgreSQL, ejecuta:

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

Para versiones anteriores de PostgreSQL, ejecuta:

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

Para verificar si los permisos son correctos, ejecuta el siguiente comando:

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"

Cuando se te pida una contraseña, introduce la que utilizaste en el primer comando.

Nota: Para las versiones 9.6 e inferiores de PostgreSQL, ejecuta lo siguiente y crea un SECURITY DEFINER para leer desde 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;

Nota: Al generar métricas personalizadas que requieren que se consulten tablas adicionales, puede que sea necesario conceder el permiso SELECT al usuario datadog para acceder a esas tablas. Ejemplo: grant SELECT on <TABLE_NAME> to datadog;. Para obtener más información, consulta la sección FAQ.

Host

Para configurar este check para un Agent que se ejecuta en un host:

Recopilación de métricas
  1. Edita el archivo postgres.d/conf.yaml para que apunte a tu host / port y define los maestros que se van a monitorizar. Para ver todas las opciones de configuración disponibles, consulta el postgres.d/conf.yaml de ejemplo.

    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. Para recopilar métricas de relación, conecta el Agent a cada base de datos lógica. Estas bases de datos se pueden detectar automáticamente o cada una de ellas puede estar explícitamente listada en la configuración.

    • Para detectar bases de datos lógicas automáticamente en una instancia determinada, habilita la detección automática en esa instancia:
    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: .*
    
    • También puedes listar cada base de datos lógica como una instancia en la configuración:
    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. Reinicia el Agent.

Recopilación de trazas (traces)

Datadog APM se integra con Postgres para visualizar trazas a través de tu sistema distribuido. La recopilación de trazas está habilitada por defecto en el Datadog Agent v6 o posteriores. Para empezar a recopilar trazas:

  1. Habilita la recopilación de trazas en Datadog.
  2. Instrumenta la aplicación que realiza solicitudes a Postgres.
Recopilación de logs

Disponible para la versión 6.0 o posteriores del Agent

La generación de logs por defecto de PostgreSQL es para stderr y los logs no incluyen información detallada. Se recomienda generar logs en un archivo con detalles adicionales especificados en el prefijo de línea de los logs. Para obtener más información, consulta la documentación de PostgreSQL sobre informes de error y generación de logs.

  1. La generación de logs se configura en el archivo /etc/postgresql/<VERSION>/main/postgresql.conf. Para obtener resultados regulares en logs, incluidos los resultados de sentencias, descomenta los siguientes parámetros en la sección de logs:

      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. Para recopilar métricas de duración detallada y permitir su búsqueda en la interfaz de Datadog, deben configurarse en línea con la propia sentencia. Consulta a continuación las diferencias de configuración recomendadas con respecto a las anteriores. Nota: Las opciones log_statement y log_duration están comentadas. Para ver una discusión sobre este tema, consulta Sentencia/duración de la generación de logs en la misma línea.

    Esta configuración registra todas las sentencias. Para reducir los resultados en función de la duración, ajusta el valor log_min_duration_statement a la duración mínima deseada (en milisegundos):

      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. La recopilación de logs se encuentra deshabilitada de manera predeterminada en el Datadog Agent. Habilítala en tu archivo datadog.yaml:

    logs_enabled: true
    
  4. Añade y edita este bloque de configuración a tu archivo postgres.d/conf.yaml para empezar a recopilar tus logs de 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
    

    Cambia los valores de los parámetros service y path a fin de configurarlos para tu entorno. Para ver todas las opciones de configuración disponibles, consulta el postgres.d/conf.yaml de ejemplo.

  5. Reinicia el Agent.

Docker

Para configurar este check para un Agent que se ejecuta en un contenedor:

Recopilación de métricas

Configura plantillas de integraciones Autodiscovery como etiquetas (labels) Docker en el contenedor de tu aplicación:

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>"}]'
Recopilación de logs

La recopilación de logs se encuentra deshabilitada de manera predeterminada en el Datadog Agent. Para habilitarla, consulta la recopilación de logs de Docker.

Luego, configura integraciones de logs como etiquetas Docker:

LABEL "com.datadoghq.ad.logs"='[{"source":"postgresql","service":"postgresql"}]'
Recopilación de trazas

APM para aplicaciones en contenedores es compatible con la versión 6 o posteriores del Agent, pero requiere una configuración adicional a fin de empezar a recopilar trazas.

Variables de entorno necesarias en el contenedor del Agent:

ParámetroValor
<DD_API_KEY>api_key
<DD_APM_ENABLED>verdadero
<DD_APM_NON_LOCAL_TRAFFIC>verdadero

Para ver una lista completa de las variables de entorno y la configuración disponibles, consulta Rastreo de aplicaciones Docker.

Luego, instrumenta el contenedor de tu aplicación que realiza solicitudes a Postgres y configura DD_AGENT_HOST con el nombre del contenedor de tu Agent.

Kubernetes

Para configurar este check para un Agent que se ejecuta en Kubernetes:

Recopilación de métricas

Configura plantillas de integraciones de Autodiscovery como anotaciones de pod en el contenedor de tu aplicación. Además de esto, las plantillas también se pueden configurar con un archivo, un mapa de configuración o un almacén de clave-valor.

Anotaciones v1 (para la versión 7.36 o anterior del Datadog Agent)

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

Anotaciones v2 (para la versión 7.36 o posterior del Datadog Agent)

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
Recopilación de logs

La recopilación de logs se encuentra deshabilitada de manera predeterminada en el Datadog Agent. Para habilitarla, consulta la recopilación de logs de Kubernetes.

Luego, configura las integraciones de logs como anotaciones de pod. Esto también se puede configurar con un archivo, un mapa de configuración o un almacén de clave-valor.

Anotaciones v1/v2

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  annotations:
    ad.datadoghq.com/postgres.logs: '[{"source":"postgresql","service":"<SERVICE_NAME>"}]'
spec:
  containers:
    - name: postgres
Recopilación de trazas

APM para aplicaciones en contenedores es compatible con hosts que se ejecutan en la versión 6 o posteriores del Agent, pero requiere una configuración adicional a fin de empezar a recopilar trazas.

Variables de entorno necesarias en el contenedor del Agent:

ParámetroValor
<DD_API_KEY>api_key
<DD_APM_ENABLED>verdadero
<DD_APM_NON_LOCAL_TRAFFIC>verdadero

Para ver una lista completa de las variables de entorno y la configuración disponibles, consulta Rastreo de aplicaciones Kubernetes y la configuración del DaemonSet de Kubernetes.

A continuación, instrumenta el contenedor de tu aplicación que realiza solicitudes a Postgres.

ECS

Para configurar este check para un Agent que se ejecuta en ECS:

Recopilación de métricas

Configura plantillas de integraciones Autodiscovery como etiquetas Docker en el contenedor de tu aplicación:

{
  "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>\"}]"
    }
  }]
}
Recopilación de logs

La recopilación de logs se encuentra deshabilitada de manera predeterminada en el Datadog Agent. Para habilitarla, consulta la recopilación de logs de ECS.

Luego, configura integraciones de logs como etiquetas Docker:

{
  "containerDefinitions": [{
    "name": "postgres",
    "image": "postgres:latest",
    "dockerLabels": {
      "com.datadoghq.ad.logs": "[{\"source\":\"postgresql\",\"service\":\"postgresql\"}]"
    }
  }]
}
Recopilación de trazas

APM para aplicaciones en contenedores es compatible con la versión 6 o posteriores del Agent, pero requiere una configuración adicional a fin de empezar a recopilar trazas.

Variables de entorno necesarias en el contenedor del Agent:

ParámetroValor
<DD_API_KEY>api_key
<DD_APM_ENABLED>verdadero
<DD_APM_NON_LOCAL_TRAFFIC>verdadero

Para ver una lista completa de las variables de entorno y la configuración disponibles, consulta Rastreo de aplicaciones Docker.

Luego, instrumenta el contenedor de tu aplicación que realiza solicitudes a Postgres y configura DD_AGENT_HOST en la dirección IP privada de EC2.

Validación

Ejecuta el subcomando de estado del Agent y busca postgres en la sección Checks.

Datos recopilados

Algunas de las métricas enumeradas a continuación requieren una configuración adicional. Para ver todas las opciones configurables, consulta el postgres.d/conf.yaml de ejemplo.

Métricas

Para la versión 7.32.0 y posteriores del Agent, si tienes Database Database Monitoring habilitado, la métrica postgresql.connections se etiqueta (tag) con state, app, db y user.

Eventos

El check de PostgreSQL no incluye eventos.

Checks de servicio

Solucionar problemas

¿Necesitas ayuda? Ponte en contacto con el servicio de asistencia de Datadog.

Referencias adicionales

Más enlaces, artículos y documentación útiles:

FAQ

Entradas de blog

PREVIEWING: guacbot/translation-pipeline