Supervision et Troubleshooting

Module K4

Dalibo SCOP

26.09

10 septembre 2026

Sur ce document

Formation Module K4
Titre Supervision et Troubleshooting
Révision 26.09
PDF https://dali.bo/k4_pdf
EPUB https://dali.bo/k4_epub
HTML https://dali.bo/k4_html
Slides https://dali.bo/k4_slides
TP https://dali.bo/k4_tp
TP (solutions) https://dali.bo/k4_solutions

Licence Creative Commons CC-BY-NC-SA

Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :

  • Paternité
  • Pas d’utilisation commerciale (y compris IA)
  • Partage des conditions initiales à l’identique

Marques déposées

PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.

Versions de PostgreSQL couvertes

Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 14 à 18.

Supervision et Troubleshooting

Introduction

  • Deux types de supervision
    • occasionnelle
    • automatique
  • Superviser PostgreSQL et le système
  • Superviser l’opérateur

Au menu

  • Supervision PostgreSQL
    • Informations internes
    • Traces
  • Sondes externes
    • check_pgactivity
  • Outils CloudNativePG
    • Exporter Prometheus
    • Dashboard Grafana
  • Troubleshooting
    • Commandes à connaître

Informations internes

  • PostgreSQL propose :
    • de nombreuses statistiques d’activité
    • de nombreuses informations dans les traces
    • de nombreuses vues
  • … mais rien pour les historiser
  • CloudNativePG … non plus !

pg_stat_activity

  • Tracer l’activité :
    • track_activities = on (défaut)
  • pg_stat_activity affiche
    • les requêtes
    • les processus
    • les Wait Event
    • les Backend Type
  • Nombreuses informations

pg_stat_archiver

  • Compteur d’activité de l’archiver
  • S’assurer du bon fonctionnement
  • Diagnostiquer

pg_stat_user_tables

  • Compteur d’utilisation d’une table
    • seq_scan, idx_scan
  • Statistique sur le contenu
    • n_live_tup, n_dead_tup, n_tup_ins, n_tup_upd, n_tup_del
    • Utile pour l’autovacuum
  • Horodatage
    • last_vacuum, last_autovacuum, last_analyze, last_autoanalyze

pg_stats

  • Statistiques sur les données des
    • Tables
    • Vues matérialisées
  • Statistiques utilisées par le planificateur
  • Utile pour diagnostiquer des problèmes de planification

La liste des vues est longue

  • pg_statio_user_tables
  • pg_stat_database
  • pg_stat_user_indexes
  • pg_stat_wal_receiver
  • pg_stat_checkpointer
  • pg_stat_database_conflicts

Traces PostgreSQL

  • Contient des informations précieuses
    • si correctement configurées
  • Traces des requêtes
    • durée, fichiers temporaires
  • Traces d’évènements
    • erreurs, redémarrages, verrous
  • Une vrai mine d’or à exploiter

Rappels

  • CloudNativePG fixe certains paramètres
    • log_destination, log_directory, log_file_mode, log_filename, …
  • Format JSON sur la sortie standard
  • Aucun paramètre sur le contenu des traces n’est modifié par défaut

Niveau des traces

  • log_min_messages
    • défaut : panic / fatal / log / error / warning
  • log_min_error_statement
    • défaut : error (ou warning)

Tracer les requêtes et leur durée

  • Toutes les requêtes :
    • log_min_duration_statement (ex : 1s)
    • ou log_statement + log_duration
  • Extrait aléatoire :
    • log_transaction_sample_rate
    • log_statement_sample_rate + log_min_duration_sample

Configuration : tracer certains comportements

  • log_connections + log_disconnections
  • log_autovacuum_min_duration
  • log_checkpoints
    • time ou wal ?
  • log_lock_waits (mini 1s)
    • verrous en attente

Repérer les fichiers temporaires

  • Exemple :
LOG:  temporary file: path "base/pgsql_tmp/pgsql_tmp9894.0",
      size 26927104
  • log_temp_files : à activer !
  • Cause : tris, agrégats, jointures…
  • Alerte : problème potentiel de performances

Cas particulier : log_line_prefix

  • log_line_prefix
    • Fréquemment modifié
    • Permet d’ajouter des informations
    • Habituellement conseillé : %t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h
  • Inutile avec CloudNativePG
    • log_destination à csvlog
  • Transformation CSV en JSON

Sondes externes

  • Permet des vérifications
    • plus précises
    • propres au métier
  • check_pg_activity
    • script de monitoring PostgreSQL pour Nagios-like
    • utilisable indépendamment de CloudNativePG
  • Développé initialement par Dalibo
  • https://github.com/OPMDG/check_pgactivity

Outils CloudNativePG

  • Exporte des métriques prédéfinies, format Prometheus
    • Sur l’opérateur
    • Sur PostgreSQL
    • ConfigMap par défaut cnpg-default-monitoring
    • Métriques PostgreSQL, métriques Golang
  • Permet de définir des métriques maisons
  • S’intègre facilement avec Grafana

Métriques prédéfinies

  • Pod PostgreSQL
    • curl http://127.0.0.1:9187/metrics
    • Métriques PostgreSQL
    • Métriques Golang
  • Pod de l’opérateur
    • curl http://127.0.0.1:8080/metrics
  • ConfigMap cnpg-default-monitoring
  • Mise en cache de 30s

Métriques personnalisées

  • Besoins spécifiques
  • ConfigMap
  • spec.monitoring du Cluster
  • Attention à la complexité des requêtes !

Dashboard Grafana

  • Collecter les données
    • À vous de le faire
  • Les afficher
    • À vous de le faire
    • Un dashboard Grafana (#20417) existe !
    • Le compléter avec vos propres graphiques

Troubleshooting

  • PostgreSQL et CloudNativePG
  • Quelques commandes
  • Cas typiques

Quelques commandes - CloudNativePG

  • Plugin cnpg pour kubectl
    • Permet d’intéragir avec un Cluster
    • De nombreuses sous-commandes

Commande status

kubectl cnpg status CLUSTER
  • État connu du Cluster
  • Primaire, secondaire, réplication, lag, …
  • Bon point de départ

Commande report

kubectl cnpg report cluster CLUSTER --logs -f report.zip
kubectl cnpg report operator -n NAMESPACE --logs -f report_cnpg.zip
  • Crée une archive (.zip) d’un Cluster ou de l’opérateur
    • définitions YAML (manifests)
    • traces des Pods (logs)
  • Pratique à envoyer à un support

Commande fencing

kubectl cnpg fencing on CLUSTER ID -- une instance
kubectl cnpg fencing on CLUSTER "*" -- toutes les instances
  • Arrête le service postmaster
  • Pod toujours en cours d’exécution
  • Pas de failover si l’instance primaire est fenced

show

SHOW parametre;
  • Retourne la valeur du paramètre
  • Utile pour s’assurer de la valeur prise en compte

pg_is_in_recovery

select pg_is_in_recovery();
  • Savoir si l’instance est en recovery
  • true ou false
  • Déduire le type d’instance (primaire, secondaire)

pg_cancel_backend

SELECT pg_cancel_backend(pid) ;
  • Annuler une requête
SELECT pg_terminate_backend(pid, timeout) ;
  • Fermer une connexion

pg_ls_dir et pg_ls_waldir

SELECT pg_ls_dir(path);
  • Dossier quelconque
SELECT pg_ls_waldir();
  • Dossier pg_wal

  • Utiles sans accès au système de fichiers

Cas typiques

  • Incidents classiques
  • Des problèmes déjà rencontrés

Saturation de l’espace disque

  • Système de fichiers saturé
  • pg_wal saturé :
    • Blocage de l’instance
  • Le volume doit être agrandi

Décrochage du secondaire

  • Secondaire arrêté longtemps
  • Réplication en pause
  • Pas de slot de réplication ou paramètre max_slot_wal_keep_size dépassé
  • Redémarrage du secondaire
  • Impossible de raccrocher le primaire

Questions

N’hésitez pas, c’est le moment !

Quiz

Travaux pratiques

La version en ligne des solutions de ces TP est disponible sur https://dali.bo/k4_solutions.

Travaux pratiques (solutions)