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.