lecoffre-back-mini/docs/logs-backend.md
NicolasCantu 7c5c4ab334
All checks were successful
Build and Push to Registry / build-and-push (push) Successful in 49s
ci: docker_tag=dev-test
chore(nginx): logs vhost + X-Request-Id; docs: logs & ops; idnot: headers Accept+Contexte; backups: snapshot, ports & http flows
2025-09-25 09:18:58 +02:00

120 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Logs backend emplacements et points de contrôle
### Emplacements des logs
- **log courant**: `logs/backend.out`
- **PID du process Node**: `logs/backend.pid`
- **logs rotés**: `logs/backend_YYYYMMDD_HHMMSS.out`
- **logs de build (si utilisés)**: `logs/build_YYYYMMDD_HHMMSS.out`
### Rotation simple (manuelle)
- Renommer `logs/backend.out` en `logs/backend_YYYYMMDD_HHMMSS.out` avant relance.
### Démarrage / Arrêt
- Au démarrage, rechercher: `Server started on port 8080` (ou le port configuré).
- En arrêt/redémarrage, sassurer quaucun ancien process ne reste actif (voir `logs/backend.pid`).
### Suivi temps réel
- Suivre `logs/backend.out` en continu pour les scénarios de test.
- Capturer la fenêtre incluant: callback → échange de token → appels Annuaire.
### Points de contrôle à rechercher (IdNot)
- **Réception du callback**:
- `[IdNotCallback] incoming request` avec `code_present: true` et `state_present: true`.
- **Échange de token OIDC**:
- `Token exchange successful` avec `hasAccessToken`, `hasIdToken`.
- **Décodage JWT**:
- `JWT payload decoded` avec `hasProfileIdn`, `hasEntityIdn`.
- **Appels Annuaire (QUAL)** réponses JSON attendues:
- Absence des erreurs:
- `IdNot non-JSON response`
- `IdNot JSON parse failed`
- En cas derreur proxy, on peut voir `No context` (non-JSON).
- **Erreur applicative agrégée**:
- `IdNot authentication failed` ou un objet derreur avec `code: 'IDNOT_SERVICE_ERROR'`.
### Interprétation rapide
- **Si `No context` apparaît**:
- Vérifier lenvoi des en-têtes: `Accept: application/json` et en-tête de contexte IdNot (config via `IDNOT_CONTEXT_HEADER` / `IDNOT_CONTEXT_VALUE`).
- **Si `Token exchange failed`**:
- Vérifier `IDNOT_TOKEN_URL`, `IDNOT_CLIENT_ID`, `IDNOT_CLIENT_SECRET`, `IDNOT_REDIRECT_URI`.
- **Si `User not attached to an office`**:
- Le JWT ou les données Annuaire ne satisfont pas les règles métier attendues.
### Variables denvironnement utiles (rappel)
- **Bases dURL**:
- `IDNOT_API_BASE_URL` (données Annuaire, QUAL)
- `IDNOT_ANNUARY_BASE_URL` (Annuaire, endpoints personnes/entités)
- **Contexte QUAL (si requis par le proxy IdNot)**:
- `IDNOT_CONTEXT_HEADER` (ex: `X-Context`)
- `IDNOT_CONTEXT_VALUE` (valeur fournie par IdNot)
- **Auth OIDC**:
- `IDNOT_TOKEN_URL`, `IDNOT_CLIENT_ID`, `IDNOT_CLIENT_SECRET`, `IDNOT_REDIRECT_URI`
### Bonnes pratiques
- Toujours effectuer une rotation de `logs/backend.out` avant un test significatif.
- Conserver les logs datés pour linvestigation et la comparaison entre exécutions.
## Nginx emplacements et points de contrôle
### Emplacements
- Access log Nginx (vhost): `/var/log/nginx/dev3.4nkweb.com.access.log`
- Error log Nginx (vhost): `/var/log/nginx/dev3.4nkweb.com.error.log`
### Spécificités de configuration (fichier `confs/nginx/dev3.4nkweb.com.conf`)
- Ajout de `access_log` et `error_log` par vhost.
- Propagation dun identifiant de requête: `X-Request-Id: $request_id` vers lupstream.
- Ajout dun en-tête `X-Request-Id` sur les réponses pour faciliter la corrélation.
### Corrélation des requêtes
- Utiliser `X-Request-Id` pour faire le lien entre:
- les entrées dans `/var/log/nginx/dev3.4nkweb.com.access.log`,
- et les logs applicatifs dans `logs/backend.out` (recherchez `requestId` dans les logs Express sil est présent, sinon corrélez via timestamp, méthode et chemin).
### À surveiller côté Nginx
- Codes `4xx/5xx` dans laccess log sur `/idnot/callback`, `/api/...`, `/ws/`.
- Délai ou timeouts (`upstream timed out`) dans lerror log.
- Cohérence du schéma (`X-Forwarded-Proto`) et du host (`Host`) vers lupstream.
## Commandes utiles (ops locales)
### Backend Node
- Créer dossier logs (idempotent):
```bash
mkdir -p logs
```
- Rotation log backend courant:
```bash
if [ -f logs/backend.out ]; then mv -f logs/backend.out logs/backend_$(date +%Y%m%d_%H%M%S).out; fi
```
- Démarrage en arrière-plan avec redirection vers log et PID:
```bash
nohup node dist/server.js > logs/backend.out 2>&1 & echo $! > logs/backend.pid
```
- Arrêt du backend via PID:
```bash
kill $(cat logs/backend.pid)
```
- Suivi temps réel des logs backend:
```bash
tail -f logs/backend.out
```
### Nginx (local serveur)
- Recharger la configuration après modification:
```bash
sudo nginx -t && sudo systemctl reload nginx
```
- Suivi des logs Nginx:
```bash
sudo tail -f /var/log/nginx/dev3.4nkweb.com.access.log /var/log/nginx/dev3.4nkweb.com.error.log
```
## Dépannage
- Erreur lors de lécriture de `logs/backend.pid`:
- Assurez-vous que le dossier `logs/` existe avant le démarrage (`mkdir -p logs`).
- Vérifiez les droits décriture dans le répertoire du projet.
- Pas de corrélation évidente entre Nginx et backend:
- Utilisez `X-Request-Id` (présent côté Nginx) et rapprochez par timestamp/méthode/chemin côté backend.
- Erreurs IdNot "No context":
- Vérifier les en-têtes envoyés côté backend: `Accept: application/json` et les variables `IDNOT_CONTEXT_HEADER` / `IDNOT_CONTEXT_VALUE`.