Configuration

Le SDK se configure entièrement via des variables d'environnement, fusionnées dans l'espace de configuration monitor. Publier config/monitor.php est optionnel (voir Installation).

Configuration minimale

Ajoutez ce qui suit au .env de votre application :

dotenv
MONITOR_ENABLED=true
MONITOR_URL=https://monitor.example.com
MONITOR_KEY=votre-cle-api-projet
  • MONITOR_URL est l'URL de base de votre serveur Quiet Guard (sans chemin final: le SDK ajoute lui-même /api/v1/...).
  • MONITOR_KEY est la clé d'API par projet générée dans le dashboard Quiet Guard. Elle n'est affichée qu'une seule fois, à la création du projet. Consultez la documentation du serveur pour savoir comment créer les projets et les clés.

Lorsque MONITOR_URL ou MONITOR_KEY est vide, le SDK reste totalement silencieux, il n'envoie jamais rien et ne lève jamais d'erreur.

Toutes les options

Variable d'env.Clé de configDéfautDescription
MONITOR_ENABLEDmonitor.enabledtrueInterrupteur principal. À false, aucune donnée ne quitte l'application.
MONITOR_URLmonitor.urlnullURL de base du serveur Quiet Guard.
MONITOR_KEYmonitor.keynullClé d'API par projet (envoyée comme token Bearer).
MONITOR_ENVIRONMENTSmonitor.environmentsproduction,stagingListe blanche, séparée par des virgules, des environnements depuis lesquels reporter. Vide = reporter depuis tous les environnements.
monitor.ignore_paths[]Chemins de requête dont les exceptions ne sont jamais reportées, dans la syntaxe Illuminate\Http\Request::is().
MONITOR_RELEASEmonitor.releasenullIdentifiant de la version déployée (SHA git ou tag) attaché aux événements.
MONITOR_TIMEOUTmonitor.timeout3Timeout HTTP en secondes pour les appels d'ingestion.
MONITOR_QUEUEmonitor.queuefalsefalse envoie de façon synchrone, true place les rapports dans la connexion de file par défaut de l'application, un nom de connexion les place dans cette connexion.
MONITOR_TRACE_LIMITmonitor.trace_limit0Nombre maximal de frames de pile envoyés par exception. 0 (défaut) envoie la trace complète ; fixez un nombre de frames uniquement pour alléger les payloads.
MONITOR_LOGS_ENABLEDmonitor.logs.enabledfalseTransmission opt-in des logs applicatifs. Voir Logs applicatifs.
MONITOR_LOG_LEVELmonitor.logs.levelwarningNiveau PSR-3 minimum à transmettre.
MONITOR_LOGS_MAX_BATCHmonitor.logs.max_batch200Nombre maximal d'entrées de log bufferisées avant un envoi anticipé.
monitor.scrubvoir ci-dessousClés de requête/contexte dont les valeurs sont masquées avant tout envoi.
monitor.redactemail, iban, nir, card, phoneFormes de valeurs masquées où qu'elles se trouvent, y compris dans le texte d'un message. Voir Remontée d'exceptions.
monitor.redact_custom[]Vos propres formes, sous la forme libellé => motif PCRE.

Environnements

Par défaut, le SDK ne reporte que depuis production et staging. Autrement dit, en local rien n'est envoyé tant que vous ne modifiez pas la liste :

dotenv
# Reporter depuis tous les environnements
MONITOR_ENVIRONMENTS=

# Ou ajouter local le temps de tester l'intégration
MONITOR_ENVIRONMENTS=production,staging,local

Le contrôle s'appuie sur app()->environment() de Laravel, c'est-à-dire la valeur de votre APP_ENV.

Release

Renseignez MONITOR_RELEASE au moment du déploiement pour que le serveur puisse rattacher les incidents à un déploiement précis et les corréler aux commits :

dotenv
MONITOR_RELEASE=${GIT_SHA}

Un SHA hexadécimal permet au serveur de relier la release d'un incident au commit synchronisé correspondant.

Envoi asynchrone

Par défaut, les rapports sont envoyés de façon synchrone pendant la requête, dans la limite de MONITOR_TIMEOUT. Pour sortir ce travail du cycle de vie de la requête, placez-le dans une file :

dotenv
# Utiliser une connexion de file précise
MONITOR_QUEUE=redis

# Ou la connexion par défaut
MONITOR_QUEUE=true

Les rapports sont alors dispatchés comme jobs en file (SendExceptionToMonitor, SendLogsToMonitor) ; un worker de file doit donc tourner.

Chemins de requête ignorés

Par défaut, toute exception est reportée, où qu'elle survienne. Renseignez ignore_paths avec une liste de chemins de requête dont les exceptions ne sont jamais reportées, dans la syntaxe acceptée par le Illuminate\Http\Request::is() de Laravel :

php
'ignore_paths' => ['api/v1/*'],

Vide par défaut. Une commande console porte une requête factice dont le chemin est /, qui ne correspond à aucun de ces motifs : ignore_paths ne fait donc jamais taire un job en file ni une tâche planifiée, seulement les requêtes HTTP. Cela ne concerne que les exceptions, pas les logs.

Cette option existe pour une application qui héberge son propre endpoint de supervision : les exceptions levées en le servant ne doivent pas lui être reportées en retour.

Clés masquées

La liste monitor.scrub par défaut masque toute clé de requête/contexte dont le nom contient l'un de ces termes (insensible à la casse, récursif) :

password, password_confirmation, passphrase, token, secret,
authorization, cookie, php_auth_pw, api_key, access_token,
referer, referrer,
x-forwarded-for, x-real-ip, cf-connecting-ip,
true-client-ip, x-client-ip, forwarded

referer et referrer portent l'adresse de la page d'où vient le visiteur, et une URL est l'endroit où les applications placent leurs secrets à usage unique : un lien de désinscription, un téléchargement signé, une réinitialisation de mot de passe, un lien de partage. Le masquage se fait par le nom, parce que cette valeur n'a aucune forme qu'un masqueur de valeurs saurait reconnaître.

Les six derniers sont les en-têtes qui portent l'adresse IP du visiteur. Derrière un reverse proxy, ce qui est la topologie de production ordinaire, l'un d'eux contient l'adresse de la personne qui a déclenché l'erreur. C'est une donnée personnelle, et elle ne vous concerne pas vous mais vos visiteurs, qui n'ont rien choisi. Elle est donc masquée par défaut. Si vous disposez d'une base légale pour la conserver, retirez la ligne correspondante : la décision vous appartient, en votre qualité de responsable de traitement.

Pour l'étendre, publiez la config et modifiez le tableau scrub. Les valeurs masquées sont remplacées par [scrubbed]. Voir Remontée d'exceptions pour les détails.

Vous lisez la documentation Laravel SDK v1.0.