Files
dashboard/RETENTION_POLICY.md
SOC Analyst ee2b24b277 fix: Subnet investigation - Récupération des user-agents depuis view_dashboard_entities
- Utilisation de 2 requêtes séparées + fusion en Python
- 1ère requête: ml_detected_anomalies pour les détections récentes
- 2ème requête: view_dashboard_entities avec IN clause pour les user-agents
- La clause IN permet d'utiliser l'index ClickHouse (splitByChar ne l'utilise pas)
- PREWHERE optimise les performances de requête

Problème résolu:
- unique_ua était toujours à 0 car la jointure LEFT JOIN ne fonctionnait pas
- La solution avec IN clause fonctionne car elle utilise l'index sur entity_value

Testé avec 141.98.11.0/24:
- 5 IPs, 8 détections, 65 user-agents uniques
- 141.98.11.209: 68 user-agents différents

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-15 19:41:48 +01:00

244 lines
6.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.

# 📅 Modification de la Politique de Rétention
## 🎯 Objectif
Augmenter la durée de conservation des données dans ClickHouse pour pouvoir investiguer des incidents plus anciens.
---
## 📊 Durées de rétention actuelles
| Table / Vue | Ancien TTL | Nouveau TTL | Fichier |
|-------------|------------|-------------|---------|
| `view_dashboard_entities` | 30 jours | **90 jours** | `deploy_dashboard_entities_view.sql` |
| `view_dashboard_user_agents` | 7 jours | **90 jours** | `deploy_user_agents_view.sql` |
| `audit_logs` | 90 jours | 90 jours | `deploy_audit_logs_table.sql` |
| `ml_detected_anomalies` | ~1-6h* | **30 jours** (recommandé) | `bot_detector_ai` |
*La table `ml_detected_anomalies` est gérée par le service `bot_detector_ai`
---
## 🔧 Méthode 1: Appliquer sur tables existantes (RECOMMANDÉ)
### Étape 1: Exécuter le script SQL
```bash
clickhouse-client --host test-sdv-anubis.sdv.fr --port 8123 \
--user admin --password SuperPassword123! \
< update_retention_policy.sql
```
### Étape 2: Vérifier les modifications
```sql
SELECT
name,
engine,
create_table_query
FROM system.tables
WHERE database = 'mabase_prod'
AND name LIKE 'view_dashboard%'
FORMAT Vertical;
```
### Étape 3: (Optionnel) Forcer l'application du TTL
```sql
-- Attention: Peut prendre plusieurs minutes
OPTIMIZE TABLE mabase_prod.view_dashboard_entities FINAL;
OPTIMIZE TABLE mabase_prod.view_dashboard_user_agents FINAL;
```
---
## 🔧 Méthode 2: Recréer les tables avec le nouveau TTL
### Pour `view_dashboard_entities`
```bash
clickhouse-client --host test-sdv-anubis.sdv.fr --port 8123 \
--user admin --password SuperPassword123! \
--database mabase_prod \
< deploy_dashboard_entities_view.sql
```
### Pour `view_dashboard_user_agents`
```bash
clickhouse-client --host test-sdv-anubis.sdv.fr --port 8123 \
--user admin --password SuperPassword123! \
--database mabase_prod \
< deploy_user_agents_view.sql
```
---
## 🔧 Méthode 3: Modifier `ml_detected_anomalies`
Cette table est gérée par le service `bot_detector_ai`. Deux options :
### Option A: Modification directe (si accès)
```sql
-- Vérifier le TTL actuel
SHOW CREATE TABLE mabase_prod.ml_detected_anomalies;
-- Modifier le TTL (exemple: 30 jours)
ALTER TABLE mabase_prod.ml_detected_anomalies
MODIFY TTL detected_at + INTERVAL 30 DAY;
-- Appliquer immédiatement
OPTIMIZE TABLE mabase_prod.ml_detected_anomalies FINAL;
```
### Option B: Modifier la configuration de bot_detector_ai
Dans le fichier de configuration de `bot_detector_ai` (probablement `config.yaml` ou `settings.py`):
```yaml
# Exemple de configuration
clickhouse:
retention_days: 30 # Au lieu de 1 ou 7
```
Puis redémarrer le service :
```bash
docker compose restart bot_detector_ai
```
---
## 📈 Impact sur le stockage
### Estimation de l'augmentation
| Table | Données/jour | 30 jours → 90 jours | Impact |
|-------|--------------|---------------------|--------|
| `view_dashboard_entities` | ~100 MB | ×3 | +200 MB |
| `view_dashboard_user_agents` | ~50 MB | ×13 | +600 MB |
| `ml_detected_anomalies` | ~1 GB | ×30 | +29 GB |
**Total estimé:** +30 GB pour 90 jours de rétention
### Vérifier l'espace disque actuel
```sql
SELECT
table,
formatReadableSize(sum(data_compressed_bytes)) AS compressed_size,
formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_size,
count() AS rows
FROM system.parts
WHERE database = 'mabase_prod'
AND table LIKE 'view_dashboard%'
GROUP BY table
ORDER BY compressed_size DESC;
```
---
## ✅ Vérification après modification
### Test 1: Subnet ancien (ex: 212.30.36.0/24)
```bash
# Via API
curl "http://192.168.1.2:8000/api/entities/subnet/212.30.36.0/24?hours=2160"
# Via ClickHouse
SELECT count()
FROM mabase_prod.view_dashboard_entities
WHERE entity_type = 'ip'
AND entity_value LIKE '212.30.36.%'
AND log_date >= now() - INTERVAL 90 DAY;
```
### Test 2: Vérifier les dates minimales
```sql
-- Date la plus ancienne dans view_dashboard_entities
SELECT min(log_date) AS oldest_date
FROM mabase_prod.view_dashboard_entities;
-- Date la plus ancienne dans view_dashboard_user_agents
SELECT min(log_date) AS oldest_date
FROM mabase_prod.view_dashboard_user_agents;
-- Date la plus ancienne dans ml_detected_anomalies
SELECT min(detected_at) AS oldest_date
FROM mabase_prod.ml_detected_anomalies;
```
---
## 🚨 Points d'attention
### 1. Espace disque
Vérifiez l'espace disque disponible avant d'augmenter la rétention :
```bash
df -h /var/lib/clickhouse
```
### 2. Performance des requêtes
Plus de données = requêtes plus lentes. Solutions :
- Ajouter des index
- Utiliser des agrégations pré-calculées
- Partitionner par mois (déjà fait)
### 3. Nettoyage automatique
ClickHouse applique le TTL automatiquement pendant les opérations de merge. Les données ne sont pas supprimées instantanément.
### 4. Backup
Faire un backup avant de modifier les tables :
```bash
clickhouse-backup create mabase_prod_backup_$(date +%Y%m%d)
```
---
## 📚 Références
- [ClickHouse TTL Documentation](https://clickhouse.com/docs/en/sql-reference/statements/alter/ttl)
- [ClickHouse MergeTree TTL](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#mergetree-table-ttl)
- [ClickHouse System Tables](https://clickhouse.com/docs/en/operations/system-tables/)
---
## 🆘 Dépannage
### Problème: "TTL expression must return Date or DateTime"
**Solution:** Vérifier que la colonne utilisée dans le TTL est de type Date ou DateTime
```sql
-- Vérifier les types de colonnes
DESCRIBE TABLE mabase_prod.view_dashboard_entities;
```
### Problème: "Table is in readonly mode"
**Solution:** La table est gérée par une vue matérialisée. Modifier la vue, pas la table.
### Problème: OPTIMIZE prend trop de temps
**Solution:** Exécuter en arrière-plan avec un timeout plus long
```sql
-- Exécuter avec timeout de 1 heure
SET max_execution_time = 3600;
OPTIMIZE TABLE mabase_prod.view_dashboard_entities FINAL;
```
---
**Dernière mise à jour:** 2026-03-15
**Version:** 1.0