
Présentation
Recueillez des métriques de PostgreSQL en temps réel pour :
- Visualiser et surveiller les états de PostgreSQL.
- Être informé des failovers et des événements PostgreSQL.
Configuration
Cette page décrit le fonctionnement de l'intégration d'Agent Postgres. Si vous souhaitez obtenir des informations sur la solution Database Monitoring pour Postgres, consultez la section
Database Monitoring.
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;
grant SELECT ON pg_stat_database 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;
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;
Remarque : pour créer des métriques custom nécessitant d’interroger des tables supplémentaires, vous devrez peut-être accorder à l’utilisateur datadog
l’autorisation SELECT
pour ces tables. Exemple de commande : grant SELECT on <NOM_TABLE> to datadog;
. Consultez la rubrique FAQ pour en savoir plus.
Host
Pour configurer ce check lorsque l’Agent est exécuté sur un host :
Collecte de métriques
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.
#
- 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>"
# @param disable_generic_tags - boolean - optional - default: false
# The integration will stop sending server tag as is reduntant with host tag
disable_generic_tags: true
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 :
- Activez la collecte de trace dans Datadog.
- 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. Pour en savoir plus, consultez la section Rapports d’erreur et journalisation de la documentation PostgreSQL (en anglais).
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. Remarque : les options log_statement
et log_duration
ont été mises en commentaire. Pour en savoir plus à ce sujet, consultez la discussion Déclaration de journalisation et durée sur la même ligne (en anglais).
Cette configuration enregistre toutes les déclarations dans les logs. Pour réduire le volume de la sortie à l’aide d’un critère de durée, définissez 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
La collecte de logs est désactivée par défaut dans l’Agent Datadog. Vous devez l’activer dans datadog.yaml
:
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.
Redémarrez l’Agent.
Docker
Pour configurer ce check lorsque l’Agent est exécuté sur un conteneur :
Collecte de métriques
Définissez des modèles d’intégration Autodiscovery en tant qu’étiquettes Docker sur votre conteneur d’application :
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":"<MOT_DE_PASSE>"}]'
Collecte de logs
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.
Définissez ensuite des [intégrations de logs][5] en tant qu’étiquettes Docker :
LABEL "com.datadoghq.ad.logs"='[{"source":"postgresql","service":"postgresql"}]'
Collecte de traces
L’APM dédié aux applications conteneurisées est pris en charge sur les versions 6 et ultérieures de l’Agent, mais nécessite une configuration supplémentaire pour recueillir des traces.
Variables d’environnement requises sur le conteneur de l’Agent :
Paramètre | Valeur |
---|
<DD_API_KEY> | api_key |
<DD_APM_ENABLED> | true |
<DD_APM_NON_LOCAL_TRAFFIC> | true |
Consultez la section Tracer des applications Docker pour voir la liste complète des variables d’environnement et configurations disponibles.
Ensuite, instrumentez votre conteneur d’application qui envoie des requêtes à Postgres et définissez DD_AGENT_HOST
sur le nom du conteneur de votre Agent.
Kubernetes
Pour configurer ce check lorsque l’Agent est exécuté sur Kubernetes :
Collecte de métriques
Définissez des modèles d’intégration Autodiscovery en tant qu’annotations de pod sur votre conteneur d’application. Cette configuration peut également être réalisée avec un fichier, une configmap ou une paire key/value.
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":"<MOT_DE_PASSE>"
}
]
spec:
containers:
- name: postgres
Collecte de logs
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 Kubernetes.
Définissez ensuite des intégrations de logs en tant qu’annotations de pod. Cette configuration peut également être réalisée avec un fichier, une configmap ou une paire key/value.
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
ad.datadoghq.com/postgres.logs: '[{"source":"postgresql","service":"<NOM_SERVICE>"}]'
spec:
containers:
- name: postgres
Collecte de traces
L’APM dédié aux applications conteneurisées est pris en charge par les hosts exécutant les versions 6 et ultérieures de l’Agent, mais nécessite une configuration supplémentaire pour recueillir des traces.
Variables d’environnement requises sur le conteneur de l’Agent :
Paramètre | Valeur |
---|
<DD_API_KEY> | api_key |
<DD_APM_ENABLED> | true |
<DD_APM_NON_LOCAL_TRAFFIC> | true |
Consultez les sections relatives au tracing d’applications Kubernetes et à la configuration de DaemonSet Kubernetes pour voir la liste complète des variables d’environnement et configurations disponibles.
Ensuite, instrumentez votre conteneur d’application qui envoie des requêtes à Postgres.
ECS
Pour configurer ce check lorsque l’Agent est exécuté sur ECS :
Collecte de métriques
Définissez des modèles d’intégration Autodiscovery en tant qu’étiquettes Docker sur votre conteneur d’application :
{
"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\":\"<MOT_DE_PASSE>\"}]"
}
}]
}
Collecte de logs
La collecte des logs est désactivée par défaut dans l’Agent Datadog. Pour l’activer, consultez la section Collecte de logs Amazon ECS.
Définissez ensuite des intégrations de logs en tant qu’étiquettes Docker :
{
"containerDefinitions": [{
"name": "postgres",
"image": "postgres:latest",
"dockerLabels": {
"com.datadoghq.ad.logs": "[{\"source\":\"postgresql\",\"service\":\"postgresql\"}]"
}
}]
}
Collecte de traces
L’APM dédié aux applications conteneurisées est pris en charge sur les versions 6 et ultérieures de l’Agent, mais nécessite une configuration supplémentaire pour recueillir des traces.
Variables d’environnement requises sur le conteneur de l’Agent :
Paramètre | Valeur |
---|
<DD_API_KEY> | api_key |
<DD_APM_ENABLED> | true |
<DD_APM_NON_LOCAL_TRAFFIC> | true |
Consultez la section Tracer des applications Docker pour voir la liste complète des variables d’environnement et configurations disponibles.
Ensuite, instrumentez votre conteneur d’application qui envoie des requêtes à Postgres et définissez DD_AGENT_HOST
sur l’adresse IP privée EC2.
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
Avec la version 7.32.0
et les versions ultérieures de l’Agent, si vous avez activé Database Monitoring, les tags state
, app
, db
et user
sont appliqués à la métrique postgresql.connections
.
É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
.
Statuses: ok, critical
Dépannage
Besoin d’aide ? Contactez l’assistance Datadog.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles :
FAQ
Articles de blog