Log Aufbewahrung Kosten entstehen aus zwei Fehlern, die sich addieren: Loggruppen und Tabellen, die nie ablaufen, und Debug-Logs, die in voller Menge eingeliefert werden, obwohl niemand sie liest. Die Einsparung entsteht, weil Ingestion je GB und Aufbewahrung je GB-Monat berechnet werden und beides an drei Stellen sinkt: an der Quelle durch Logstufen und Ausschlüsse, bei der Einlieferung durch günstigere Klassen und Pläne, und bei der Aufbewahrung durch Fristen. Die Behebung gehört dem Team, das die Anwendung betreibt, die loggt, weil nur dort bekannt ist, welche Zeilen ein Vorfall braucht.

Symptom

Die Rechnung zeigt Ingestion- und Speicherpositionen, die mit der Zeit wachsen, nicht mit der Last. Bei AWS sind das lineItem/UsageType EUC1-DataProcessing-Bytes für die Einlieferung und EUC1-TimedStorage-ByteHrs für die Aufbewahrung unter AmazonCloudWatch, je Loggruppe als lineItem/ResourceId; dazu VendedLog-Bytes für Logs anderer Dienste. Bei Azure stehen MeterCategory Log Analytics mit Data Ingestion-, Basic Logs Data Ingestion- und Data Retention-Metern je Arbeitsbereich. In Google Cloud trägt Cloud Logging die SKUs Log Volume für die Einlieferung und Log Retention für Daten über der Standardaufbewahrung, je Projekt. Was Observability grundsätzlich kostet, steht in Observability, Logging und Monitoring; diese Seite behandelt die Logs, die niemand braucht.

neinjaJede Zeile, die die Anwendungschreibt, Debug eingeschlossenDie Einlieferungsposition,je GB: DataProcessing-Bytes,Data Ingestion, Log VolumeEine Fristgesetzt?Die Speicherposition wächstjeden Monat, je GB-Monat:TimedStorage-ByteHrs,Data Retention, Log RetentionDie Speicherposition pendeltsich nach der Frist einPositionen, die mit der Zeitwachsen, während die Lastflach bleibt
Die Einlieferung wird je GB beim Eintreffen abgerechnet, die Speicherung je GB-Monat, solange die Daten bleiben; eine Gruppe ohne Frist wächst bei flacher Last jeden Monat

So erkennen Sie es

AWS

Die Loggruppen ohne Aufbewahrungsfrist, mit gespeicherter Menge und Klasse:

aws logs describe-log-groups --query 'logGroups[?retentionInDays==null].[logGroupName,storedBytes,logGroupClass]' --output table

Die Einlieferung je Gruppe über zwei Wochen, als Summe je Tag:

aws cloudwatch get-metric-statistics --namespace AWS/Logs --metric-name IncomingBytes \
  --dimensions Name=LogGroupName,Value=<log-group> --statistics Sum \
  --start-time 2026-10-07T00:00:00Z --end-time 2026-10-21T00:00:00Z --period 86400

CloudWatch Logs kennt zwei Klassen: Standard mit allen Funktionen und Infrequent Access mit einem niedrigeren Preis je eingeliefertem GB, ohne Live Tail, Metrikfilter, Abonnementfilter und die Einlieferung von Container Insights; die Klasse wird beim Anlegen festgelegt und ist danach nicht zu ändern, die Speicherpreise sind in beiden gleich (gelesen am 2026-10-21, Logklassen). Trusted Advisor und Compute Optimizer prüfen Loggruppen nicht; die Loggruppen mit den höchsten IncomingBytes je Tag sind die Liste. In den Abrechnungsdaten ist der Kandidat eine Loggruppe mit wachsendem TimedStorage-ByteHrs bei gleichbleibendem DataProcessing-Bytes (AWS Cost and Usage Report).

Azure

Die Tabellen eines Arbeitsbereichs mit Plan und Aufbewahrung, und die Einlieferung je Tabelle der letzten 14 Tage:

az monitor log-analytics workspace table list --resource-group <rg> --workspace-name <workspace> \
  --query "[].{name:name, plan:plan, retention:retentionInDays, total:totalRetentionInDays}" -o table
az monitor log-analytics query --workspace <workspace-id> \
  --analytics-query "Usage | where TimeGenerated > ago(14d) | summarize GB=sum(Quantity)/1000 by DataType | order by GB desc"

Log Analytics kennt drei Tabellenpläne: Analytics für Überwachung und Alarme, Basic für Fehlersuche, Auxiliary für große Mengen zur langfristigen, günstigen Ablage; ein Wechsel ist einmal je Woche möglich, Basic und Auxiliary berechnen Abfragen eigens, und Alarme funktionieren auf Auxiliary-Tabellen nicht (Tabellenpläne). Azure Advisor empfiehlt den Basic-Plan für Tabellen mit mehr als 1 GB Einlieferung im Monat, die dafür geeignet sind, meldet einen Anstieg der Einlieferung gegenüber den drei Vorwochen, schlägt Verpflichtungsstufen vor und empfiehlt für Container Insights den Wechsel auf Prometheus-basierte Metriken statt Log-basierter. Im Kostenexport ist der Kandidat ein Arbeitsbereich mit wachsenden Data Retention-Metern (Azure-Kostenexporte).

Google Cloud

Die Log-Buckets mit Aufbewahrung, und die Senken mit ihren Ausschlüssen:

gcloud logging buckets list --format="table(name,location,retentionDays,locked)"
gcloud logging sinks list --format="table(name,destination,filter,exclusions[].filter.list())"

Der Bucket _Default behält Logs 30 Tage, einstellbar zwischen 1 und 3.650 Tagen, und Google berechnet Aufbewahrung nur für Daten über der Standardfrist; ausgeschlossene Logs werden nicht eingeliefert und nicht berechnet (Log-Buckets). Die Metrik logging.googleapis.com/billing/bytes_ingested je Projekt und Ressourcentyp zeigt, welcher Dienst die Menge erzeugt. Einen Recommender für Logs gibt es nicht. Im Abrechnungsexport ist der Kandidat ein Projekt mit Log Volume weit über dem Freikontingent und einer Log Retention-Position (Google-Cloud-Abrechnungsexport).

So beheben Sie es

  1. Je Loggruppe oder Tabelle die Frage beantworten, wie viele Tage ein Vorfall rückwirkend braucht und ob eine Pflicht länger verlangt; der Rest ist Aufbewahrung ohne Nutzen. Die Fristen gehören in die Kostenrichtlinie, je Logart.
  2. Fristen setzen: aws logs put-retention-policy --log-group-name <log-group> --retention-in-days 30; az monitor log-analytics workspace table update --resource-group <rg> --workspace-name <workspace> --name <table> --retention-time 30; gcloud logging buckets update _Default --location=global --retention-days=30. Keiner dieser Aufrufe hat ein Dry-Run; die Liste aus der Erkennung ersetzt es.
  3. Die Einlieferung senken, an der Quelle zuerst: Debug-Stufe nur in der Fehlersuche, Sampling für Zugriffslogs, Health-Check-Zeilen ausfiltern; dann beim Provider: eine neue Loggruppe der Klasse Infrequent Access für Logs ohne Metrikfilter und Abonnements, az monitor log-analytics workspace table update --plan Basic für Tabellen ohne Alarme, Transformationen in Datensammlungsregeln, die Spalten und Zeilen verwerfen, Ausschlüsse in Google Cloud mit gcloud logging sinks update _Default --add-exclusion=name=debug,filter='severity<=DEBUG'.
  4. Metriken aus Logs ersetzen: Zähler, die heute aus Logzeilen gefiltert werden, als Metrik emittieren, und für Container die Metrik-basierte Erfassung statt der Log-basierten, wie Microsoft sie für Container Insights empfiehlt; Logs, die nur als Archiv dienen, nach S3, Blob Storage oder Cloud Storage exportieren, wo das GB-Monat weniger kostet als im Logdienst.

Eine neue Frist wirkt rückwirkend und löscht ältere Daten binnen Tagen; die Einlieferungsposition sinkt im nächsten Tagesexport nach der Änderung an der Quelle.

janeinJe Loggruppe oder Tabelle: wieviele Tage ein Vorfallrückwirkend brauchtVerlangt einePflicht länger?Die Frist, die die Pflichtnennt, in der Kostenrichtlinieje LogartDie Tage, die der Vorfallbraucht, in derKostenrichtlinie je LogartFristen setzen gegen die Listeaus der Erkennung; kein Aufrufhat ein Dry-RunDie Einlieferung senken, an derQuelle zuerst: Debug-Stufe,Sampling, Health-Checks; dannbeim Provider: Klasse, Plan,Transformationen, AusschlüsseMetriken aus Logs ersetzenund Archivlogs nach S3, BlobStorage oder Cloud StorageexportierenEine neue Frist löscht ältereDaten binnen Tagen; dieEinlieferungsposition sinkt imnächsten Tagesexport
Die Frist folgt aus dem, was ein Vorfall oder eine Pflicht braucht; die Einlieferung sinkt an der Quelle vor dem Provider, und Metriken und Archive verlassen den Logdienst

Risiken und Nebenwirkungen

  • Eine Frist löscht auch, was ein Audit später verlangt; Logs mit Aufbewahrungspflicht gehören vor der Frist in ein Archiv mit eigener, längerer Frist.
  • Infrequent Access und Basic sind Einbahnstraßen in Funktionen: keine Metrikfilter, keine Abonnements, kein Live Tail bei AWS, keine Alarme und eigene Abfragekosten bei Azure. Ein Alarm, der auf einer Logzeile beruht, bricht, wenn die Gruppe wechselt.
  • Sampling und Ausschlüsse an der Quelle verlieren Zeilen, die ein seltener Fehler braucht; ein Ausschluss nach Schweregrad ist sicherer als einer nach Zufall.
  • Der Export in Objektspeicher verschiebt die Kosten, er beendet sie nicht; der Bucket braucht seine eigene Lifecycle-Regel.
  • Verpflichtungsstufen bei Azure senken den Preis je GB, binden aber an eine Menge; eine Senkung der Einlieferung unter die Stufe lässt die Stufe leerlaufen (Commitment-Abdeckung und -Auslastung).

So weisen Sie die Einsparung nach

Vorher: je Loggruppe, Tabelle oder Projekt die eingelieferten GB und die gespeicherten GB-Monate im letzten vollen Monat, DataProcessing-Bytes und TimedStorage-ByteHrs, Data Ingestion und Data Retention, Log Volume und Log Retention. Nachher: dieselben Positionen im ersten vollen Monat nach Frist und Quellenänderung; die Speicherposition muss auf das Niveau der Frist fallen, die Einlieferung um die ausgeschlossene Menge, und die Zahl der Alarme und Dashboards, die noch funktionieren, unverändert sein. Die Differenz aus der eigenen Rechnung ist die Schätzung, die Freigabe des Teams macht sie akzeptiert, die Änderung umgesetzt, und die Rechnung des Folgemonats belegt sie nach dem Muster von geschätzt, akzeptiert, umgesetzt, verifiziert. Die Zahl der Loggruppen und Tabellen ohne Frist ist die Kennzahl, die danach null bleibt.

Quellen

Gelesen am 2026-10-21. CloudWatch Logs, Logklassen, aws logs, Azure Monitor, Tabellenpläne, Azure Advisor, Kostenempfehlungen, Cloud Logging, Log-Buckets, gcloud logging sinks.