# Runbook — exploitation de la pile analytics

Procédures courtes, vérifiables. Toute commande ici a été exécutée au moins une fois.

## Contrôler l'état

```bash
pnpm telemetry:status          # conteneurs et ports
pnpm telemetry:logs            # 50 dernières lignes par service
pnpm telemetry:test            # vérification de bout en bout, par interrogation des données
```

`telemetry:test` est le seul contrôle qui prouve quelque chose : les trois autres montrent que les
processus tournent, pas que les données arrivent.

## Un fournisseur ne reçoit plus rien

1. Le conteneur tourne-t-il ? `pnpm telemetry:status`
2. Les événements sont-ils classés en robot ?
   ```bash
   docker logs compose_rybbit-backend_1 2>&1 | grep botDetectionTotals | tail -1
   ```
   Pour Umami, comparer le nombre de lignes :
   ```bash
   docker exec compose_umami-db_1 psql -U umami -d umami -tAc "select count(*) from website_event;"
   ```
3. La file applicative abandonne-t-elle ? Lire `droppedExhausted` dans `getStats()`.
4. Détail des causes connues : [troubleshooting.md](/analytics/exploitation/troubleshooting).

## Les journaux n'arrivent plus dans OpenObserve

Isoler le SDK du collecteur en envoyant un journal OTLP brut
([troubleshooting.md](/analytics/exploitation/troubleshooting)). Si le journal brut arrive et pas celui du SDK, vérifier
que `logs.getLogger()` renvoie un `Logger` et non un `ProxyLogger`.

## Disque sous pression

```bash
sudo du -xhd1 /var/lib/docker/volumes | sort -hr | head
```

Sans `sudo`, `du` ne voit pas `/var/lib/docker` et donne un total trompeur. Réduire la rétention
plutôt que supprimer un volume. ClickHouse est le plus gros poste.

## Repartir de zéro

```bash
pnpm telemetry:reset                       # arrêt et suppression des volumes
pnpm analytics:up:all
node infra/analytics/scripts/openobserve-auth.mjs
node infra/analytics/scripts/provision-umami.mjs
node infra/analytics/scripts/provision-matomo.mjs
node infra/analytics/scripts/provision-rybbit.mjs
pnpm telemetry:test
```

Les scripts de provisionnement sont idempotents : les relancer sur une pile existante réutilise
comptes et sites, et régénère seulement les jetons.

## Après un build de l'application

```bash
pnpm analytics:check-bundle .next-saclay   # aucun secret dans le bundle navigateur
curl -s http://localhost:3005/sitemap.xml | grep -m1 '<loc>'   # pas de localhost en production
```

## Tout arrêter

```bash
pnpm telemetry:down     # volumes conservés
```
