# Configuration Prometheus - veza-backend-api

## Activation des Alertes

### 1. Ajouter les règles dans Prometheus

Copier `alerts.yml` dans le répertoire de configuration Prometheus:

```bash
# Exemple: /etc/prometheus/rules/veza-backend-api.yml
cp ops/prometheus/alerts.yml /etc/prometheus/rules/veza-backend-api.yml
```

### 2. Configurer Prometheus

Ajouter dans `prometheus.yml`:

```yaml
rule_files:
  - "/etc/prometheus/rules/veza-backend-api.yml"

scrape_configs:
  - job_name: 'veza-backend-api'
    scrape_interval: 15s
    metrics_path: '/metrics'
    static_configs:
      - targets: ['localhost:8080']  # Adapter selon déploiement
```

### 3. Redémarrer Prometheus

```bash
sudo systemctl restart prometheus
# ou
docker-compose restart prometheus
```

### 4. Vérifier les alertes

```bash
# Via Prometheus UI
http://localhost:9090/alerts

# Via API
curl http://localhost:9090/api/v1/alerts
```

## Métriques Requises

Les alertes utilisent les métriques suivantes (déjà exposées par veza-backend-api):

- `veza_circuit_breaker_state` - État du circuit breaker (0=closed, 1=half-open, 2=open)
- `veza_db_pool_open_connections` - Nombre de connexions DB ouvertes
- `veza_db_pool_wait_count_total` - Nombre de fois qu'une connexion a dû attendre
- `veza_gin_http_requests_total` - Total requêtes HTTP (method, path, status)
- `veza_gin_http_request_duration_seconds` - Durée des requêtes HTTP
- `veza_health_check_status` - Statut health check (1=ok, 0.5=slow, 0=error)

## Seuils Configurés

| Alerte | Seuil | Durée | Sévérité |
|--------|-------|-------|----------|
| Circuit Breaker Open | state == 2 | 5 min | Critical |
| DB Pool > 80% | > 16/20 connexions | 5 min | Warning |
| DB Pool Exhausted | wait rate > 0.1/s | 2 min | Critical |
| Erreurs 5xx > 5% | > 5% des requêtes | 5 min | Warning |
| Erreurs 5xx > 10/s | > 10 erreurs/s | 2 min | Critical |
| Latence P95 > 1s | P95 > 1s | 5 min | Warning |
| Latence P99 > 5s | P99 > 5s | 3 min | Warning |

## Ajustement des Seuils

Pour ajuster les seuils selon votre environnement:

1. **DB Pool Max Connections**: Si différent de 20, modifier l'expression dans `VezaDBPoolHighUsage`:
   ```yaml
   expr: veza_db_pool_open_connections / <VOTRE_MAX> > 0.8
   ```

2. **Taux Erreurs 5xx**: Ajuster le seuil (actuellement 5%):
   ```yaml
   expr: ... > 0.05  # Modifier 0.05 selon tolérance
   ```

3. **Latence**: Ajuster selon SLA:
   ```yaml
   expr: ... > 1.0  # Modifier 1.0 selon SLA (ex: 0.5s pour API rapide)
   ```

## Intégration avec Alertmanager

Pour envoyer les alertes vers Slack/PagerDuty/etc:

1. Configurer Alertmanager (voir [Alertmanager docs](https://prometheus.io/docs/alerting/latest/alertmanager/))
2. Les labels `severity` et `component` permettent de router les alertes
3. Les annotations `runbook` pointent vers la documentation

Exemple de configuration Alertmanager:

```yaml
route:
  routes:
    - match:
        severity: critical
      receiver: 'pagerduty'
    - match:
        severity: warning
      receiver: 'slack'
```
