La solution Database Monitoring n'est pas prise en charge pour ce site.
La solution Database Monitoring vous permet de bénéficier d’une visibilité complète sur vos bases de données Postgres, en exposant des métriques de requête, des échantillons de requête et des plans d’exécution, ainsi que des états, des failovers et des événements de base de données.
L’Agent recueille la télémétrie directement depuis la base de données, en se connectant en tant qu’utilisateur en lecture seule. Suivez les étapes ci-dessous pour activer la solution Database Monitoring avec votre base de données Postgres :
Des modules Postgres supplémentaires doivent être installés. Ils sont fournis par défaut pour la plupart des installations. Pour les installations peu courantes, il est possible que vous deviez installer votre version du package postgresql-contrib.
Versions de l’Agent prises en charge
7.36.1+
Incidence sur les performances impact
La configuration par défaut de l’Agent pour Database Monitoring est relativement souple. Néanmoins, vous pouvez ajuster certains paramètres comme l’intervalle de collecte et le taux d’échantillonnage des requêtes pour mieux répondre à vos besoins. Pour la plupart des workloads, l’Agent monopolise moins d’un pour cent du temps d’exécution des requêtes sur la base de données, et moins d’un pour cent du CPU.
La solution Database Monitoring de Datadog fonctionne comme une intégration et vient compléter l’Agent de base (voir les benchmarks).
Proxies, répartiteurs de charge et outils de regroupement de connexions
L’Agent doit se connecter directement au host surveillé. Pour les bases de données auto-hébergées, il est préférable d’utiliser 127.0.0.1 ou le socket. L’Agent ne doit pas se connecter aux bases de données via un proxy, un répartiteur de charge ni un outil de groupement de connexions comme pgbouncer. Bien qu’il puisse s’agir d’un antipattern pour des applications client, chaque Agent doit connaître le hostname sous-jacent et rester sur un seul host pendant toute sa durée de vie, même en cas de failover. Si l’Agent Datadog se connecte à plusieurs hosts pendant son exécution, les valeurs des métriques seront incorrectes.
Considérations relatives à la sécurité des données
Consultez la rubrique Informations sensibles pour découvrir les données recueillies par l’Agent à partir de vos bases de données et la méthode à suivre pour garantir leur sécurité.
Configurez les paramètres suivants dans le fichier postgresql.conf. Redémarrez ensuite le serveur pour appliquer la configuration. Pour en savoir plus sur ces paramètres, consultez la documentation Postgres (en anglais).
Paramètre
Valeur
Description
shared_preload_libraries
pg_stat_statements
Requis pour les métriques postgresql.queries.*. Active la collecte de métriques de requête à l’aide de l’extension pg_stat_statements.
track_activity_query_size
4096
Requis pour la collecte de requêtes volumineuses. Augmente la taille du texte SQL dans pg_stat_activity et pg_stat_statements. Si vous conservez la valeur par défaut, les requêtes comportant plus de 1024 caractères ne seront pas recueillies.
pg_stat_statements.track
ALL
Facultatif. Active le suivi des déclarations dans les procédures et fonctions stockées.
pg_stat_statements.max
10000
Facultatif. Augmente le nombre de requêtes normalisées suivies dans pg_stat_statements. Ce paramètre est recommandé pour les bases de données générant d’importants volumes ainsi que de nombreux types de requêtes à partir d’un grand nombre de clients.
pg_stat_statements.track_utility
off
Facultatif. Désactive les commandes d’utilitaire comme PREPARE et EXPLAIN. Si vous définissez ce paramètre sur off, seules les requêtes de type SELECT, UPDATE, and DELETE sont suivies.
track_io_timing
on
Facultatif. Active la collecte des durées de lecture et d’écriture des blocs pour les requêtes.
L’Agent Datadog requiert un accès en lecture seule pour le serveur de base de données, afin de pouvoir recueillir les statistiques et requêtes.
Si Postgres est répliqué, les commandes SQL suivantes doivent être exécutées sur le principal serveur de base de données (avec les droits d’écriture) dans le cluster. Choisissez la base de données PostgresSQL à laquelle l’Agent se connectera sur le serveur dédié. L’Agent peut recueillir la télémétrie de toutes les bases de données sur ce serveur, peu importe celle à laquelle il se connecte. Il est donc recommandé d’utiliser la base de données postgres par défaut. Choisissez une autre base de données uniquement si l’Agent doit exécuter des requêtes personnalisées sur des données stockées uniquement dans cette base de données.
Connectez-vous à la base de données en tant que super-utilisateur (ou en tant qu’un autre utilisateur avec les autorisations nécessaires). Par exemple, pour la base de données postgres, exécutez ce qui suit pour vous connecter en tant qu’utilisateur postgres avec psql :
Pour la collecte de données ou les métriques custom nécessitant d'interroger des tables supplémentaires, vous devrez peut-être accorder l'autorisation SELECT pour les tables en question à l'utilisateur datadog. Exemple : grant SELECT on <TABLE_NAME> to datadog;. Consultez la section Collecte de métriques custom PostgreSQL pour en savoir plus.
Créez la fonction dans chaque base de données pour permettre à l’Agent de recueillir les plans d’exécution.
Pour vérifier que l’utilisateur de l’Agent possède les autorisations adéquates et qu’il parvient à se connecter à la base de données et à lire les principales tables, exécutez ce qui suit :
L’installation de l’Agent Datadog entraîne également l’installation du check Postgres requis pour la solution Database Monitoring sur Postgres. Si vous n’avez pas encore installé l’Agent pour le host de votre base de données Postgres, consultez les instructions d’installation de l’Agent.
Modifiez le fichier conf.d/postgres.d/conf.yaml de l’Agent afin de pointer vers votre host/port et définissez les hosts à surveiller. Consultez le fichier d’exemple postgres.d/conf.yaml pour découvrir toutes les options de configuration disponibles.
init_config:instances:- dbm:truehost:localhostport:5432username:datadogpassword:'<MOT_DE_PASSE>'## Facultatif : connexion à une autre base de données si nécessaire pour `custom_queries`# dbname: '<NOM_BASE_DE_DONNÉES>'
init_config:instances:- dbm:truehost:localhostport:5432username:datadogpassword:'<MOT_DE_PASSE>'pg_stat_statements_view:datadog.pg_stat_statements()pg_stat_activity_view:datadog.pg_stat_activity()## Facultatif : connexion à une autre base de données si nécessaire pour `custom_queries`# dbname: '<NOM_BASE_DE_DONNÉES>'
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 (en anglais) à ce sujet pour en savoir plus.
La configuration de la journalisation 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'
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 avez la possibilité d’enregistrer uniquement les déclarations qui dépassent une certaine durée en définissant la valeur log_min_duration_statement sur la durée minimum souhaitée en millisecondes (assurez-vous que l’enregistrement des déclarations SQL complètes est conforme aux exigences de confidentialité de votre organisation) :
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
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
Ajoutez ce bloc de configuration à votre fichier conf.d/postgres.d/conf.yaml et modifiez-le pour commencer à recueillir vos logs PostgreSQL :
logs:- type:filepath:"<LOG_FILE_PATH>"source:postgresqlservice:"<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.
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.
In these cases, Datadog recommends limiting the number of instances per Agent to a maximum of 10 database instances to guarantee reliable performance.
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:truehost:example-service-primary.example-host.comport:5432username:datadogpassword:'ENC[datadog_user_database_password]'database_autodiscovery:enabled:true# Optionally, set the include field to specify# a set of databases you are interested in discoveringinclude:- mydb.*- example.*tags:- 'env:prod'- 'team:team-discovery'- 'service:example-service'
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:truehost:example-service-primary.example-host.comport:5432username:datadogpassword:'ENC[datadog_user_database_password]'database_autodiscovery:enabled:trueexclude:- ^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.comport:5432username:datadogpassword:'ENC[datadog_user_database_password]'dbname:usersdbstrict:truerelations:- 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.comport:5432username:datadogpassword:'ENC[datadog_user_database_password]'dbname:inventorydbstrict:truerelations:- relation_name:products- relation_name:external_seller_products
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 tablesinstances:- dbm:truehost:example-service-primary.example-host.comport:5432username:datadogpassword:'ENC[datadog_user_database_password]'dbname:usersdbstrict:truecollect_schemas:enabled:truerelations:- products- external_seller_products# This instance detects every logical database automatically# and collects relation metrics from every table- dbm:truehost:example-service–replica-1.example-host.comport:5432username:datadogpassword:'ENC[datadog_user_database_password]'database_autodiscovery:enabled:truecollect_schemas:enabled:truerelations:- relation_regex:.*
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.
Si vous avez respecté les instructions d’installation et de configuration des intégrations et de l’Agent, mais que vous rencontrez un problème, consultez la section Dépannage.