Ein Azure-Dienst, der verwendet wird, um Telemetriedaten aus Azure und lokalen Umgebungen zu sammeln, zu analysieren und auf sie zu reagieren
Hello Patrick, das sieht weniger nach einem echten “Burst”-Traffic‐Ereignis in deinem Code aus, sondern eher nach zwei “Feature-Effekten” kombiniert:
- Aggregations-Artefakt • Du hast für DataIn/DataOut die Aggregation “Summe” mit einem 20-Minuten-Intervall ausgewählt. Bei Summe werden alle Bytes aus den letzten 20 Minuten in einem einzigen Punkt zusammengefasst – sodass du nur an den 20-Min-Grenzen einen Peak siehst und dazwischen quasi “0”. Tatsächlich verteilt sich dein Traffic aber gleichmäßig übers Intervall. • Wenn du statt “Summe” mal auf Durchschnitt, Minimum/Maximum schaltest oder das Zeitraster auf 1 Minute runterdrehst, verschwinden die regelmäßigen Spitzen.
- Platform-Traffic Die DataIn/DataOut-Metriken von App Service umfassen alle Bytes, nicht nur deinen HTTP-App-Traffic (den du in AppServiceHTTPLogs siehst), sondern auch z. B.: • Always On-Pings oder Health-Check-Requests vom Front-End • Deployment Center/Git-Polling • App Service Backup und App-Publishing (FTP/WebDeploy) • Kudu/SCM-Aufrufe • Application Insights Live-Metrics (“QuickPulse”) • Sonstige Infrastruktur-Calls
Deshalb tauchen in deinen IIS-Logs (AppServiceHTTPLogs) keine 100+ MB-Spitzen auf – das ist Plattform-Traffic, den die HTTP-Logs nicht mitschreiben.
Was du tun kannst:
• Wechsle im Metrics-Chart mal auf “Aggregation = Durchschnitt” bzw. 1-Minuten-Grains, dann siehst du eine konstante Linie statt Spitzen.
• Prüfe in App Service Diagnostics (AppLens) unter “Networking” / “TCP Connections” oder im Kudu-Console-Netstat, welche Remote-Peers zur Peak-Zeit aktiv sind.
• Kontrolliere, ob du Backup-Jobs, Deployment-Polling oder Health-Checks in deinem App Service planmäßig laufen hast.
• Falls du Live-Metrics offen hast (QuickPulse), schließe das Pane, um diese Polling-Aufrufe auszuschließen.
- Diagnostic Settings vorübergehend deaktivieren (Test)
Du hast eine Diagnostic Setting (W3C → Log Analytics Workspace) aktiv. Der Export von Logs an Log Analytics erzeugt ausgehenden Netzwerkverkehr, der in den DataOut-Metriken erfasst wird, aber nicht in den HTTP-Logs erscheint.
Test: Deaktiviere die Diagnostic Setting auf einem App Service für 2–4 Stunden und vergleiche die DataIn/DataOut-Metriken vorher/nachher. Falls die Peaks verschwinden, ist der Log-Export die Ursache.
- Netzwerk-Trace über App Service Diagnostics (AppLens)
Dies ist der definitivste Weg, um die Traffic-Quelle zu identifizieren:
- Gehe zu App Service → Diagnose and solve problems
- Suche nach"Network Trace" oder"Collect Network Trace"
- Starte einen Trace, der einen Peak-Zeitpunkt (z. B. :19, :39, :59) abdeckt
- Analysiere die PCAP-Datei, um die Remote-Endpunkte und Datenmengen zu sehen
- Ausgehende Verbindungen prüfen (Kudu Console)
Öffne die Kudu-Konsole (https://<app-name>.scm.azurewebsites.net) und führe während eines Peaks folgenden Befehl aus:
netstat -ano
Oder in der PowerShell-Konsole:
PowerShell
Get-NetTCPConnection | Where-Object {$_.State -eq 'Established'} |
Select-Object LocalPort, RemoteAddress, RemotePort, OwningProcess |
Sort-Object RemoteAddress
Dies zeigt dir die aktiven Verbindungen zum Peak-Zeitpunkt und gibt Aufschluss darüber, wohin der Traffic fließt.
- AppServicePlatformLogs prüfen
Falls noch nicht aktiviert, aktiviere AppServicePlatformLogs in den Diagnostic Settings. Diese erfassen plattformseitige Aktivitäten, die nicht in den HTTP-Logs erscheinen:
Kusto
AppServicePlatformLogs
| where TimeGenerated >= ago(4h)
| summarize Count=count(), TotalSize=sum(estimate_data_size(*)) by bin(TimeGenerated, 20m), Level, ContainerName
| order by TimeGenerated desc
- Application Insights Telemetrie-Volumen genauer prüfen
Auch wenn die AI-Timeline nicht perfekt mit den Peaks übereinstimmt, prüfe bitte das tatsächliche Telemetrie-Exportvolumen im Log Analytics Workspace:
Kusto
union withsource=TableName *
| where _ResourceId contains "<app-service-name>"
| where TimeGenerated >= ago(24h)
| summarize DataVolumeMB = round(sum(estimate_data_size(*)) / 1024.0 / 1024.0, 2) by bin(TimeGenerated, 20m), TableName
| order by TimeGenerated desc
| render timechart
Wenn die Peaks in dieser Abfrage mit den Metric-Peaks übereinstimmen, hast du den Verursacher gefunden.
- „Always On" und Health Check Konfiguration prüfen
- Always On sendet alle 5 Minuten einen GET-Request an die App-Root – das erzeugt zwar Traffic, aber in der Regel nur wenige KB.
- Health Check: Falls konfiguriert, sendet der Load Balancer periodische Anfragen an den Health-Check-Pfad. Prüfe unter Configuration → Health check, ob dies aktiv ist.
- Azure Support-Ticket erstellen (Empfehlung)
Da die bisherigen Schritte die Ursache nicht identifiziert haben und es sich um reale Kosten (1,8 TB/Monat) handelt, empfehle ich, ein Azure Support-Ticket zu erstellen:
- Service: App Service (Web Apps)
- Problem type: Performance and Availability → Unexpected Traffic or Bandwidth Usage
- Das Product-Team kann serverseitig (auf Plattformebene) Netzwerk-Traces und Traffic-Analysen durchführen, die von der Kundenseite nicht zugänglich sind.
Hoffe, das hilft dir, die “Peaks” zu erklären und zu reduzieren!
Referenzen
• Metrics : Data Out (App Service)
https://supportability.visualstudio.com/AzureAppService/_wiki/wikis/AzureAppService/712059/Web App - Windows/Web App (Windows) - Monitoring resources, using metrics, logs, and alerts/Azure App Service - Metrics are not available or are incorrect/Metrics : Data Out
• I don’t understand a specific metric (Azure Monitor metrics reference)
• Unexpected large number of requests to livediagnostics.monitor.azure.com (Live Metrics)