Aller au contenu

Configuration

Le bundle se configure sous une unique arborescence monitor, par convention dans config/packages/monitor.yaml. Chaque valeur correspond directement aux types du cœur monitor-php que le bundle câble pour vous.

Référence complète

yaml
# config/packages/monitor.yaml
monitor:
    enabled: true
    url: '%env(MONITOR_URL)%'
    key: '%env(MONITOR_KEY)%'
    timeout: 3
    release: '%env(default::MONITOR_RELEASE)%'
    trace_limit: 0    # 0 = trace complète (défaut) ; une valeur positive tronque
    code_snippets: true    # lignes de source autour des frames de l'application ; false n'envoie que fichier et ligne
    environments: []
    scrub: ['password', 'password_confirmation', 'passphrase', 'token', 'signature', 'secret', 'authorization', 'cookie', 'referer', 'referrer', 'api_key']
    redact: ['email', 'iban', 'nir', 'card', 'phone']
    redact_custom: {}   # vos propres formes, sous la forme libellé: motif PCRE
    logs:
        enabled: false
        level: warning
        max_batch: 200

Options

CléTypeDéfautDescription
enabledbooltrueInterrupteur principal. Les services sont toujours définis, et false agit à l'exécution : rien n'est capturé et rien n'est envoyé. C'est cette définition systématique qui permet à config/packages/dev/monitor.yaml de poser enabled: false sans qu'un monolog.yaml référençant monitor.log_handler casse la compilation.
urlstringnullURL de base de votre serveur Quiet Guard. Les chemins d'endpoint y sont ajoutés ; un slash final est retiré. Vide ou absente, elle vaut le service hébergé https://quietguard.dev : une application qui l'utilise n'a que la clé à fournir.
keystringnullLe jeton d'API par projet, envoyé en Authorization: Bearer <key>.
timeoutint3Délai d'expiration du transport, par requête, en secondes.
releasestringnullIdentifiant de release optionnel (par ex. un SHA de commit) attaché au contexte des exceptions et des logs.
trace_limitint00 (le défaut) envoie la pile d'appels complète avec chaque exception ; une valeur positive tronque la charge utile à ce nombre de frames. Le site de levée, en tête de la pile depuis la version 0.3, compte pour une frame.
code_snippetsbooltrueEnvoie, avec chaque frame de l'application, les cinq lignes de source de part et d'autre de la sienne, lues dans le fichier qui a tourné. Jamais pour une dépendance ; une ligne qui nomme une clé de scrub et lui donne une valeur est masquée entière. false n'envoie que le fichier et la ligne.
environmentsliste de string[]Ne remonter que depuis ces environnements. Une liste vide signifie « tous les environnements ». Comparé à kernel.environment.
scrubliste de stringvoir ci-dessousClés de contexte dont les valeurs sont masquées avant l'envoi (récursif, insensible à la casse ; à partir de la version 0.3.1, un tiret y vaut un souligné).
redactliste de stringemail, iban, nir, card, phoneFormes de valeurs masquées où qu'elles se trouvent, texte d'un message et segments d'URL compris. Une liste vide désactive le masquage.
redact_customtable de string{}Vos propres formes, sous la forme libellé: motif PCRE. Un libellé customer_ref masque en [redacted:customer_ref].
logs.enabledboolfalseActive la transmission des logs. Le service handler est toujours enregistré tant que le bundle est activé ; à false, il ignore tous les enregistrements. Vous devez encore l'attacher à Monolog, voir Usage.
logs.levelstringwarningNiveau minimal capturé par le handler (un nom de niveau Monolog).
logs.max_batchint200Vide le tampon de logs vers le serveur dès qu'il atteint ce nombre d'enregistrements.

Clés de masquage par défaut

Lorsque vous ne définissez pas scrub, le bundle utilise :

password, password_confirmation, passphrase, token, signature, secret, authorization, cookie, referer,
referrer, api_key

Définir scrub remplace cette liste : pensez à y réinclure les valeurs par défaut que vous souhaitez conserver. À partir de la version 0.3.1, le masquage atteint aussi l'URL rapportée avec chaque exception, une valeur JSON écrite en chaîne, et les valeurs que porte le message d'un log quand il commence par une URL ou qu'il est du JSON : voir Usage.

Masquage par la forme de la valeur

scrub regarde le nom de la clé. Il ne voit jamais une adresse écrite dans le texte libre d'un message d'exception, dans un segment d'URL, ou dans un champ que quelqu'un a appelé reference. redact regarde la valeur, sur votre propre serveur, avant tout envoi, et il est actif par défaut avec les cinq formes.

Ce défaut s'appliquait déjà avant d'être déclaré ici, et c'est la raison de le dire clairement : le bundle masquait des valeurs qu'il ne documentait nulle part, et toute tentative de le configurer échouait à la compilation du conteneur avec Unrecognized option. Les deux clés font désormais partie de l'arborescence.

yaml
monitor:
    # Retirer les formes qui produisent des faux positifs sur vos données
    redact: ['email', 'iban', 'card']

    # Ou envoyer les charges telles quelles
    redact: []

    # Vos propres formes
    redact_custom:
        customer_ref: '/CUST-\d{6}/'

Les formes qui portent une clé de contrôle sont vérifiées et non simplement reconnues : une référence de commande à seize chiffres n'est pas prise pour un numéro de carte, et chaque masque nomme ce qu'il a caché ([redacted:email]), si bien que le message reste lisible.

Variables d'environnement

Rien ne vous oblige à utiliser des variables d'environnement, mais c'est le motif recommandé pour garder les secrets hors du dépôt. Un câblage typique :

yaml
# config/packages/monitor.yaml
monitor:
    url: '%env(MONITOR_URL)%'
    key: '%env(MONITOR_KEY)%'
    release: '%env(default::MONITOR_RELEASE)%'
    environments: ['prod']
dotenv
# .env.local
MONITOR_URL=https://monitor.example.com
MONITOR_KEY=votre-jeton-de-projet
MONITOR_RELEASE=

La forme %env(default::MONITOR_RELEASE)% retombe sur une valeur vide quand la variable n'est pas définie, et release reste donc simplement vide.

Restreindre les environnements

Par défaut (environments: []), le bundle remonte depuis tous les environnements, y compris dev. Pour ne remonter que depuis la production :

yaml
monitor:
    environments: ['prod']

L'event subscriber d'exception comme le handler de logs Monolog vérifient cette liste contre kernel.environment avant tout envoi : dans tout autre environnement, rien ne quitte votre application, ni exceptions ni logs.

Correspondance configuration / services

ConfigurationService construit
url, key, timeout, release, environments, trace_limit, code_snippets, redact, redact_custommonitor.config (Config)
scrubmonitor.scrubber (Scrubber)
trace_limit, release, code_snippetsmonitor.payload_builder (ExceptionPayloadBuilder)
enabledmonitor.exception_subscriber, qui reçoit l'interrupteur et l'applique à l'exécution
—monitor.http_client (CurlHttpClient), monitor.reporter (Reporter), qui prend le logger de l'application lorsqu'il existe
logs.*monitor.log_handler (MonitorHandler), toujours enregistré tant que le bundle est activé ; avec logs.enabled: false, il ignore tous les enregistrements, et un monolog.yaml qui le référence continue donc de compiler

Consultez Usage pour le comportement de ces services à l'exécution.

Vous lisez la documentation Symfony Bundle v1.0.