ENbext.dev
DocumentationExploitation

Traduction automatique depuis l’anglais. Consulter l’original.

Sur cette page

Surveillance

bext expose un point de terminaison de métriques compatible Prometheus et un point de terminaison de vérification de l'état, vous offrant une observabilité complète avec votre pile de surveillance existante.

Configuration#

toml
# bext.config.toml
[metrics]
enabled = true                   # expose /__bext/metrics
path = "/__bext/metrics"         # customize the endpoint path
include_process = true           # include process_* metrics (RSS, CPU, FDs)

[health]
enabled = true                   # expose /__bext/health
path = "/__bext/health"          # customize the endpoint path
include_details = true           # include component-level health in response

Les deux points de terminaison sont exclus des journaux d’accès et de la limitation de débit par défaut.

Point de terminaison des métriques#

Grattez /__bext/metrics avec Prometheus. La réponse est dans le format d'exposition standard de Prometheus.

Métriques disponibles#

Métriques HTTP

Métrique Taper Étiquettes Description
http_requests_total comptoir method, status, path_group Total des requêtes HTTP
http_request_duration_seconds histogramme method, path_group Latence des requêtes (buckets : 5 ms, 10 ms, 25 ms, 50 ms, 100 ms, 250 ms, 500 ms, 1 s, 5 s)
http_request_size_bytes histogramme method Demander la taille du corps
http_response_size_bytes histogramme method Taille du corps de réponse
http_active_connections jauge Connexions actuellement ouvertes

Métriques de cache

Métrique Taper Étiquettes Description
cache_hits_total comptoir layer Accès au cache ( l1 = en mémoire, l2 = Redis )
cache_misses_total comptoir layer Le cache manque
cache_entries jauge layer Nombre actuel d'entrées dans le cache
cache_evictions_total comptoir layer Entrées expulsées
cache_stampede_coalesced_total comptoir Demandes regroupées par le garde de bousculade
isr_revalidations_total comptoir status Revalidations des antécédents ISR ( success, error )

Métriques de piscine SSR / V8

Métrique Taper Étiquettes Description
render_pool_active jauge rendre les travailleurs en cours de rendu
render_pool_idle jauge rendre les travailleurs disponibles
render_pool_total jauge Nombre total de travailleurs de rendu configurés
render_duration_seconds histogramme Temps de rendu SSR
render_pool_wait_seconds histogramme Temps passé à attendre un travailleur disponible
render_oom_kills_total comptoir Des travailleurs tués à cause de problèmes de mémoire

Métriques du plug-in

Métrique Taper Étiquettes Description
plugin_invocations_total comptoir plugin, hook Invocations de hooks de plugin
plugin_duration_seconds histogramme plugin, hook Temps d'exécution du plugin
plugin_errors_total comptoir plugin Erreurs/délais d’attente du plugin

Métriques de processus (lorsque include_process = true)

Métrique Taper Description
process_resident_memory_bytes jauge Utilisation de la mémoire RSS
process_cpu_seconds_total comptoir Temps CPU total consommé
process_open_fds jauge Nombre de descripteurs de fichiers ouverts
process_uptime_seconds jauge Disponibilité du serveur

Exemple de configuration de Prometheus Scrape#

yaml
# prometheus.yml
scrape_configs:
  - job_name: bext
    scrape_interval: 15s
    static_configs:
      - targets: ["bext-host:3061"]
    metrics_path: /__bext/metrics

Point de terminaison du bilan de santé#

GET /__bext/health renvoie un rapport d'état JSON :

json
{
  "status": "healthy",
  "uptime_secs": 86412,
  "checks": {
    "render_pool": "ok",
    "isr_cache": "ok",
    "redis": "ok",
    "tls_certs": "ok",
    "disk_space": "ok"
  }
}

Renvoie 200 lorsqu'il est sain, 503 lorsqu'un composant est signalé dégradé. Utilisez-le pour les vérifications de l’état de l’équilibreur de charge et les sondes d’activité Kubernetes.

Tableau de bord Grafana#

Un exemple JSON de tableau de bord Grafana est disponible dans le référentiel bext à l'adresse contrib/grafana-dashboard.json. Importez-le dans Grafana et définissez la source de données Prometheus.

Les panneaux clés comprennent :

  • Taux de demande ( rate(http_requests_total[5m]) )
  • Latence P50/P95/P99 ( histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) )
  • Taux d'erreur ( rate(http_requests_total{status=~"5.."}[5m]) )
  • Taux de réussite du cache ( rate(cache_hits_total[5m]) / (rate(cache_hits_total[5m]) + rate(cache_misses_total[5m])) )
  • V8 saturation de la piscine ( render_pool_active / render_pool_total )

Règles d'alerte#

Règles d'alerte Prometheus recommandées :

yaml
# alerts.yml
groups:
  - name: bext
    rules:
      - alert: HighErrorRate
        expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "bext error rate above 5%"

      - alert: HighLatency
        expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 1.0
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "bext P95 latency above 1 second"

      - alert: JscPoolExhausted
        expr: render_pool_idle == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "All render workers busy — SSR requests are queuing"

      - alert: CacheHitRateLow
        expr: rate(cache_hits_total[10m]) / (rate(cache_hits_total[10m]) + rate(cache_misses_total[10m])) < 0.5
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "Cache hit rate below 50% — check ISR TTLs and cache capacity"

OpenTelemetry#

bext exporte des traces et des métriques via OTLP :

toml
# bext.config.toml
[telemetry]
otlp_endpoint = "http://otel-collector:4317"
otlp_protocol = "grpc"          # grpc | http
sample_rate = 0.1                # sample 10% of traces
service_name = "bext-production"

Chaque demande crée une étendue avec request_id, path, status et duration. Les spans enfants sont créés pour le rendu SSR, la recherche de cache, les hooks de plugin et les appels de proxy en amont, vous offrant ainsi une trace distribuée complète pour chaque requête.

Conseil

Surveillez render_pool_idle dans vos alertes. S'il atteint systématiquement 0, les requêtes SSR sont en file d'attente derrière le pool V8. Voir Dépannage : épuisement du pool V8 et Architecture du pool de rendu V8 pour des conseils de réglage.

En rapport#

  • Enregistrement — champs de journal JSON structurés et transfert vers Loki/ELK/Datadog
  • Dépannage — commandes de diagnostic et correctifs de problèmes par zone
  • Performance — cadre budgétaire, magasin d'historique et porte de régression
  • Mise à l'échelle — point de terminaison de vérification de l'état, Redis L2 et réglage du nombre de travailleurs
  • Architecture : pool de rendu V8 – rendre la topologie des nœuds de calcul et le comportement du pool
Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.