# Analytics Konfiguration

> **Dokumentationshinweis:** Diese Dokumentation ist vollständig aktualisiert und stellt die aktuelle Implementierung der Analytics-Konfiguration korrekt dar.

## Übersicht

Das Analytics Framework bietet umfangreiche Konfigurationsmöglichkeiten, um das Verhalten und die Leistung an die Anforderungen Ihrer Anwendung anzupassen. Diese Dokumentation beschreibt die verfügbaren Konfigurationsoptionen und wie Sie diese anwenden können.

## Konfigurationsklasse

Die zentrale Klasse für die Analytics-Konfiguration ist `AnalyticsConfig`. Diese Klasse enthält alle Einstellungen, die das Verhalten des Analytics Frameworks steuern:

```php
use App\Framework\Analytics\AnalyticsConfig;

// Konfiguration erstellen
$config = new AnalyticsConfig(
    $enabled = true,                         // Analytics aktivieren/deaktivieren
    $samplingRate = 1.0,                     // Sampling-Rate (0.0 - 1.0)
    $securityAnalyticsEnabled = true,        // Sicherheits-Analytics aktivieren
    $dataPath = '/var/www/html/storage/analytics', // Pfad für Datenspeicherung
    $bufferSize = 1000,                      // Puffergröße für Ereignisse
    $retentionDays = 365,                    // Aufbewahrungsdauer in Tagen
    $trackPageViews = true,                  // Seitenaufrufe erfassen
    $trackApiCalls = true,                   // API-Aufrufe erfassen
    $trackUserActions = true,                // Benutzeraktionen erfassen
    $trackErrors = true,                     // Fehler erfassen
    $trackPerformance = true                 // Leistungsmetriken erfassen
);
```

## Standardkonfiguration

Die `AnalyticsConfig`-Klasse bietet eine Standardkonfiguration, die für die meisten Anwendungen geeignet ist:

```php
// Standardkonfiguration verwenden
$config = AnalyticsConfig::default();
```

Die Standardkonfiguration aktiviert alle Features mit sinnvollen Standardwerten:
- Analytics aktiviert
- 100% Sampling (alle Daten werden erfasst)
- Sicherheits-Analytics aktiviert
- 1000 Ereignisse im Puffer
- 365 Tage Aufbewahrungsdauer
- Alle Tracking-Typen aktiviert

## Umgebungsvariablen

Die Konfiguration kann auch über Umgebungsvariablen angepasst werden:

```php
// In der AnalyticsConfig-Klasse
public static function default(): self
{
    return new self(
        enabled: filter_var($_ENV['ANALYTICS_ENABLED'] ?? true, FILTER_VALIDATE_BOOLEAN),
        samplingRate: (float)($_ENV['ANALYTICS_SAMPLING_RATE'] ?? 1.0),
        securityAnalyticsEnabled: filter_var($_ENV['SECURITY_ANALYTICS_ENABLED'] ?? true, FILTER_VALIDATE_BOOLEAN),
        dataPath: $_ENV['ANALYTICS_DATA_PATH'] ?? '/var/www/html/storage/analytics',
        bufferSize: (int)($_ENV['ANALYTICS_BUFFER_SIZE'] ?? 1000),
        retentionDays: (int)($_ENV['ANALYTICS_RETENTION_DAYS'] ?? 365),
        trackPageViews: filter_var($_ENV['ANALYTICS_TRACK_PAGE_VIEWS'] ?? true, FILTER_VALIDATE_BOOLEAN),
        trackApiCalls: filter_var($_ENV['ANALYTICS_TRACK_API_CALLS'] ?? true, FILTER_VALIDATE_BOOLEAN),
        trackUserActions: filter_var($_ENV['ANALYTICS_TRACK_USER_ACTIONS'] ?? true, FILTER_VALIDATE_BOOLEAN),
        trackErrors: filter_var($_ENV['ANALYTICS_TRACK_ERRORS'] ?? true, FILTER_VALIDATE_BOOLEAN),
        trackPerformance: filter_var($_ENV['ANALYTICS_TRACK_PERFORMANCE'] ?? true, FILTER_VALIDATE_BOOLEAN)
    );
}
```

Beispiel für eine `.env`-Datei:

```
ANALYTICS_ENABLED=true
ANALYTICS_SAMPLING_RATE=0.1
SECURITY_ANALYTICS_ENABLED=true
ANALYTICS_DATA_PATH=/var/www/html/storage/analytics
ANALYTICS_BUFFER_SIZE=1000
ANALYTICS_RETENTION_DAYS=365
ANALYTICS_TRACK_PAGE_VIEWS=true
ANALYTICS_TRACK_API_CALLS=true
ANALYTICS_TRACK_USER_ACTIONS=true
ANALYTICS_TRACK_ERRORS=true
ANALYTICS_TRACK_PERFORMANCE=true
```

## Konfigurationsoptionen im Detail

### Grundlegende Optionen

#### enabled

Aktiviert oder deaktiviert das gesamte Analytics Framework:

```php
$config = new AnalyticsConfig(
    enabled: true, // Analytics aktivieren
    // ... weitere Optionen
);

// oder

$config = new AnalyticsConfig(
    enabled: false, // Analytics deaktivieren
    // ... weitere Optionen
);
```

Wenn deaktiviert, werden keine Daten erfasst, und alle Aufrufe an den `AnalyticsCollector` werden ignoriert.

#### samplingRate

Definiert den Prozentsatz der Daten, die erfasst werden sollen:

```php
$config = new AnalyticsConfig(
    enabled: true,
    samplingRate: 1.0, // 100% der Daten erfassen
    // ... weitere Optionen
);

// oder

$config = new AnalyticsConfig(
    enabled: true,
    samplingRate: 0.1, // 10% der Daten erfassen
    // ... weitere Optionen
);
```

Die Sampling-Rate ist nützlich, um die Datenmenge und die Serverbelastung bei hohem Datenaufkommen zu reduzieren. Ein Wert von 0.1 bedeutet, dass nur 10% aller Ereignisse erfasst werden.

#### securityAnalyticsEnabled

Aktiviert oder deaktiviert die Erfassung von Sicherheitsereignissen:

```php
$config = new AnalyticsConfig(
    enabled: true,
    samplingRate: 1.0,
    securityAnalyticsEnabled: true, // Sicherheits-Analytics aktivieren
    // ... weitere Optionen
);
```

Wenn aktiviert, werden Sicherheitsereignisse (wie Anmeldeversuche, CSRF-Angriffe, WAF-Blockierungen) erfasst und analysiert.

### Speicheroptionen

#### dataPath

Definiert den Pfad, in dem Analytics-Daten gespeichert werden:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    dataPath: '/var/www/html/storage/analytics',
    // ... weitere Optionen
);
```

Stellen Sie sicher, dass dieser Pfad existiert und für die Anwendung beschreibbar ist.

#### bufferSize

Definiert die Anzahl der Ereignisse, die im Speicher gepuffert werden, bevor sie auf die Festplatte geschrieben werden:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    bufferSize: 1000, // 1000 Ereignisse puffern
    // ... weitere Optionen
);
```

Ein größerer Puffer reduziert die Anzahl der Schreibvorgänge, erhöht aber den Speicherverbrauch und das Risiko von Datenverlust bei einem Absturz.

#### retentionDays

Definiert die Anzahl der Tage, für die Analytics-Daten aufbewahrt werden:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    retentionDays: 365, // Daten für 1 Jahr aufbewahren
    // ... weitere Optionen
);
```

Ältere Daten werden automatisch gelöscht, um Speicherplatz zu sparen.

### Tracking-Optionen

#### trackPageViews

Aktiviert oder deaktiviert die Erfassung von Seitenaufrufen:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    trackPageViews: true, // Seitenaufrufe erfassen
    // ... weitere Optionen
);
```

#### trackApiCalls

Aktiviert oder deaktiviert die Erfassung von API-Aufrufen:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    trackApiCalls: true, // API-Aufrufe erfassen
    // ... weitere Optionen
);
```

#### trackUserActions

Aktiviert oder deaktiviert die Erfassung von Benutzeraktionen:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    trackUserActions: true, // Benutzeraktionen erfassen
    // ... weitere Optionen
);
```

#### trackErrors

Aktiviert oder deaktiviert die Erfassung von Fehlern:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    trackErrors: true, // Fehler erfassen
    // ... weitere Optionen
);
```

#### trackPerformance

Aktiviert oder deaktiviert die Erfassung von Leistungsmetriken:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    trackPerformance: true, // Leistungsmetriken erfassen
);
```

## Konfiguration in der Anwendung

### Konfigurationsdatei

Die Analytics-Konfiguration kann in einer dedizierten Konfigurationsdatei definiert werden:

```php
// config/analytics.php
return [
    'enabled' => true,
    'sampling_rate' => 1.0,
    'security_analytics_enabled' => true,
    'data_path' => '/var/www/html/storage/analytics',
    'buffer_size' => 1000,
    'retention_days' => 365,
    'track_page_views' => true,
    'track_api_calls' => true,
    'track_user_actions' => true,
    'track_errors' => true,
    'track_performance' => true,
];
```

### Dependency Injection

Die Konfiguration kann über Dependency Injection in die Anwendung eingebunden werden:

```php
// In einem Service Provider oder Container-Konfiguration
$container->set(AnalyticsConfig::class, function () {
    return new AnalyticsConfig(
        enabled: true,
        samplingRate: 0.1,
        // ... weitere Optionen
    );
});
```

### Laufzeitkonfiguration

Die Konfiguration kann zur Laufzeit angepasst werden:

```php
// Analytics-Konfiguration aktualisieren
$newConfig = new AnalyticsConfig(
    enabled: true,
    samplingRate: 0.5, // Sampling-Rate anpassen
    // ... weitere Optionen
);

// Konfiguration aktualisieren
$analyticsManager->updateConfig($newConfig);
```

## Umgebungsspezifische Konfiguration

Es ist oft sinnvoll, unterschiedliche Konfigurationen für verschiedene Umgebungen zu verwenden:

### Produktionsumgebung

```php
// Produktionskonfiguration
$config = new AnalyticsConfig(
    enabled: true,
    samplingRate: 0.1, // Reduzierte Sampling-Rate für hohe Lasten
    securityAnalyticsEnabled: true,
    dataPath: '/var/www/html/storage/analytics',
    bufferSize: 5000, // Größerer Puffer für bessere Leistung
    retentionDays: 365,
    trackPageViews: true,
    trackApiCalls: true,
    trackUserActions: true,
    trackErrors: true,
    trackPerformance: true
);
```

### Entwicklungsumgebung

```php
// Entwicklungskonfiguration
$config = new AnalyticsConfig(
    enabled: true,
    samplingRate: 1.0, // Alle Daten erfassen für einfachere Fehlersuche
    securityAnalyticsEnabled: true,
    dataPath: '/var/www/html/storage/analytics',
    bufferSize: 100, // Kleinerer Puffer für sofortiges Feedback
    retentionDays: 30, // Kürzere Aufbewahrungsdauer
    trackPageViews: true,
    trackApiCalls: true,
    trackUserActions: true,
    trackErrors: true,
    trackPerformance: true
);
```

### Testumgebung

```php
// Testkonfiguration
$config = new AnalyticsConfig(
    enabled: false, // Deaktiviert für Tests
    samplingRate: 1.0,
    securityAnalyticsEnabled: false,
    dataPath: '/tmp/analytics',
    bufferSize: 10,
    retentionDays: 1,
    trackPageViews: false,
    trackApiCalls: false,
    trackUserActions: false,
    trackErrors: false,
    trackPerformance: false
);
```

## Leistungsoptimierung

### Sampling für hohe Lasten

Bei hohem Datenaufkommen kann die Sampling-Rate reduziert werden, um die Serverbelastung zu verringern:

```php
$config = new AnalyticsConfig(
    enabled: true,
    samplingRate: 0.01, // Nur 1% der Daten erfassen
    // ... weitere Optionen
);
```

### Pufferoptimierung

Die Puffergröße kann angepasst werden, um die Anzahl der Schreibvorgänge zu optimieren:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    bufferSize: 10000, // Größerer Puffer für weniger Schreibvorgänge
    // ... weitere Optionen
);
```

### Selektives Tracking

Nicht alle Tracking-Typen müssen aktiviert sein. Deaktivieren Sie die Typen, die Sie nicht benötigen:

```php
$config = new AnalyticsConfig(
    // ... vorherige Optionen
    trackPageViews: true,
    trackApiCalls: true,
    trackUserActions: false, // Benutzeraktionen deaktivieren
    trackErrors: true,
    trackPerformance: false // Leistungsmetriken deaktivieren
);
```

## Fehlerbehebung

### Häufige Probleme

#### Keine Daten werden erfasst

Mögliche Ursachen:
- Analytics ist deaktiviert (`enabled = false`)
- Sampling-Rate ist zu niedrig
- Fehler beim Speichern der Daten

Lösung:
- Überprüfen Sie die Konfiguration
- Erhöhen Sie die Sampling-Rate
- Überprüfen Sie die Logs auf Fehler
- Stellen Sie sicher, dass der Datenpfad existiert und beschreibbar ist

```php
// Überprüfen Sie die Konfiguration
var_dump($analyticsConfig);

// Erhöhen Sie die Sampling-Rate
$newConfig = new AnalyticsConfig(
    enabled: true,
    samplingRate: 1.0, // 100% der Daten erfassen
    // ... weitere Optionen
);

// Überprüfen Sie die Berechtigungen des Datenpfads
if (!is_writable($analyticsConfig->dataPath)) {
    echo "Datenpfad ist nicht beschreibbar: " . $analyticsConfig->dataPath;
}
```

#### Hohe Serverbelastung

Mögliche Ursachen:
- Zu viele Ereignisse werden erfasst
- Puffergröße ist zu klein
- Synchrone Verarbeitung bei hohem Datenaufkommen

Lösung:
- Reduzieren Sie die Sampling-Rate
- Erhöhen Sie die Puffergröße
- Verwenden Sie asynchrone Verarbeitung

```php
// Reduzieren Sie die Sampling-Rate
$newConfig = new AnalyticsConfig(
    enabled: true,
    samplingRate: 0.1, // Nur 10% der Daten erfassen
    // ... weitere Optionen
);

// Erhöhen Sie die Puffergröße
$newConfig = new AnalyticsConfig(
    // ... vorherige Optionen
    bufferSize: 10000, // Größerer Puffer
    // ... weitere Optionen
);
```

## Weiterführende Informationen

- [Analytics Framework Übersicht](index.md)
- [Analytics Beispiele](examples.md)
- [Performance-Monitoring](/components/performance/index.md)
