Skip to content

Observability Gate Agent ​

Vérifie l'observabilité : logs structurés, corrélation, et gestion des erreurs attendues.

Quand l'utiliser ​

  • Mise en production d'une nouvelle feature
  • Ajout d'intégration avec service externe
  • Fonctionnalité critique pour le métier
  • Après incident pour améliorer la détection

Quand ne pas l'utiliser ​

  • Feature mineure sans impact métier
  • Modification UI uniquement
  • Environnement de développement

Entrées requises ​

EntréeSource
Feature SpecCas d'erreur métier
API ContractErreurs attendues
ArchitectureServices impliqués
Outils existantsLaravel logs, Sentry, etc.

Sortie attendue ​

markdown
## Observability Gate: [Nom du module]

### Logs structurés

| Événement | Niveau | Données loguées |
|-----------|--------|-----------------|
| Invoice created | info | invoice_id, user_id |
| PDF generation failed | error | invoice_id, error_message |
| Payment received | info | invoice_id, amount |

#### Exemple d'implémentation
```php
Log::info('Invoice created', [
    'invoice_id' => $invoice->id,
    'user_id' => $invoice->user_id,
    'amount' => $invoice->total_amount
]);

Corrélation ​

ÉlémentImplémentéMéthode
Request IDOui/NonHeader X-Request-ID
User IDOui/NonContext logger
Trace IDOui/NonSi APM en place

Erreurs attendues vs inattendues ​

ErreurTypeAction
Facture non trouvéeAttendueLog warning, return 404
PDF generation timeoutAttendueLog error, retry queue
DB connection lostInattendueLog critical, alerte

Alertes (si monitoring en place) ​

ConditionSeuilAction
Error rate> 5% sur 5 minNotification
Response time> 2s p95Notification

Dashboards (si applicable) ​

MétriqueVisualisation
Factures créées/jourCounter
Temps génération PDFHistogram

Actions correctives ​

  • [ ] [Log manquant à ajouter]

Verdict ​

[PASS | FAIL]


## Andon (STOP)

::: danger Conditions bloquantes
- Action métier critique sans log
- Erreur silencieuse (catch vide)
- Log avec données sensibles (mot de passe, token)
- Pas de distinction erreur attendue/inattendue
- Exception non catchée remontant au client
:::

## Checklist Done

```markdown
- [ ] Actions métier clés loguées (create, update, delete)
- [ ] Niveau de log approprié (info, warning, error)
- [ ] Contexte inclus (IDs, montants, statuts)
- [ ] Pas de donnée sensible dans les logs
- [ ] Erreurs attendues gérées proprement (4xx)
- [ ] Erreurs inattendues loguées avec stack trace
- [ ] Request ID propagé (si applicable)
- [ ] Alertes configurées sur erreurs critiques

Exemple minimal ​

markdown
## Observability Gate: Export PDF

### Logs structurés

| Événement | Niveau | Données loguées |
|-----------|--------|-----------------|
| PDF download requested | info | invoice_id, user_id |
| PDF generated | info | invoice_id, duration_ms |
| PDF generation failed | error | invoice_id, error |

#### Implémentation
```php
// InvoicePdfController.php
public function download(Invoice $invoice)
{
    Log::info('PDF download requested', [
        'invoice_id' => $invoice->id,
        'user_id' => auth()->id()
    ]);

    try {
        $startTime = microtime(true);
        $pdf = $this->pdfService->generate($invoice);

        Log::info('PDF generated', [
            'invoice_id' => $invoice->id,
            'duration_ms' => (microtime(true) - $startTime) * 1000
        ]);

        return $pdf->download();
    } catch (PdfGenerationException $e) {
        Log::error('PDF generation failed', [
            'invoice_id' => $invoice->id,
            'error' => $e->getMessage()
        ]);

        return response()->json([
            'message' => 'Impossible de générer le PDF'
        ], 500);
    }
}

Erreurs attendues vs inattendues ​

ErreurTypeAction
Facture non trouvéeAttendue404, pas de log error
Timeout DomPDFAttendueLog error, message user
Out of memoryInattendueLog critical

Verdict ​

PASS


## Outils recommandés

- **Laravel** : Monolog (natif), Laravel Telescope (dev)
- **Centralisation** : Papertrail, Logtail, ou fichiers rotatifs
- **APM** : Sentry, Bugsnag (error tracking)

## Référence

Voir [Route Logs Agent](/guides/route-logs-agent) pour la configuration des logs par route.