Postgres
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Postgres

Agent Check Check de l'Agent

Supported OS: Linux Mac OS Windows

Graphique PostgreSQL

Présentation

Recueillez des métriques de PostgreSQL en temps réel pour :

  • Visualiser et surveiller les états de PostgreSQL.
  • Recevoir des notifications concernant les failovers et événements PostgreSQL.

Configuration

Installation

Le check PostgreSQL est fourni avec l’Agent. Pour commencer à recueillir vos logs et métriques PostgreSQL, installez l’Agent.

Configuration

Préparer Postgres

Pour implémenter l’intégration PostgreSQL, créez un utilisateur datadog en lecture seule avec un accès approprié à votre serveur PostgreSQL. Lancez psql sur votre base de données PostgreSQL.

Pour PostgreSQL 10 et versions ultérieures, exécutez :

create user datadog with password '<MOTDEPASSE>';
grant pg_monitor to datadog;

Pour les versions plus anciennes de PostgreSQL, exécutez :

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

Remarque : si vous souhaitez générer des métriques custom qui nécessitent d’interroger des tables supplémentaires, vous devrez peut-être accorder l’autorisation CONNECT à l’utilisateur datadog pour les tables concernées.

Pour vérifier que les autorisations sont bien configurées, exécutez la commande suivante :

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"

Une fois invité à saisir un mot de passe, indiquez celui utilisé dans la première commande.

Remarque : pour PostgreSQL 9.6 et versions inférieures, exécutez la commande ci-dessous et créez une fonction SECURITY DEFINER pour obtenir un accès en lecture à 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;

Host

Suivez les instructions ci-dessous pour configurer ce check lorsque l’Agent est exécuté sur un host. Consultez la section Environnement conteneurisé pour en savoir plus sur les environnements conteneurisés.

Collecte de métriques
  1. Modifiez le fichier postgres.d/conf.yaml afin de spécifier votre host / port et de définir les masters à surveiller. Consultez le fichier d’exemple postgres.d/conf.yaml pour découvrir toutes les options de configuration disponibles.

    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.
     ## If `use_psycopg2` is enabled, use the directory containing
     ## the UNIX socket (ex: `/run/postgresql/`) otherwise, use the full path to
     ##  the socket file (ex: `/run/postgresql/.s.PGSQL.5433`).
     #
     - host: localhost
    
       ## @param port - integer - required
       ## Port to use when connecting to PostgreSQL.
       #
       port: 5432
    
       ## @param user - string - required
       ## Datadog Username created to connect to PostgreSQL.
       #
       username: datadog
    
       ## @param pass - string - required
       ## Password associated with the Datadog user.
       #
       password: "<PASSWORD>"
    
       ## @param dbname - string - optional - default: postgres
       ## Name of the PostgresSQL database to monitor. 
       ## Note: If omitted, the default system postgres database is queried.
       #
       dbname: "<DB_NAME>"
  2. Redémarrez l’Agent.

Collecte de traces

L’APM Datadog s’intègre à Postgres pour vous permettre de visualiser les traces sur l’ensemble de votre système distribué. La collecte de traces est activée par défaut dans les versions 6 et ultérieures de l’Agent Datadog. Pour commencer à recueillir des traces :

  1. Activez la collecte de trace dans Datadog.
  2. Instrumentez l’application qui envoie des requêtes à Postgres.
Collecte de logs

Disponible à partir des versions > 6.0 de l’Agent

Par défaut, les logs PostgreSQL sont envoyés vers stderr et n’incluent aucune information détaillée. Il est conseillé d’enregistrer les logs dans un fichier en ajoutant des détails supplémentaires spécifiés en tant que préfixe dans la ligne de log. Consultez la documentation PostgresSQL à ce sujet pour en savoir plus.

  1. La configuration du logging se fait depuis le fichier /etc/postgresql/<VERSION>/main/postgresql.conf. Pour recueillir des logs standard, y compris les sorties des déclarations, supprimez la mise en commentaire des paramètres suivants dans la section dédiée aux 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. Pour recueillir des métriques de durée détaillées et les rechercher depuis l’interface Datadog, vous devez les configurer directement au sein des déclarations. Comparez la configuration recommandée qui suit avec celle ci-dessus : vous noterez que dans les deux cas, les options log_statement et log_duration ont été mises en commentaire. Pour en savoir plus à ce sujet, consultez cette discussion.

    Cette configuration enregistre toutes les déclarations dans les logs, mais vous pouvez choisir d’enregistrer uniquement celles qui présentent une certaine durée en définissant la valeur log_min_duration_statement sur la durée minimum souhaitée (en millisecondes) :

     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 collecte de logs est désactivée par défaut dans l’Agent Datadog. Vous devez l’activer dans datadog.yaml :

    logs_enabled: true
  4. Ajoutez ce bloc de configuration à votre fichier postgres.d/conf.yaml et modifiez-le pour commencer à recueillir vos logs 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

    Modifiez les valeurs des paramètres path et service en fonction de votre environnement. Consultez le fichier d’exemple postgres.d/conf.yaml pour découvrir toutes les options de configuration disponibles.

  5. Redémarrez l’Agent.

Environnement conteneurisé

Consultez la documentation relative aux modèles d’intégration Autodiscovery pour découvrir comment appliquer les paramètres ci-dessous à un environnement conteneurisé.

Collecte de métriques
ParamètreValeur
<NOM_INTÉGRATION>postgres
<CONFIG_INIT>vide ou {}
<CONFIG_INSTANCE>{"host":"%%host%%", "port":5432,"username":"datadog","password":"<MOTDEPASSE>"}
Collecte de traces

L’APM pour applications conteneurisées est pris en charge sur les hosts exécutant les versions 6 et ultérieures de l’Agent, mais nécessite une configuration supplémentaire pour commencer à recueillir des traces.

Variables d’environnement requises sur le conteneur de l’Agent :

ParamètreValeur
<DD_API_KEY>api_key
<DD_APM_ENABLED>true
<DD_APM_NON_LOCAL_TRAFFIC>true

Consultez les sections Tracer des applications Docker et Configuration de DaemonSet Kubernetes pour voir la liste complète des variables d’environnement et configurations disponibles.

Ensuite, instrumentez le conteneur de votre application et définissez DD_AGENT_HOST sur le nom de votre conteneur d’Agent.

Collecte de logs

Disponible à partir des versions > 6.0 de l’Agent

La collecte des logs est désactivée par défaut dans l’Agent Datadog. Pour l’activer, consultez la section Collecte de logs avec Docker.

ParamètreValeur
<CONFIG_LOG>{"source": "postgresql", "service": "postgresql"}

Validation

Lancez la sous-commande status de l’Agent et cherchez postgres dans la section Checks.

Données collectées

Certaines des métriques répertoriées ci-dessous nécessitent une configuration supplémentaire. Consultez le fichier d’exemple postgres.d/conf.yaml pour découvrir toutes les options de configuration disponibles.

Métriques

postgresql.connections
(gauge)
The number of active connections to this database.
Shown as connection
postgresql.commits
(gauge)
The number of transactions that have been committed in this database.
Shown as transaction
postgresql.rollbacks
(gauge)
The number of transactions that have been rolled back in this database.
Shown as transaction
postgresql.disk_read
(gauge)
The number of disk blocks read in this database.
Shown as block
postgresql.buffer_hit
(gauge)
The number of times disk blocks were found in the buffer cache, preventing the need to read from the database.
Shown as hit
postgresql.rows_returned
(gauge)
The number of rows returned by queries in this database
Shown as row
postgresql.rows_fetched
(gauge)
The number of rows fetched by queries in this database
Shown as row
postgresql.rows_inserted
(gauge)
The number of rows inserted by queries in this database
Shown as row
postgresql.rows_updated
(gauge)
The number of rows updated by queries in this database
Shown as row
postgresql.rows_deleted
(gauge)
The number of rows deleted by queries in this database
Shown as row
postgresql.database_size
(gauge)
The disk space used by this database.
Shown as byte
postgresql.deadlocks
(gauge)
The number of deadlocks detected in this database
postgresql.temp_bytes
(gauge)
The amount of data written to temporary files by queries in this database.
Shown as byte
postgresql.temp_files
(gauge)
The number of temporary files created by queries in this database.
Shown as file
postgresql.bgwriter.checkpoints_timed
(count)
The number of scheduled checkpoints that were performed.
postgresql.bgwriter.checkpoints_requested
(count)
The number of requested checkpoints that were performed.
postgresql.bgwriter.buffers_checkpoint
(count)
The number of buffers written during checkpoints.
postgresql.bgwriter.buffers_clean
(count)
The number of buffers written by the background writer.
postgresql.bgwriter.maxwritten_clean
(count)
The number of times the background writer stopped a cleaning scan due to writing too many buffers.
postgresql.bgwriter.buffers_backend
(count)
The number of buffers written directly by a backend.
Shown as buffer
postgresql.bgwriter.buffers_alloc
(count)
The number of buffers allocated
postgresql.bgwriter.buffers_backend_fsync
(count)
The of times a backend had to execute its own fsync call instead of the background writer.
postgresql.bgwriter.write_time
(count)
The total amount of checkpoint processing time spent writing files to disk.
Shown as millisecond
postgresql.bgwriter.sync_time
(count)
The total amount of checkpoint processing time spent synchronizing files to disk.
Shown as millisecond
postgresql.locks
(gauge)
The number of locks active for this database.
Shown as lock
postgresql.seq_scans
(gauge)
The number of sequential scans initiated on this table.
postgresql.seq_rows_read
(gauge)
The number of live rows fetched by sequential scans.
Shown as row
postgresql.index_scans
(gauge)
The number of index scans initiated on this table.
postgresql.index_rows_fetched
(gauge)
The number of live rows fetched by index scans.
Shown as row
postgresql.index_rel_rows_fetched
(gauge)
The number of live rows fetched by index scans.
Shown as row
postgresql.rows_hot_updated
(gauge)
The number of rows HOT updated, meaning no separate index update was needed.
Shown as row
postgresql.live_rows
(gauge)
The estimated number of live rows.
Shown as row
postgresql.dead_rows
(gauge)
The estimated number of dead rows.
Shown as row
postgresql.index_rows_read
(gauge)
The number of index entries returned by scans on this index.
Shown as row
postgresql.table_size
(gauge)
The total disk space used by the specified table. Includes TOAST, free space map, and visibility map. Excludes indexes.
Shown as byte
postgresql.index_size
(gauge)
The total disk space used by indexes attached to the specified table.
Shown as byte
postgresql.total_size
(gauge)
The total disk space used by the table, including indexes and TOAST data.
Shown as byte
postgresql.table.count
(gauge)
The number of user tables in this database.
Shown as table
postgresql.max_connections
(gauge)
The maximum number of client connections allowed to this database.
Shown as connection
postgresql.percent_usage_connections
(gauge)
The number of connections to this database as a fraction of the maximum number of allowed connections.
Shown as fraction
postgresql.replication_delay
(gauge)
The current replication delay in seconds. Only available with postgresql 9.1 and newer
Shown as second
postgres.replication_delay_bytes
(gauge)
Deprecated please use postgresql.replication_delay_bytes instead
Shown as byte
postgresql.replication_delay_bytes
(gauge)
The current replication delay in bytes. Only available with postgresql 9.2 and newer
Shown as byte
postgresql.heap_blocks_read
(gauge)
The number of disk blocks read from this table.
Shown as block
postgresql.heap_blocks_hit
(gauge)
The number of buffer hits in this table.
Shown as hit
postgresql.index_blocks_read
(gauge)
The number of disk blocks read from all indexes on this table.
Shown as block
postgresql.index_blocks_hit
(gauge)
The number of buffer hits in all indexes on this table.
Shown as hit
postgresql.toast_blocks_read
(gauge)
The number of disk blocks read from this table's TOAST table.
Shown as block
postgresql.toast_blocks_hit
(gauge)
The number of buffer hits in this table's TOAST table.
Shown as hit
postgresql.toast_index_blocks_read
(gauge)
The number of disk blocks read from this table's TOAST table index.
Shown as block
postgresql.toast_index_blocks_hit
(gauge)
The number of buffer hits in this table's TOAST table index.
Shown as block
postgresql.transactions.open
(gauge)
The number of open transactions in this database.
Shown as transaction
postgresql.transactions.idle_in_transaction
(gauge)
The number of 'idle in transaction' transactions in this database.
Shown as transaction
postgresql.before_xid_wraparound
(gauge)
The number of transactions that can occur until a transaction wraparound.
Shown as transaction
postgresql.active_queries
(gauge)
The number of active queries in this database.
postgresql.waiting_queries
(gauge)
The number of waiting queries in this database.

Événements

Le check PostgreSQL n’inclut aucun événement.

Checks de service

postgres.can_connect :
Renvoie CRITICAL si l’Agent n’est pas capable de se connecter à l’instance PostgreSQL qu’il surveille. Si ce n’est pas le cas, renvoie OK.

Pour aller plus loin

Documentation, liens et articles supplémentaires utiles :

FAQ

Articles de blog