· Fallstudie · 9 minuten Lesezeit
Kostenoptimierung in Azure Log Analytics und Azure Application Insights
Wie eine fundierte Analyse und gezielte Maßnahmen in Azure Log Analytics und Application Insights zu messbaren Kosteneinsparungen von rund 70% beim Kunden geführt haben

Disclaimer
Diese Fallstudie basiert auf einer realen Kostenoptimierungsanalyse für Azure Log Analytics und Azure Application Insights. Aus Datenschutzgründen wurden alle Kundennamen, Ressourcenbezeichnungen und spezifischen Identifikatoren anonymisiert. Die dargestellten Daten, Analysen und Optimierungsmaßnahmen entsprechen jedoch den tatsächlichen Gegebenheiten und Ergebnissen des Projekts.
Inhalt
- Analyse der bestehenden Umgebungen
- Erkenntnisse aus der DEV- und QA-Umgebung
- Handlungsempfehlungen zur Kostenoptimierung
- Fazit
Analyse der bestehenden Umgebungen
DEV-Umgebung
Log Analytics
- Ressource:
dev-demo-analytics-log - Standort: France Central
- Preis pro GB: €2.358 (Stand: 23.07.2025)
App Insights
- Ressource:
dev-demo - Standort: West Europe
Visualisierte Übersicht über 90 Tage Zeitraum

Abbildung 1: Zeitraum der letzten 90 Tagen für die 5 wichtigsten Tabellen von App Insights
Anzahl der Events in Summe in 90 Tagen:
| PerformanceCounters | Traces | Dependencies | Requests | Metrics |
|---|---|---|---|---|
| 13,1 Tsd. | 12,5 Tsd. | 11,1 Tsd. | 2,39 Tsd. | 837 |
Nutzung in GB aufsteigend sortiert:
| Nutzung | Größe |
|---|---|
| AppPerformanceCounters | 13,13 GB |
| AppTraces | 12,45 GB |
| AppDependencies | 11,09 GB |
| AppEvents | 7,97 GB |
| AppRequests | 2,38 GB |
| AppMetrics | 0,84 GB |
| AppExceptions | 0,52 GB |
| Summe | 48,38 GB |
| Preis (2,358 €/GB) | ~114 € |

Abbildung 2: Prozentuale Verteilung der Tabellen in App Insights
Tabellen, die optimiert werden müssen:
- AppPerformanceCounters
- AppTraces
- AppDependencies
- AppEvents
Diagnoseeinstellungen
Keine Einstellungen vorhanden
Annahme zum Zeitpunkt der Datenreduzierung

Abbildung 3: Zeitpunkt einer vermutlichen Maßnahme zur Kostenoptimierung
Ab dem 12.06 wurden Maßnahmen getroffen, um weniger Daten von App Insights zu speichern. Möglicherweise wurde das Tageslimit im Log Analytics auf 1 GB/Tag gesetzt, um die Datenmenge sofort zu reduzieren.
Abfrage der Tabelle Dependencies mit Zeitraum 90 Tage
// KQL-Abfrage für die Tabelle Dependencies
dependencies
| where timestamp >= startofday(ago(90d))
| summarize sum(_BilledSize) by operation_Name
| render barchartAbbildung 4: Auszug von 1000 Einträgen, die abgerechnet werden und Kosten verursachen
| Endpoint | Bytes | GB |
|---|---|---|
| POST Container/GetContainerToken | 2292837247 | 2,14 |
| POST Api/GetCurrentToken | 1137856923 | 1,06 |
| GET User/GetByToken | 331878311 | 0,31 |
| POST /connect/token | 114822388 | 0,11 |
| GET Api/ValidateToken | 82888776 | 0,08 |
| GET User/GetByEmail | 35483689 | 0,03 |
| POST User/GetByToken | 34820436 | 0,03 |
| POST Tenant/GetRelations | 20524160 | 0,02 |
| … | … | … |
Abbildung 5: Gruppierter Datenauszug von 1000 Einträgen mit einer Rundung von GB auf 2 Nachkommastellen
Zusammenfassung der Telemetriedaten
- Kostenanalyse der API-Endpunkte, die am meisten Datenvolumen und Kosten verursachen
- Optimierungspotenzial, da häufige Datenerfassung zu den API-Endpunkten wie etwa
POST Container/GetContainerTokennicht unbedingt notwendig sind und ggf. reduziert werden können. Für Entwickler-Teams jedoch interessant und auswertbar, wie sich die Anwendung verhält - Zeitraum auf 90 Tage begrenzt, um aktuelle Daten einzusehen und Trends zu erkennen, welche API-Endpunkte besonders häufig angesprochen werden
- Transparenz für Abrechnungen, da die Auswertung der KQL mit dem Filter
_BilledSizeaggregiert werden. Entscheidend für Kostenkontrollen und Forecastsmaßnahmen
Mit dieser detaillierten Datenanalyse lassen sich etwa Dashboards erstellen für eine kontinuierliche Überwachung. Man kann Warnungen einrichten, wenn einzelne API-Endpunkte ungewöhnlich viel Traffic in kurzem Zeitraum erzeugen und dadurch Kosten verursachen oder Code-Reviews anstoßen, um teure API-Endpunkte zu verbessern
QA-Umgebung
Log Analytics
- Ressource:
dev-demo-analytics-log - Standort: France Central
- Preis pro GB: €2.358 (Stand: 23.07.2025)
App Insights
- Ressource:
qa-demoapp1undqa-demoapp2 - Standort: West Europe und Germany West Central
Visualisierung in 90 Tagen Zeitraum

Abbildung 6: Zeitraum der letzten 90 Tagen für die 5 wichtigsten Tabellen von App Insights in der QA-Umgebung
Dashboard

Abbildung 7: Dashboard der abrechenbaren Tabellen von App Insights sortiert nach GB
Extrahierte Daten aus dem Dashboard
| Solution | Tabelle | Erfassungsvolumen | Prozentsatz | Billable |
|---|---|---|---|---|
| LogManagement | AppDependencies | 25,04GB | 48,4 % | Abrechenbar |
| LogManagement | AppPerformanceCounters | 10,57GB | 20,5 % | Abrechenbar |
| LogManagement | AppTraces | 6,68GB | 12,9 % | Abrechenbar |
| LogManagement | AppRequests | 5,78GB | 11,2 % | Abrechenbar |
| LogManagement | AppMetrics | 962,88MB | 1,9 % | Abrechenbar |
Kostenberechnung (Preis: €2.358 pro GB, Stand: 23.07.2025):
| Tabelle | Erfassungsvolumen | Volumen (GB) | Kosten (€) |
|---|---|---|---|
| AppDependencies | 25,04GB | 25,04 | 59,04 |
| AppPerformanceCounters | 10,57GB | 10,57 | 24,92 |
| AppTraces | 6,68GB | 6,68 | 15,75 |
| AppRequests | 5,78GB | 5,78 | 13,63 |
| AppMetrics | 962,88MB | 0,963 | 2,27 |
| Summe | 49,03 | 115,61 |
Hinweis: 962,88MB = 0,963GB (1GB = 1024MB)
Berechnung:
Kosten je Tabelle = Volumen (GB) × €2.358
Gesamtkosten = Summe aller Tabelleneinzelkosten
Telemetriedaten von 90 Tagen Zeitraum
| Tabelle | Trend | Tägliche Erfassung |
|---|---|---|
| AppTraces (1) | ||
| 2025-04-25 | Down | 19 MB |
| AppRequests (1) | ||
| 2025-04-25 | Down | 5 MB |
| AppDependencies (20) | ||
| 2025-05-06 | Down | 181 MB |
| 2025-05-13 | Down | 181 MB |
| 2025-07-07 | Down | 131 MB |
| 2025-07-08 | Down | 122 MB |
| 2025-07-09 | Down | 131 MB |
| 2025-07-10 | Down | 131 MB |
| 2025-07-11 | Down | 133 MB |
| 2025-07-12 | Down | 132 MB |
| 2025-07-13 | Down | 121 MB |
| 2025-07-14 | Down | 130 MB |
| 2025-07-15 | Down | 132 MB |
| 2025-07-16 | Down | 134 MB |
| 2025-07-17 | Down | 123 MB |
| 2025-07-18 | Down | 112 MB |
| 2025-07-19 | Down | 128 MB |
| 2025-07-20 | Down | 125 MB |
| 2025-07-21 | Down | 126 MB |
| 2025-07-22 | Down | 132 MB |
| 2025-07-23 | Down | 132 MB |
| 2025-07-24 | Down | 124 MB |
| AppPerformanceCounters (1) | ||
| 2025-07-24 | Down | 40 MB |
Zusammenfassung der Telemetriedaten von 90 Tagen
- Allgemeiner Trend “Down” von Anfang bis Ende zu erkennen, was auf ein insgesamten Rückgang der täglichen Datenerfassung zu verstehen ist
- Weniger Aktivitäten oder Nutzung der Anwendungen
- Maßnahmen zur Kostenoptimierung wie aktivierten Sampling oder SDK Konfigurationen
- AppDependencies ist auffällig hoch und zeigt regelmäßig hohe Datenmengen die Kosten verursachen
- Andere Tabellen sind unauffällig und speichern wenig Daten im Vergleich
Erkenntnisse aus der DEV- und QA-Umgebung
Daten-Ingestion optimieren
- Filterung an der Quelle mithilfe von Data Collection Rules und Tabellentransformation um nur relevante Metriken und Logs aus App Insights und Log Analytics zu sammeln und bei Bedarf auch nur die notwendigen Spalten aufnehmen. Damit wird das Datenvolumen reduziert, minimiert die zu speichernden Daten und senkt die Kosten
- Handlungsempfehlung: Ja
- Sampling für App Insights aktiveren um zu verhindern, dass unnötig viele Telemetriedaten (Requests, Dependencies, Traces, PerformanceCounters, Metrics) erfasst werden
- Handlungsempfehlung
- Sampling aktivieren
- Erweitertes Sampling
- Adaptives Sampling bei Spikes aktivieren (geht über SDK, nicht im Portal)
- Duplizierte Datenerfassung im Code ausschließen (aktive Maßnahme)
- Anpassen der host.json Datei beim Einsatz von Azure Functions
- logging.applicationInsights.samplingSettings
- logging.logLevel
- Einsatz von SDK und deaktivieren der automatischen Datenerfassung
- Instrumentationkey umbenennen oder nicht als Variable setzen
- SDK installieren, konfigurieren und steuern der Datenerfassung, die auch wirklich Business kritisch sind (Höchstes Einsparungspotenzial)
- Handlungsempfehlung
- Generell gilt regelmäßig zu Prüfen welche Anwendungen oder Dienste besonders viele Daten speichern und prüfen ob das Volumen durch Filterung oder Anpassungen weiter gesenkt werden kann
- Begrenzen der Zeitintervallen für unterschiedliche Dienste wie etwa von Dashboard’s, Arbeitsmappen, Power-BI Berichte, KQL-Abfragen (im Basic-Plan), DCR’s und Verfügbarkeitstest (Azure Monitor)
- Keine Maßnahmen erforderlich, da keine Einsicht zu den Diensten und keine Verfügbarkeitstests aktiv sind die Kosten verursachen könnten
Tageslimit von Log Analytics
Tageslimit: Diese Maßnahme Ist derzeit aktiv auf DEV und QA mit 1 GB/Tag
Problem: Sobald Log Analytics das Datenspeicherlimit von 1 GB/Tag erreicht, z. B. um 13 Uhr, dann werden alle weiteren Logs nicht mehr gespeichert von allen anderen Diensten (auch die, die ich zurzeit nicht sehe wegen Berechtigungen, wie z. B. Container Insights, Activity Logs). Diese Daten tauchen nirgendswo mehr auf und sind verloren. Alle dieser Dienste konkurrieren um das speichern der Daten
Folge: Verlust der Daten kann zu sogenannte “Blindspots” im Monitoring führen, Visualisierungen in Dashboard’s zeigen nur Daten bis zu einem bestimmten Limit an. Wenn in einem Messzeitraum Daten ausfallen, kann das dazu führen, dass Alarme nicht korrekt ausgelöst werden, selbst dann, wenn der Trend eigentlich einen kritischen Anstieg zeigt und ein Alarm notwendig gewesen wäre
Empfehlung: Das sollte nur als letzte Option angesehen werden, wenn die Daten unkontrolliert an Log Analytics gespeichert werden. Eine bessere Option ist es, Sampling (und zusätzlich Adaptives Sampling über SDK zu nutzen) zu aktivieren in den jeweiligen Diensten (dann kommt ein Bruchteil der Daten zu Log Analytics) oder/und wenn möglich Data Collection Rules und Tabellentransformation um Daten vorher zu filtern, bevor die in Log Analytics gespeichert werden
Datenaufbewahrung und Wiederhestellungsstrategien
Zurzeit ist keine aktuelle Umstellung notwendig, da bereits der Standardzeitraum von 30 bzw. 90 Tagen für die Tabellen von App Insights konfiguriert sind und keine längere Aufbewahrungszeitraum aus Compliance Gründen vorhanden sind
Dennoch gibt es eine Möglichkeit Kosten einzusparen bei der Auswahl eines richtigen Tabellenplan’s:
- Handlungsempfehlung:
- Identifizieren von Tabellenpläne, die von “Analytics” zu “Basic” umgestellt werden können => moderates bis hohes Einsparungspotenzial
Einstellungen der Pläne für Tabellen
Originaler Link zu den Plänen: https://learn.microsoft.com/de-de/azure/azure-monitor/logs/data-platform-logs#table-plans
Die folgende Tabelle wurde um die Preise vom Standort Frankreich, Zentral von Azure Log Analytics erweitert
| Funktionen | Analytics | Basic |
|---|---|---|
| Am besten geeignet für | Hochwertige Daten für kontinuierliches Monitoring, Echtzeit-Erkennung und Performance-Analysen | Daten mit mittlerer Wichtigkeit für Fehlerbehebung und Incident-Response |
| Unterstützte Tabellentypen | Alle Tabellentypen | Azure-Tabellen, die Basic-Logs unterstützen, sowie DCR-basierte benutzerdefinierte Tabellen |
| Aufnahmekosten | €2,358 pro GB | €0,697 pro GB |
| Interaktive Aufbewahrung. Max 2 Jahre | €0,103 pro GB/Monat | ❌ - Fest 30 Tage |
| Langfristige Aufbewahrung. Bis zu 12 Jahre | €0,028 pro GB/Monat | €0,028 pro GB/Monat |
| Abfragepreis über KQL | ✅ Inklusive | ❌ - €0,00697 pro GB gescannter Daten |
| Abfragefunktionen | Volle Abfragefunktionen | Volle Kusto Query Language (KQL) auf einer einzelnen Tabelle, erweiterbar mit Daten aus einer Analytics-Tabelle mittels lookup |
| Warnmeldungen (Alerts) | ✅ | ✅ - Einfache Log Alerts |
| Insights (Workbooks) | ✅ | ❌ - Keine Visualisierungen |
| Dashboards | ✅ | ✅ - Kosten pro Abfrage für Dashboard-Aktualisierungen nicht enthalten |
| Datenexport | €0,140 pro GB | €0,140 pro GB |
| Suchaufträge | €0,00697 pro GB gescannter Daten | €0,00697 pro GB gescannter Daten |
| KQL | ✅ | auf eine einzelne Tabelle beschränkt |
| Wiederherstellung | €0,140 pro GB pro Tag (mindestens 2 TB, 12 Stunden) | €0,140 pro GB pro Tag (mindestens 2 TB, 12 Stunden) |
| Gesamte Aufbewahrungzeit | Bis zu 12 Jahre | Bis zu 12 Jahre |
Zusammenfassung der Tabellenpläne
- Analytics: für kritische Logs, die langfristig und mehrfach in komplexen Queries auszuwerten sind
- Basic: für hohe Log-Volumen mit kurzer Abfragedauer (= Interaktive Aufbewahrungszeitraum 30 Tage) und geringem bis keinen Bedarf an Cross-Table-Analysen
Identifizierte Tabellen für App Insights
| Tabelle | Plan | Aufbewahrungszeit | Umstellung auf Basic möglich | DCR |
|---|---|---|---|---|
| AppPerformanceCounters | Analytics | 90 Tage Standard | - | nicht vorhanden |
| AppTraces | Analytics | 90 Tage Standard | x | nicht vorhanden |
| AppDependencies | Analytics | 90 Tage Standard | - | nicht vorhanden |
| AppMetrics | Analytics | 90 Tage Standard | - | nicht vorhanden |
Wichtige Tabellen in App Insights
| Tabelle | Bedeutung | Gespeicherte Informationen | Empfehlung zur Kostenoptimierung |
|---|---|---|---|
| PerformanceCounters | Leistungsindikatoren der Anwendung | Leistungsmetriken wie CPU, RAM, Festplatte, Netzwerk | Nur relevante Metriken erfassen, Sampling & Aufbewahrungsdauer reduzieren |
| Traces | Protokollierte Nachrichten (Logs) der Anwendung | Logs, Debug-Informationen, Warnungen, Fehler | Log-Level anpassen, unnötige Logs filtern, Sampling einsetzen |
| Dependencies | Abhängigkeiten der Anwendung zu externen Diensten | Aufrufe zu externen Diensten, Datenbanken, APIs | Nur kritische Abhängigkeiten erfassen, Sampling & Filter nutzen |
| Metrics | Benutzerdefinierte oder Standardmetriken | Benutzerdefinierte Ereignisse und Interaktionen | Nur kritische Abhängigkeiten erfassen, Sampling & Filter nutzen |
Zusammengefasst:
Diese Tabellen repräsentieren verschiedene Telemetriedaten, die App Insights sammelt, um die Leistung, Zuverlässigkeit und Nutzung der Anwendungen in den DEV- und QA-Umgebungen zu überwachen und zu analysieren
Transformationen mit KQL
Bei der Umstellung einzelnen Tabellenpläne von “Analytics” nach “Basic” können zusätzliche Kosten für die zu analysierenden Daten anfallen. Aus diesem Grund ist es wichtig, nur die Daten zu aggregieren, die für die jeweilige Visualisierung und Auswertung notwendig sind
Kostenmanagement
- Fortlaufenden Überblick über die Menge der Datenerfassung als auch den Zeitraum von Kosten in Azure Cost Management behalten um frühe Optimierungsmaßnahmen zu erkennen
- Budgetgrenzen und Benachrichtigungen konfigurieren um Kostenüberschreitungen zu vermeiden und frühzeitig zu reagieren
Handlungsempfehlungen zur Kostenoptimierung
| Handlungsfeld | Maßnahmen | Ziel |
|---|---|---|
| Daten-Ingestion | DCR-Filter, reduzierte Sampling-Rate, regelmäßige Prüfung, Insights | Minimierung der Datenerfassung |
| Datenaufbewahrung | Automatische Löschung, Archivierung, Exporte, flexible Retention | Reduzierte Speicherkosten |
| Transformationen | Selektive Erfassung, Datenfilterung/Aggregation | Kosten senken, bessere Datenqualität |
| Kostenmanagement | Kostenüberwachung, Budgets/Alerts, Commitment Tiers, Workspace-Strategie | Transparenz, Kontrolle, kontinuierliche Optimierung |
Daten-Ingestion optimieren
Ziel: Reduktion des Datenvolumens bereits an der Quelle
Empfehlungen:
- Nutzung von Data Collection Rules und Tabellentransformation zur Filterung relevanter Telemetriedaten
- Sampling aktivieren in App Insights (auch adaptives Sampling via SDK)
- Mehrfache Datenerfassung vermeiden (z. B. doppelte SDK-Initialisierung)
- LogLevel optimieren in
AppTraces(wenigerDebug, mehrWarn/Error)
API-Endpunkte analysieren & gezielt filtern
Ziel: Reduktion von Datenkosten durch Analyse hochfrequenter API-Endpunkte
Empfehlungen:
- KQL-Auswertungen automatisieren (nach
_BilledSizegruppieren) - Endpunkte wie z. B.
POST /GetContainerTokenprüfen - Regelmäßige Feedbacks an Entwicklerteams für gezielte Optimierung
Tabellenpläne evaluieren & umstellen
Ziel: Speicherkosten durch geeignete Nutzung von Tabellenplänen senken
Empfehlungen:
- Tabellen auf den Basic-Plan umstellen
- Geringere Kosten (€0,697/GB statt €2,358/GB)
- Analytics-Plan beibehalten wenn Cross-Table-Abfragen notwendig sind und Warnungen eingesetzt werden
Tageslimits nur als Notlösung
Ziel: Vermeidung von Monitoring-Lücken
Empfehlungen:
- Tageslimit von 1 GB/Tag aktuell aktiv aber nicht als Dauerlösung zu verwenden
- Risiko: Wenn das Limit erreicht ist werden alle weiteren Logs verworfen, was zu Blindspots führen kann
- Eine bessere Lösung ist es ein Kombination aus Sampling (und adaptiven Sampling im SDK) und DCRs zu verwenden
Kostenmanagement & Transparenz
Ziel: Frühzeitige Erkennung und Steuerung der Kosten
Empfehlungen:
- Azure Cost Management Alerts & Budgets einrichten
- Dashboards zur Kosten- und Volumenüberwachung erstellen
Weitere Optimierungen
- InstrumentationKey deaktivieren oder SDK vollständig konfigurieren
- Intervallzeiträume anpassen, z. B. bei Dashboard’s
- Weniger Daten erfassen
- Nur relevante Daten speichern
- Bewusstsein in Teams schaffen
- Anpassung der host.json in Azure Functions:
logging.applicationInsights.samplingSettingslogging.logLevel
Fazit
Die durchgeführte Kostenoptimierungsanalyse für Azure Log Analytics und Azure Application Insights in den DEV- und QA-Umgebungen hat gezeigt, dass durch gezielte Maßnahmen erhebliche Kosteneinsparungen erzielt werden können.
Durch die Implementierung von Data Collection Rules und Tabellentransformation, die Aktivierung von Sampling-Methoden und die Evaluierung der Tabellenpläne konnten die Datenerfassungs- und Speicherkosten signifikant reduziert werden und führten zu einer geschätzten Kostenersparnis von rund 70% beim Kunden.



