Professionnel

Supervision PostgreSQL / TimescaleDB avec Zabbix

Conception d'un template Zabbix 7.0 pour superviser le stockage PostgreSQL et TimescaleDB : un collecteur Python découvre bases, tables et hypertables, avec scripts d'installation et de vérification.

Actif
Schéma d'architecture : dans Zabbix 7.0, le template de stockage PostgreSQL / TimescaleDB complète le template PostgreSQL officiel, qui reste inchangé. Sur l'hôte supervisé, Zabbix Agent 2 exécute via UserParameter un collecteur Python utilisant psql pour inventorier les bases, les tables et les hypertables, en connexion locale ou TCP. Le JSON transmis par checks actifs alimente un item maître, trois règles de découverte, les métriques de taille, de chunks et de compression, le suivi du collecteur, les graphiques et le tableau de bord.
Architecture du template PostgreSQL / TimescaleDBVue générique du template de supervision : Zabbix Agent 2 exécute un collecteur Python qui inventorie bases, tables et hypertables PostgreSQL / TimescaleDB, puis transmet un document JSON utilisé pour la découverte, les métriques de stockage et le suivi de l'état du collecteur.

Projet réalisé dans un cadre professionnel : la présentation est volontairement généralisée.

Ma contribution

Conception et développement du template et de son collecteur : découverte des bases, tables et hypertables, collecte des tailles des tables, index et TOAST, suivi des chunks, de la compression et de l’état de la collecte. Réalisation des scripts d’installation, de vérification préalable et de désinstallation, et de tests hors ligne. Prise en charge des modes de connexion local, par socket Unix avec authentification peer, et TCP.

Points clés

  • Découverte automatique des bases, tables et hypertables PostgreSQL / TimescaleDB
  • Tailles des tables, index, TOAST et totales ; chunks et compression
  • Collecteur Python lancé par Zabbix Agent 2, un document JSON par cycle
  • Scripts d'installation, de vérification préalable et de désinstallation
  • Prise en charge des modes local (socket Unix, peer) et TCP

Contexte

Une base PostgreSQL qui stocke des séries temporelles grossit en continu, et l’essentiel de ce volume se concentre dans quelques tables. Avec TimescaleDB, ces tables sont des hypertables, découpées en chunks. Savoir que le disque se remplit ne suffit pas : il faut voir quelles tables grossissent, et à quel rythme.

Objectif

Disposer dans Zabbix d’un suivi du stockage au niveau des tables, réutilisable d’une base à l’autre sans configuration manuelle table par table, en complément du template officiel PostgreSQL by Zabbix agent 2, qui reste inchangé.

Fonctionnement général

  • Collecte. Zabbix Agent 2 lance, via un UserParameter, un collecteur Python qui interroge l’instance avec psql et renvoie un seul document JSON à chaque cycle.
  • Découverte. Trois découvertes s’appuient sur ce document : bases, tables PostgreSQL et hypertables TimescaleDB. Aucun nom de base ni de table n’est codé en dur.
  • Métriques de stockage. Pour chaque table découverte : taille de la table, des index, des données TOAST, autre et totale. Pour les hypertables : nombre de chunks, chunks compressés et non compressés, compression activée.
  • État de la collecte. Durée, erreurs et avertissements, collecte partielle, bases injoignables. Les alertes portent sur cette santé de la collecte ; les macros du template règlent notamment les filtres de découverte et l’intervalle de collecte.
  • Tableau de bord. « PostgreSQL / TimescaleDB storage » regroupe les graphiques par base, table et hypertable, les chunks et l’état du collecteur.
  • Installation. Des scripts d’installation et de désinstallation, et une vérification préalable de l’installation, du mode de connexion et de l’exécution du collecteur avant déploiement, accompagnés de tests hors ligne.
  • Deux modes de connexion. Socket Unix local avec authentification peer, ou connexion TCP.

Résultat

Un template fonctionnel pour Zabbix 7.0, livré en version 1.1.0 avec ses scripts d’installation, de vérification et de désinstallation et des tests hors ligne. Il prend en charge une connexion locale par socket Unix avec authentification peer, ainsi qu’une connexion TCP.