RousselTMLEARNING

Observabilité

Database Observability : suivre requêtes et plans MySQL et PostgreSQL avec Alloy

Les composants database_observability.mysql et .postgres d'Alloy : collecteurs, plans d'exécution, verrous, envoi vers Loki et Mimir, droits nécessaires.

1. Au-delà des métriques serveur #

Ce que voit Database Observability.

Le principe #

Un exporteur Prometheus dit que la base est lente ; Database Observability dit quelle requête, avec quel plan d'exécution et quels verrous. Les composants database_observability.mysql et database_observability.postgres collectent ces détails et les envoient à Loki ; l'application Database Observability de Grafana Cloud les présente.

De performance_schema à Loki et Mimir

Les collecteurs MySQL #

CollecteurPar défautRôle
query_detailsoui, 1 minRequêtes normalisées (250 maximum)
query_samplesoui, 10 sÉchantillons d’exécutions réelles
schema_detailsoui, 1 minTables et colonnes
explain_plansoui, 1 minPlans d’exécution (EXPLAIN)
locksnon, 30 sAttentes de verrous au-delà de 1 s
table_stats, index_statsnonStatistiques des tables et index
Ce que mesure l'exporteur et ce qu'apporte Database Observability

2. La configuration #

MySQL vers Loki et Mimir.

config.alloy #

local.file "mysql_dsn" {
  filename  = "/etc/alloy/secrets/mysql-dsn"
  is_secret = true
}

prometheus.exporter.mysql "orders" {
  data_source_name = local.file.mysql_dsn.content
}

database_observability.mysql "orders" {
  data_source_name  = local.file.mysql_dsn.content
  forward_to        = [loki.write.default.receiver]
  targets           = prometheus.exporter.mysql.orders.targets
  enable_collectors = ["locks", "table_stats"]
}

prometheus.scrape "orders" {
  targets    = database_observability.mysql.orders.targets
  forward_to = [prometheus.remote_write.mimir.receiver]
}

loki.write "default" {
  endpoint {
    url = "http://loki:3100/loki/api/v1/push"
  }
}

prometheus.remote_write "mimir" {
  endpoint {
    url = "http://mimir:9009/api/v1/push"
  }
}

Configuration validée avec alloy validate (Alloy v1.21.3, novembre 2026).

  • Le DSN est un secret : lu par local.file avec is_secret = true, il n'apparaît ni dans l'interface ni dans les logs d'Alloy.
  • targets : réutilise ceux de prometheus.exporter.mysql pour relier détails et métriques de la même instance.
  • allow_update_performance_schema_settings (faux par défaut) : nécessaire pour que query_samples et setup_actors ajustent eux-mêmes performance_schema.

Côté base #

Créez un utilisateur dédié en lecture seule, avec accès à performance_schema (MySQL) ou pg_stat_statements et pg_monitor (PostgreSQL). Les droits exacts dépendent de la version : suivez le guide de configuration de Grafana pour votre moteur.

Non exécuté ici : sans serveur MySQL dans notre environnement, la configuration a été validée, pas lancée.

Sources #

Articles liés

Alloy et l'écosystème Grafana Labs : quel composant pour quel outil ?

La carte des intégrations d'Alloy avec Faro, Beyla, k6, Loki, Mimir, Tempo, Pyroscope, Database Observability…

Faro et Alloy : recevoir le RUM front-end avec faro.receiver

Configurer faro.receiver : CORS, clé d'API, limite de débit, source maps, puis envoyer erreurs, Web Vitals et…

Beyla et Alloy : métriques RED et traces sans code avec beyla.ebpf

Activer l'instrumentation eBPF de Beyla dans Alloy : découverte des services, métriques RED vers Mimir, trace…

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !