Aller au contenu

Bases de données

Les monitors de base de données se connectent à votre serveur PostgreSQL, MySQL/MariaDB ou MongoDB comme le fait votre application, exécutent une requête et vérifient le résultat. Contrairement à un check TCP sur le port 5432, cela prouve que le serveur accepte les connexions, vous authentifie et répond réellement — et la latence connexion + requête est enregistrée à chaque check.

Trois types de monitor, un seul comportement :

TypeSchémas acceptésPort par défautRequête par défaut
PostgreSQLpostgres://, postgresql://5432SELECT 1
MySQLmysql://, mariadb://3306SELECT 1
MongoDBmongodb://, mongodb+srv://27017{ "ping": 1 }

MariaDB parle le protocole MySQL — utilisez le type MySQL.

Agentfr-dc3 1 · connect (TLS) + auth 2 · SELECT count(*) FROM jobs … 3 · result: 7 · 38 ms db.example.com:5432 RESULT connected, query ran, 7 < 10 → up connected but result off threshold → failure refused / auth failed / timeout → failure user / password are stored encrypted and never appear in the URL, alerts, status pages or exports — the URL is saved as postgres://db.example.com:5432/app
  1. L’agent ouvre une connexion vers le serveur (TLS si l’URL le demande) et s’authentifie avec l’utilisateur et le mot de passe du monitor.
  2. Il exécute la requête configurée — ou celle par défaut du type.
  3. Le résultat est comparé à la vérification du résultat optionnelle. Connexion refusée, échec d’authentification, erreur de requête ou timeout comptent comme un check en échec ; un résultat hors de la valeur attendue aussi.

La latence est le temps complet connexion + requête : une base qui ralentit apparaît comme une tendance sur le graphique du monitor bien avant de cesser de répondre.

ParamètreDescriptionValeur par défaut
URL de connexionpostgres://hote:5432/base?sslmode=require, mongodb://noeud1,noeud2/admin?replicaSet=rs0&tls=true
Utilisateur de la baseIdentifiant utilisé pour le check
Mot de passe de la baseStocké chiffré
Requête de testInstruction SQL, ou document de commande MongoDB en JSONSELECT 1 / { "ping": 1 }
Vérification du résultatOpérateur + valeur attendue appliqués au résultat de la requête (optionnel)aucune
Ignorer la validation TLSAccepter un certificat auto-signédésactivé
IntervalleFréquence de vérificationselon le plan
TimeoutBudget fixe du check, connexion + requête (non configurable)5 s

Collez l’URL de connexion telle que votre fournisseur vous la donne, identifiants compris. Tout ce qui précède le @ est déplacé dans les champs utilisateur et mot de passe, et l’URL est enregistrée sans :

vous collez mongodb://monitoring:s3cret@node1.example.net,node2.example.net/admin?replicaSet=rs0&tls=true
URL enregistrée mongodb://node1.example.net,node2.example.net/admin?replicaSet=rs0&tls=true
utilisateur monitoring (chiffré)
mot de passe s3cret (chiffré)

L’URL est ce qu’affichent la liste des monitors, les messages d’alerte, les pages de statut publiques, le journal d’audit et l’export RGPD. L’utilisateur et le mot de passe sont chiffrés au repos, masqués en *** dans l’API et dans tous les exports, et retirés des messages d’erreur. Cela s’applique à tous les types de monitor — une cible HTTP https://user:password@hote est découpée de la même façon.

Utilisez un utilisateur en lecture seule créé pour le monitoring. La requête s’exécute avec ses privilèges, rien d’autre ne la limite.

L’URL décide si TLS est utilisé, selon la convention de chaque moteur :

  • PostgreSQL — ?sslmode=require (ou verify-ca, verify-full)
  • MySQL / MariaDB — ?ssl-mode=REQUIRED (ou tls=true)
  • MongoDB — ?tls=true ; les URL mongodb+srv:// utilisent toujours TLS

Le certificat du serveur est validé contre les autorités publiques. Pour un certificat auto-signé, cochez Ignorer la validation du certificat TLS sur le monitor.

Le résultat de la requête est réduit à une seule valeur :

  • SQL — la première colonne de la première ligne. SELECT count(*) FROM jobs WHERE status = 'stuck' donne un nombre ; SELECT pg_is_in_recovery() donne t/f.
  • MongoDB — le document de réponse de la commande. Choisissez un champ par chemin pointé (ok, members.0.stateStr, repl.setName) ; laissez le chemin vide pour comparer la réponse entière.

Choisissez ensuite un opérateur (==, !=, contains, >, <, >=, <=) et la valeur attendue. Les opérateurs numériques comparent des nombres ; les autres comparent du texte.

Exemples :

MoteurRequêteVérificationSignification
PostgreSQLSELECT count(*) FROM jobs WHERE status='stuck'< 10la file de jobs ne s’accumule pas
PostgreSQLSELECT extract(epoch from now() - pg_last_xact_replay_timestamp())< 30retard de réplication < 30 s
MySQLSELECT count(*) FROM information_schema.processlist< 200moins de 200 connexions
MongoDB{ "replSetGetStatus": 1 }members.0.stateStr == PRIMARYle nœud 0 est le primaire
MongoDB{ "serverStatus": 1 }connections.current < 500moins de 500 connexions

Sans vérification du résultat, se connecter et exécuter la requête avec succès constitue le check à lui seul.

Une base non joignable depuis Internet — et la plupart ne devraient pas l’être — est surveillée depuis un agent privé déployé dans votre réseau. Le check est identique ; seul l’agent qui l’exécute change. Les régions publiques refusent les cibles qui résolvent vers des adresses privées.

Le temps connexion + requête est enregistré à chaque check et alimente le même graphique de latence, les mêmes percentiles et les mêmes alertes qu’un monitor HTTP.