feat: centraliser tous les logs dans /var/log/veza avec rotation
- Configure LOG_DIR=/var/log/veza pour tous les services - Ajoute scripts de gestion des logs (setup, view, rotate) - Configure volume Docker partagé pour les logs - Logs organisés par service avec fichiers séparés pour les erreurs - Rotation automatique : 100MB, 10 backups, 30 jours, compression gzip - Documentation dans LOGGING.md et ENV_CONFIG.md Services configurés: - Backend API: backend-api.log, redis.log, db.log, rabbitmq.log - Chat Server: chat-server.log (à configurer) - Stream Server: stream-server.log (à configurer) Le backend API a déjà toute l'infrastructure de logging en place. Les serveurs chat et stream utiliseront LOG_DIR depuis l'environnement.
This commit is contained in:
parent
718265ad01
commit
17a04a6b2e
6 changed files with 797 additions and 0 deletions
74
ENV_CONFIG.md
Normal file
74
ENV_CONFIG.md
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
# Configuration des Variables d'Environnement
|
||||||
|
|
||||||
|
## Backend API
|
||||||
|
|
||||||
|
Pour activer le logging centralisé vers `/var/log/veza`, ajoutez ces variables à votre fichier `.env` :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Logging Configuration
|
||||||
|
LOG_DIR=/var/log/veza
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
```
|
||||||
|
|
||||||
|
Variables complètes recommandées :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Application
|
||||||
|
APP_ENV=development
|
||||||
|
APP_PORT=8080
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
LOG_DIR=/var/log/veza
|
||||||
|
|
||||||
|
# Database
|
||||||
|
DATABASE_URL=postgresql://veza:password@localhost:5432/veza
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
REDIS_URL=redis://localhost:6379
|
||||||
|
REDIS_ENABLE=true
|
||||||
|
|
||||||
|
# RabbitMQ
|
||||||
|
RABBITMQ_URL=amqp://veza:password@localhost:5672/%2f
|
||||||
|
RABBITMQ_ENABLE=true
|
||||||
|
|
||||||
|
# Security
|
||||||
|
JWT_SECRET=your-secret-key-here-change-in-production
|
||||||
|
CORS_ALLOWED_ORIGINS=http://localhost:3000
|
||||||
|
|
||||||
|
# Services
|
||||||
|
STREAM_SERVER_URL=http://localhost:8082
|
||||||
|
CHAT_SERVER_URL=http://localhost:8081
|
||||||
|
```
|
||||||
|
|
||||||
|
## Chat Server
|
||||||
|
|
||||||
|
Pour le serveur de chat, ajoutez :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOG_DIR=/var/log/veza
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
```
|
||||||
|
|
||||||
|
## Stream Server
|
||||||
|
|
||||||
|
Pour le serveur de streaming, ajoutez :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOG_DIR=/var/log/veza
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker Production
|
||||||
|
|
||||||
|
Les variables sont déjà configurées dans `docker-compose.prod.yml`. Assurez-vous de définir :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export DB_PASSWORD=your-db-password
|
||||||
|
export RABBITMQ_PASSWORD=your-rabbitmq-password
|
||||||
|
export JWT_SECRET=your-jwt-secret
|
||||||
|
```
|
||||||
|
|
||||||
|
Avant de lancer :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose -f docker-compose.prod.yml up -d
|
||||||
|
```
|
||||||
279
LOGGING.md
Normal file
279
LOGGING.md
Normal file
|
|
@ -0,0 +1,279 @@
|
||||||
|
# Gestion des Logs Veza
|
||||||
|
|
||||||
|
## Organisation des Logs
|
||||||
|
|
||||||
|
Tous les logs de l'application Veza sont centralisés dans `/var/log/veza/` avec une organisation par service.
|
||||||
|
|
||||||
|
### Structure des Fichiers
|
||||||
|
|
||||||
|
```
|
||||||
|
/var/log/veza/
|
||||||
|
├── backend-api.log # Tous les logs du backend API
|
||||||
|
├── backend-api-error.log # Erreurs uniquement du backend API
|
||||||
|
├── redis.log # Logs Redis
|
||||||
|
├── redis-error.log # Erreurs Redis
|
||||||
|
├── db.log # Logs base de données
|
||||||
|
├── db-error.log # Erreurs base de données
|
||||||
|
├── rabbitmq.log # Logs RabbitMQ
|
||||||
|
├── rabbitmq-error.log # Erreurs RabbitMQ
|
||||||
|
├── chat-server.log # Logs du serveur de chat
|
||||||
|
├── chat-server-error.log # Erreurs du serveur de chat
|
||||||
|
├── stream-server.log # Logs du serveur de streaming
|
||||||
|
└── stream-server-error.log # Erreurs du serveur de streaming
|
||||||
|
```
|
||||||
|
|
||||||
|
### Rotation Automatique
|
||||||
|
|
||||||
|
Les logs sont automatiquement rotés avec la configuration suivante :
|
||||||
|
- **Taille maximale** : 100 MB par fichier
|
||||||
|
- **Nombre de backups** : 10 fichiers conservés
|
||||||
|
- **Rétention** : 30 jours
|
||||||
|
- **Compression** : Les anciens fichiers sont compressés en `.gz`
|
||||||
|
|
||||||
|
Les fichiers rotés sont nommés avec un suffixe numérique :
|
||||||
|
- `backend-api.log.1.gz` (le plus récent)
|
||||||
|
- `backend-api.log.2.gz`
|
||||||
|
- ...
|
||||||
|
- `backend-api.log.10.gz` (le plus ancien)
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### Variables d'Environnement
|
||||||
|
|
||||||
|
Pour activer le logging vers `/var/log/veza`, configurez la variable d'environnement :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export LOG_DIR=/var/log/veza
|
||||||
|
```
|
||||||
|
|
||||||
|
Ajoutez cette ligne dans vos fichiers `.env` :
|
||||||
|
|
||||||
|
```env
|
||||||
|
# Répertoire de logs
|
||||||
|
LOG_DIR=/var/log/veza
|
||||||
|
|
||||||
|
# Niveau de log (DEBUG, INFO, WARN, ERROR)
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
```
|
||||||
|
|
||||||
|
### Permissions
|
||||||
|
|
||||||
|
Le répertoire `/var/log/veza` doit être accessible en écriture par l'utilisateur qui exécute les services.
|
||||||
|
|
||||||
|
Pour configurer les permissions :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo bash scripts/setup_logs.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou manuellement :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo mkdir -p /var/log/veza
|
||||||
|
sudo chown -R $USER:$USER /var/log/veza
|
||||||
|
sudo chmod 755 /var/log/veza
|
||||||
|
```
|
||||||
|
|
||||||
|
## Utilisation
|
||||||
|
|
||||||
|
### Visualiser les Logs
|
||||||
|
|
||||||
|
Le script `view_logs.sh` permet de visualiser facilement les logs :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Voir les logs du backend API
|
||||||
|
bash scripts/view_logs.sh backend-api
|
||||||
|
|
||||||
|
# Voir uniquement les erreurs
|
||||||
|
bash scripts/view_logs.sh backend-api --errors
|
||||||
|
|
||||||
|
# Suivre les logs en temps réel
|
||||||
|
bash scripts/view_logs.sh backend-api --follow
|
||||||
|
|
||||||
|
# Filtrer par pattern
|
||||||
|
bash scripts/view_logs.sh backend-api -g "ERROR"
|
||||||
|
|
||||||
|
# Afficher les 100 dernières lignes
|
||||||
|
bash scripts/view_logs.sh backend-api -n 100
|
||||||
|
|
||||||
|
# Vue d'ensemble de tous les services
|
||||||
|
bash scripts/view_logs.sh all
|
||||||
|
```
|
||||||
|
|
||||||
|
### Rotation Manuelle
|
||||||
|
|
||||||
|
Pour forcer la rotation des logs :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Roter tous les logs
|
||||||
|
bash scripts/rotate_logs.sh all
|
||||||
|
|
||||||
|
# Roter uniquement le backend API
|
||||||
|
bash scripts/rotate_logs.sh backend-api
|
||||||
|
```
|
||||||
|
|
||||||
|
### Commandes Utiles
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Voir la taille des fichiers de logs
|
||||||
|
du -h /var/log/veza/*.log
|
||||||
|
|
||||||
|
# Compter les erreurs dans les logs
|
||||||
|
grep -c "ERROR" /var/log/veza/backend-api.log
|
||||||
|
|
||||||
|
# Voir les logs en temps réel avec coloration
|
||||||
|
tail -f /var/log/veza/backend-api.log | grep --color=auto "ERROR\|WARN"
|
||||||
|
|
||||||
|
# Analyser les logs JSON (en production)
|
||||||
|
cat /var/log/veza/backend-api.log | jq '.level, .msg'
|
||||||
|
|
||||||
|
# Rechercher un pattern dans tous les logs
|
||||||
|
grep -r "user_id=123" /var/log/veza/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Format des Logs
|
||||||
|
|
||||||
|
### Développement
|
||||||
|
|
||||||
|
En mode développement, les logs utilisent un format console lisible :
|
||||||
|
|
||||||
|
```
|
||||||
|
2026-01-03T22:54:47+01:00 INFO Backend API démarré port=8080
|
||||||
|
2026-01-03T22:54:48+01:00 DEBUG Connexion Redis établie url=redis://localhost:6379
|
||||||
|
```
|
||||||
|
|
||||||
|
### Production
|
||||||
|
|
||||||
|
En mode production, les logs sont en JSON structuré pour faciliter l'analyse :
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"level": "info",
|
||||||
|
"ts": "2026-01-03T22:54:47.123Z",
|
||||||
|
"caller": "api/main.go:66",
|
||||||
|
"msg": "Backend API démarré",
|
||||||
|
"port": 8080,
|
||||||
|
"env": "production"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Monitoring et Alertes
|
||||||
|
|
||||||
|
### Surveiller les Erreurs
|
||||||
|
|
||||||
|
Pour être alerté en cas d'erreurs critiques :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Surveiller les fichiers d'erreurs
|
||||||
|
watch -n 10 'tail -n 20 /var/log/veza/*-error.log'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Agrégation de Logs (Optionnel)
|
||||||
|
|
||||||
|
Pour une installation en production, vous pouvez configurer l'agrégation vers un service externe (Loki, Elasticsearch, etc.) :
|
||||||
|
|
||||||
|
```env
|
||||||
|
LOG_AGGREGATION_ENABLED=true
|
||||||
|
LOG_AGGREGATION_ENDPOINT=http://loki:3100/loki/api/v1/push
|
||||||
|
LOG_AGGREGATION_BATCH_SIZE=100
|
||||||
|
LOG_AGGREGATION_FLUSH_INTERVAL=5s
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
Dans `docker-compose.prod.yml`, les logs sont montés via un volume partagé :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
veza_logs:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
o: bind
|
||||||
|
device: /var/log/veza
|
||||||
|
|
||||||
|
services:
|
||||||
|
backend:
|
||||||
|
volumes:
|
||||||
|
- veza_logs:/var/log/veza
|
||||||
|
environment:
|
||||||
|
- LOG_DIR=/var/log/veza
|
||||||
|
```
|
||||||
|
|
||||||
|
### Accès aux Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Voir les logs depuis le conteneur
|
||||||
|
docker exec veza_backend_prod tail -f /var/log/veza/backend-api.log
|
||||||
|
|
||||||
|
# Copier les logs vers l'hôte
|
||||||
|
docker cp veza_backend_prod:/var/log/veza ./logs-backup
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dépannage
|
||||||
|
|
||||||
|
### Les logs ne sont pas créés
|
||||||
|
|
||||||
|
1. Vérifier les permissions :
|
||||||
|
```bash
|
||||||
|
ls -ld /var/log/veza
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Vérifier la variable d'environnement :
|
||||||
|
```bash
|
||||||
|
echo $LOG_DIR
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Vérifier les logs de démarrage du service
|
||||||
|
|
||||||
|
### Espace disque insuffisant
|
||||||
|
|
||||||
|
1. Vérifier l'espace disponible :
|
||||||
|
```bash
|
||||||
|
df -h /var/log/veza
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Nettoyer les anciens logs :
|
||||||
|
```bash
|
||||||
|
# Supprimer les logs de plus de 30 jours
|
||||||
|
find /var/log/veza -name "*.gz" -mtime +30 -delete
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Réduire la rétention dans la configuration de rotation
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
|
||||||
|
Si l'écriture des logs impacte les performances :
|
||||||
|
|
||||||
|
1. Vérifier que la rotation est activée
|
||||||
|
2. Augmenter le niveau de log (passer de DEBUG à INFO)
|
||||||
|
3. Activer le sampling en production (déjà configuré)
|
||||||
|
|
||||||
|
## Sécurité
|
||||||
|
|
||||||
|
### Logs Sensibles
|
||||||
|
|
||||||
|
Les secrets et données sensibles sont automatiquement filtrés des logs :
|
||||||
|
- Mots de passe
|
||||||
|
- Tokens JWT
|
||||||
|
- Clés API
|
||||||
|
- Informations de carte bancaire
|
||||||
|
|
||||||
|
### Accès aux Logs
|
||||||
|
|
||||||
|
Limitez l'accès aux fichiers de logs :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Permissions recommandées
|
||||||
|
chmod 640 /var/log/veza/*.log
|
||||||
|
chown $USER:$USER /var/log/veza/*.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
Pour plus d'informations sur la configuration du logging, consultez :
|
||||||
|
- `veza-backend-api/internal/logging/logger.go`
|
||||||
|
- `veza-chat-server/src/structured_logging.rs`
|
||||||
|
- `veza-stream-server/src/logging.rs` (si applicable)
|
||||||
151
docker-compose.prod.yml
Normal file
151
docker-compose.prod.yml
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
services:
|
||||||
|
# --- INFRASTRUCTURE ---
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: veza_postgres_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: veza
|
||||||
|
POSTGRES_PASSWORD: ${DB_PASSWORD:-password}
|
||||||
|
POSTGRES_DB: veza
|
||||||
|
volumes:
|
||||||
|
- postgres_prod_data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "pg_isready -U veza" ]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
container_name: veza_redis_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
command: redis-server --save 60 1 --loglevel warning
|
||||||
|
volumes:
|
||||||
|
- redis_prod_data:/data
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD", "redis-cli", "ping" ]
|
||||||
|
interval: 10s
|
||||||
|
|
||||||
|
rabbitmq:
|
||||||
|
image: rabbitmq:3-management-alpine
|
||||||
|
container_name: veza_rabbitmq_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
RABBITMQ_DEFAULT_USER: veza
|
||||||
|
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-password}
|
||||||
|
volumes:
|
||||||
|
- rabbitmq_prod_data:/var/lib/rabbitmq
|
||||||
|
healthcheck:
|
||||||
|
test: rabbitmq-diagnostics -q ping
|
||||||
|
interval: 20s
|
||||||
|
|
||||||
|
clamav:
|
||||||
|
image: clamav/clamav:latest
|
||||||
|
container_name: veza_clamav_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 2G # ClamAV requires significant RAM for virus databases
|
||||||
|
|
||||||
|
# --- APPLICATION SERVICES ---
|
||||||
|
|
||||||
|
backend:
|
||||||
|
build:
|
||||||
|
context: ./veza-backend-api
|
||||||
|
dockerfile: Dockerfile.production
|
||||||
|
container_name: veza_backend_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- APP_ENV=production
|
||||||
|
- DB_HOST=postgres
|
||||||
|
- DB_PORT=5432
|
||||||
|
- DB_USER=veza
|
||||||
|
- DB_PASSWORD=${DB_PASSWORD:-password}
|
||||||
|
- DB_NAME=veza
|
||||||
|
- REDIS_URL=redis:6379
|
||||||
|
- RABBITMQ_URL=amqp://veza:${RABBITMQ_PASSWORD:-password}@rabbitmq:5672/%2f
|
||||||
|
- JWT_SECRET=${JWT_SECRET}
|
||||||
|
- ENABLE_CLAMAV=true
|
||||||
|
- CLAMAV_ADDRESS=clamav:3310
|
||||||
|
- CLAMAV_REQUIRED=true
|
||||||
|
- LOG_DIR=/var/log/veza
|
||||||
|
- LOG_LEVEL=INFO
|
||||||
|
volumes:
|
||||||
|
- veza_logs:/var/log/veza
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
redis:
|
||||||
|
condition: service_healthy
|
||||||
|
rabbitmq:
|
||||||
|
condition: service_healthy
|
||||||
|
clamav:
|
||||||
|
condition: service_started
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
|
||||||
|
chat:
|
||||||
|
build:
|
||||||
|
context: ./veza-chat-server
|
||||||
|
dockerfile: Dockerfile.production
|
||||||
|
container_name: veza_chat_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- APP_ENV=production
|
||||||
|
- DATABASE_URL=postgres://veza:${DB_PASSWORD:-password}@postgres:5432/veza
|
||||||
|
- REDIS_URL=redis://redis:6379
|
||||||
|
- LOG_DIR=/var/log/veza
|
||||||
|
- LOG_LEVEL=INFO
|
||||||
|
volumes:
|
||||||
|
- veza_logs:/var/log/veza
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
ports:
|
||||||
|
- "8081:8081"
|
||||||
|
|
||||||
|
stream:
|
||||||
|
build:
|
||||||
|
context: ./veza-stream-server
|
||||||
|
dockerfile: Dockerfile.production
|
||||||
|
container_name: veza_stream_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- APP_ENV=production
|
||||||
|
- DATABASE_URL=postgres://veza:${DB_PASSWORD:-password}@postgres:5432/veza
|
||||||
|
- RABBITMQ_URL=amqp://veza:${RABBITMQ_PASSWORD:-password}@rabbitmq:5672/%2f
|
||||||
|
- LOG_DIR=/var/log/veza
|
||||||
|
- LOG_LEVEL=INFO
|
||||||
|
volumes:
|
||||||
|
- veza_logs:/var/log/veza
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
rabbitmq:
|
||||||
|
condition: service_healthy
|
||||||
|
ports:
|
||||||
|
- "8082:8082"
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
build:
|
||||||
|
context: ./apps/web
|
||||||
|
dockerfile: Dockerfile.production
|
||||||
|
container_name: veza_frontend_prod
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- VITE_API_URL=http://localhost:8080/api/v1
|
||||||
|
ports:
|
||||||
|
- "3000:80"
|
||||||
|
depends_on:
|
||||||
|
- backend
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres_prod_data:
|
||||||
|
redis_prod_data:
|
||||||
|
rabbitmq_prod_data:
|
||||||
|
veza_logs:
|
||||||
|
|
||||||
|
|
||||||
101
scripts/rotate_logs.sh
Executable file
101
scripts/rotate_logs.sh
Executable file
|
|
@ -0,0 +1,101 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Script pour gérer la rotation manuelle des logs Veza
|
||||||
|
# Usage: bash scripts/rotate_logs.sh [service]
|
||||||
|
#
|
||||||
|
# Services disponibles:
|
||||||
|
# backend-api, redis, db, rabbitmq, chat-server, stream-server, all
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
LOG_DIR="/var/log/veza"
|
||||||
|
SERVICE="${1:-all}"
|
||||||
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||||
|
|
||||||
|
rotate_file() {
|
||||||
|
local file="$1"
|
||||||
|
local label="$2"
|
||||||
|
|
||||||
|
if [ ! -f "$file" ]; then
|
||||||
|
echo "⚠️ Fichier $file non trouvé, ignoré"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local size=$(du -h "$file" | cut -f1)
|
||||||
|
echo "🔄 Rotation de $label ($size)..."
|
||||||
|
|
||||||
|
# Créer une copie avec timestamp
|
||||||
|
cp "$file" "${file}.${TIMESTAMP}"
|
||||||
|
|
||||||
|
# Compresser l'ancien fichier
|
||||||
|
gzip "${file}.${TIMESTAMP}"
|
||||||
|
|
||||||
|
# Vider le fichier actuel
|
||||||
|
> "$file"
|
||||||
|
|
||||||
|
echo "✅ $label roté vers ${file}.${TIMESTAMP}.gz"
|
||||||
|
}
|
||||||
|
|
||||||
|
case $SERVICE in
|
||||||
|
backend-api)
|
||||||
|
rotate_file "$LOG_DIR/backend-api.log" "Backend API"
|
||||||
|
rotate_file "$LOG_DIR/backend-api-error.log" "Backend API Errors"
|
||||||
|
;;
|
||||||
|
redis)
|
||||||
|
rotate_file "$LOG_DIR/redis.log" "Redis"
|
||||||
|
rotate_file "$LOG_DIR/redis-error.log" "Redis Errors"
|
||||||
|
;;
|
||||||
|
db)
|
||||||
|
rotate_file "$LOG_DIR/db.log" "Database"
|
||||||
|
rotate_file "$LOG_DIR/db-error.log" "Database Errors"
|
||||||
|
;;
|
||||||
|
rabbitmq)
|
||||||
|
rotate_file "$LOG_DIR/rabbitmq.log" "RabbitMQ"
|
||||||
|
rotate_file "$LOG_DIR/rabbitmq-error.log" "RabbitMQ Errors"
|
||||||
|
;;
|
||||||
|
chat-server)
|
||||||
|
rotate_file "$LOG_DIR/chat-server.log" "Chat Server"
|
||||||
|
rotate_file "$LOG_DIR/chat-server-error.log" "Chat Server Errors"
|
||||||
|
;;
|
||||||
|
stream-server)
|
||||||
|
rotate_file "$LOG_DIR/stream-server.log" "Stream Server"
|
||||||
|
rotate_file "$LOG_DIR/stream-server-error.log" "Stream Server Errors"
|
||||||
|
;;
|
||||||
|
all)
|
||||||
|
echo "🔄 Rotation de tous les logs Veza..."
|
||||||
|
echo ""
|
||||||
|
rotate_file "$LOG_DIR/backend-api.log" "Backend API"
|
||||||
|
rotate_file "$LOG_DIR/backend-api-error.log" "Backend API Errors"
|
||||||
|
rotate_file "$LOG_DIR/redis.log" "Redis"
|
||||||
|
rotate_file "$LOG_DIR/redis-error.log" "Redis Errors"
|
||||||
|
rotate_file "$LOG_DIR/db.log" "Database"
|
||||||
|
rotate_file "$LOG_DIR/db-error.log" "Database Errors"
|
||||||
|
rotate_file "$LOG_DIR/rabbitmq.log" "RabbitMQ"
|
||||||
|
rotate_file "$LOG_DIR/rabbitmq-error.log" "RabbitMQ Errors"
|
||||||
|
rotate_file "$LOG_DIR/chat-server.log" "Chat Server"
|
||||||
|
rotate_file "$LOG_DIR/chat-server-error.log" "Chat Server Errors"
|
||||||
|
rotate_file "$LOG_DIR/stream-server.log" "Stream Server"
|
||||||
|
rotate_file "$LOG_DIR/stream-server-error.log" "Stream Server Errors"
|
||||||
|
echo ""
|
||||||
|
echo "✅ Rotation terminée!"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "❌ Service inconnu: $SERVICE"
|
||||||
|
echo ""
|
||||||
|
echo "Services disponibles:"
|
||||||
|
echo " - backend-api"
|
||||||
|
echo " - redis"
|
||||||
|
echo " - db"
|
||||||
|
echo " - rabbitmq"
|
||||||
|
echo " - chat-server"
|
||||||
|
echo " - stream-server"
|
||||||
|
echo " - all"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📊 Fichiers de logs actuels:"
|
||||||
|
ls -lh "$LOG_DIR"/*.log 2>/dev/null || echo "Aucun fichier actif"
|
||||||
|
echo ""
|
||||||
|
echo "📦 Archives compressées:"
|
||||||
|
ls -lh "$LOG_DIR"/*.gz 2>/dev/null || echo "Aucune archive"
|
||||||
41
scripts/setup_logs.sh
Executable file
41
scripts/setup_logs.sh
Executable file
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Script pour configurer le répertoire de logs Veza
|
||||||
|
# Usage: sudo bash scripts/setup_logs.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
LOG_DIR="/var/log/veza"
|
||||||
|
USER="${SUDO_USER:-$USER}"
|
||||||
|
|
||||||
|
echo "🔧 Configuration du répertoire de logs Veza..."
|
||||||
|
|
||||||
|
# Créer le répertoire s'il n'existe pas
|
||||||
|
if [ ! -d "$LOG_DIR" ]; then
|
||||||
|
echo "📁 Création du répertoire $LOG_DIR..."
|
||||||
|
mkdir -p "$LOG_DIR"
|
||||||
|
else
|
||||||
|
echo "✅ Le répertoire $LOG_DIR existe déjà"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configurer les permissions
|
||||||
|
echo "🔐 Configuration des permissions..."
|
||||||
|
chown -R "$USER:$USER" "$LOG_DIR"
|
||||||
|
chmod 755 "$LOG_DIR"
|
||||||
|
|
||||||
|
# Vérifier les permissions
|
||||||
|
echo "📋 Vérification des permissions:"
|
||||||
|
ls -ld "$LOG_DIR"
|
||||||
|
|
||||||
|
# Créer un fichier .gitkeep pour garder le répertoire dans git
|
||||||
|
touch "$LOG_DIR/.gitkeep"
|
||||||
|
|
||||||
|
echo "✅ Configuration terminée!"
|
||||||
|
echo ""
|
||||||
|
echo "Le répertoire $LOG_DIR est prêt à recevoir les logs."
|
||||||
|
echo "Les services Veza écriront leurs logs dans ce répertoire."
|
||||||
|
echo ""
|
||||||
|
echo "Organisation des logs:"
|
||||||
|
echo " - Backend API: backend-api.log, redis.log, db.log, rabbitmq.log"
|
||||||
|
echo " - Chat Server: chat-server.log"
|
||||||
|
echo " - Stream Server: stream-server.log"
|
||||||
|
echo " - Fichiers *-error.log contiennent uniquement les erreurs"
|
||||||
151
scripts/view_logs.sh
Executable file
151
scripts/view_logs.sh
Executable file
|
|
@ -0,0 +1,151 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Script pour visualiser les logs Veza
|
||||||
|
# Usage: bash scripts/view_logs.sh [service] [options]
|
||||||
|
#
|
||||||
|
# Services disponibles:
|
||||||
|
# backend-api, redis, db, rabbitmq, chat-server, stream-server, all
|
||||||
|
#
|
||||||
|
# Options:
|
||||||
|
# -f, --follow Suivre les logs en temps réel (tail -f)
|
||||||
|
# -e, --errors Afficher uniquement les erreurs
|
||||||
|
# -n NUM Nombre de lignes à afficher (défaut: 50)
|
||||||
|
# -g PATTERN Filtrer par pattern (grep)
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
LOG_DIR="/var/log/veza"
|
||||||
|
SERVICE="${1:-all}"
|
||||||
|
FOLLOW=false
|
||||||
|
ERRORS_ONLY=false
|
||||||
|
LINES=50
|
||||||
|
GREP_PATTERN=""
|
||||||
|
|
||||||
|
# Parser les options
|
||||||
|
shift || true
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-f|--follow)
|
||||||
|
FOLLOW=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-e|--errors)
|
||||||
|
ERRORS_ONLY=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-n)
|
||||||
|
LINES="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-g)
|
||||||
|
GREP_PATTERN="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Option inconnue: $1"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Fonction pour afficher les logs d'un fichier
|
||||||
|
view_log() {
|
||||||
|
local file="$1"
|
||||||
|
local label="$2"
|
||||||
|
|
||||||
|
if [ ! -f "$file" ]; then
|
||||||
|
echo "⚠️ Fichier $file non trouvé"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📋 === $label ==="
|
||||||
|
|
||||||
|
if [ "$FOLLOW" = true ]; then
|
||||||
|
if [ -n "$GREP_PATTERN" ]; then
|
||||||
|
tail -f "$file" | grep --color=auto "$GREP_PATTERN"
|
||||||
|
else
|
||||||
|
tail -f "$file"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ -n "$GREP_PATTERN" ]; then
|
||||||
|
tail -n "$LINES" "$file" | grep --color=auto "$GREP_PATTERN"
|
||||||
|
else
|
||||||
|
tail -n "$LINES" "$file"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Déterminer quels fichiers afficher
|
||||||
|
case $SERVICE in
|
||||||
|
backend-api)
|
||||||
|
if [ "$ERRORS_ONLY" = true ]; then
|
||||||
|
view_log "$LOG_DIR/backend-api-error.log" "Backend API - Erreurs"
|
||||||
|
else
|
||||||
|
view_log "$LOG_DIR/backend-api.log" "Backend API - Tous les logs"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
redis)
|
||||||
|
if [ "$ERRORS_ONLY" = true ]; then
|
||||||
|
view_log "$LOG_DIR/redis-error.log" "Redis - Erreurs"
|
||||||
|
else
|
||||||
|
view_log "$LOG_DIR/redis.log" "Redis - Tous les logs"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
db)
|
||||||
|
if [ "$ERRORS_ONLY" = true ]; then
|
||||||
|
view_log "$LOG_DIR/db-error.log" "Database - Erreurs"
|
||||||
|
else
|
||||||
|
view_log "$LOG_DIR/db.log" "Database - Tous les logs"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
rabbitmq)
|
||||||
|
if [ "$ERRORS_ONLY" = true ]; then
|
||||||
|
view_log "$LOG_DIR/rabbitmq-error.log" "RabbitMQ - Erreurs"
|
||||||
|
else
|
||||||
|
view_log "$LOG_DIR/rabbitmq.log" "RabbitMQ - Tous les logs"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
chat-server)
|
||||||
|
if [ "$ERRORS_ONLY" = true ]; then
|
||||||
|
view_log "$LOG_DIR/chat-server-error.log" "Chat Server - Erreurs"
|
||||||
|
else
|
||||||
|
view_log "$LOG_DIR/chat-server.log" "Chat Server - Tous les logs"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
stream-server)
|
||||||
|
if [ "$ERRORS_ONLY" = true ]; then
|
||||||
|
view_log "$LOG_DIR/stream-server-error.log" "Stream Server - Erreurs"
|
||||||
|
else
|
||||||
|
view_log "$LOG_DIR/stream-server.log" "Stream Server - Tous les logs"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
all)
|
||||||
|
echo "📊 === Vue d'ensemble des logs Veza ==="
|
||||||
|
echo ""
|
||||||
|
if [ "$ERRORS_ONLY" = true ]; then
|
||||||
|
view_log "$LOG_DIR/backend-api-error.log" "Backend API - Erreurs"
|
||||||
|
view_log "$LOG_DIR/redis-error.log" "Redis - Erreurs"
|
||||||
|
view_log "$LOG_DIR/db-error.log" "Database - Erreurs"
|
||||||
|
view_log "$LOG_DIR/rabbitmq-error.log" "RabbitMQ - Erreurs"
|
||||||
|
view_log "$LOG_DIR/chat-server-error.log" "Chat Server - Erreurs"
|
||||||
|
view_log "$LOG_DIR/stream-server-error.log" "Stream Server - Erreurs"
|
||||||
|
else
|
||||||
|
echo "💡 Astuce: Utilisez -e pour voir uniquement les erreurs"
|
||||||
|
echo ""
|
||||||
|
ls -lh "$LOG_DIR"/*.log 2>/dev/null || echo "Aucun fichier de log trouvé"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "❌ Service inconnu: $SERVICE"
|
||||||
|
echo ""
|
||||||
|
echo "Services disponibles:"
|
||||||
|
echo " - backend-api"
|
||||||
|
echo " - redis"
|
||||||
|
echo " - db"
|
||||||
|
echo " - rabbitmq"
|
||||||
|
echo " - chat-server"
|
||||||
|
echo " - stream-server"
|
||||||
|
echo " - all (vue d'ensemble)"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Loading…
Reference in a new issue