Zurück zu allen Beiträgen

Veröffentlicht am 20. November 2025 · Zuletzt geprüft 19. April 2026

Die Hetzner-Cloud-Kosten, die Sie vermutlich übersehen

Piotr HajkowskiVon Piotr Hajkowski

In diesem Artikel

  1. Die CLI vorbereiten
  2. Nicht zugewiesene Primary IPs
  3. Floating IPs, die nie neu zugewiesen wurden
  4. Verwaiste Volumes

Aktualisiert im April 2026. Alle Eurobeträge spiegeln Hetzners Preisanpassung zum 1. April 2026 wider. Volumes und Snapshots sind 30 % teurer, die meisten Compute-Tarife liegen 30-37 % höher. Das Audit ist heute wertvoller als bei der ersten Veröffentlichung - nicht weniger.

Eine typische Hetzner-Rechnung besteht zu 85 % aus Servern und zu 15 % aus allem anderen. In genau diesem „alles anderen" steckt die Verschwendung, und daran denken Engineers am Freitagnachmittag fast nie. Ein abgetrenntes Volume aus einem Projekt, das Sie vor sechs Monaten stillgelegt haben. Ein paar Primary-IPv4-Adressen, die ein terraform destroy überlebt haben, weil sie als eigenständige Ressourcen deklariert waren. Ein Entwicklungs-CCX13, der seit September „nur fürs Wochenende ausgeschaltet" ist.

Nichts davon springt in der Monatssumme der Console als Position ins Auge, die laut Ich bin Verschwendung ruft. Es sind kleine, wiederkehrende Posten, die sich mit der Zeit wie Fixkosten anfühlen. Dieser Beitrag geht die sechs Kategorien durch, in denen dieses Geld tatsächlich steckt, zeigt, was jede einzelne zu den Tarifen nach dem 1. April 2026 kostet, und welche hcloud-Kommandos sie sichtbar machen. Er setzt voraus, dass Sie bereits ein Hetzner-Projekt haben und zumindest schon einmal über terraform destroy nachgedacht haben.


Die CLI vorbereiten

Zwei Werkzeuge: hcloud und jq. Auf einem Debian-/Ubuntu-Host:

curl -sSLO https://github.com/hetznercloud/cli/releases/latest/download/hcloud-linux-amd64.tar.gz
sudo tar -C /usr/local/bin --no-same-owner -xzf hcloud-linux-amd64.tar.gz hcloud && rm hcloud-linux-amd64.tar.gz
sudo apt-get install -y jq

Legen Sie in Hetzner Console → Security → API Tokens ein API-Token mit Read & Write für das zu prüfende Projekt an und richten Sie anschließend die CLI darauf aus:

hcloud context create audit-2026

Ein kurzes hcloud datacenter list sollte die sechs Hetzner-Rechenzentren (fsn1, nbg1, hel1, ash, hil, sin) ausgeben. Wenn das klappt, können Sie loslegen.


Nicht zugewiesene Primary IPs

Seit Hetzner 2022 die IP-Abrechnung entkoppelt hat, ist jede Primary IP eine eigenständig abgerechnete Ressource, die den Server überdauert, dem sie ursprünglich zugewiesen war. Wenn Sie einen Server in der Console löschen und dabei das Häkchen bei „Delete associated IPs" nicht setzen - ein typischer Fall beim schnellen Durchklicken - bleibt die IP bestehen: 0,50 €/Monat, unbefristet.

In einem Terraform-Projekt tritt dasselbe Muster auf, wenn hcloud_primary_ip als eigenständige Ressource deklariert ist - also genau so, wie es offiziell empfohlen wird - aber nicht sauber an den Lebenszyklus des Servers gekoppelt wird. Ein späteres terraform destroy -target=hcloud_server.web hinterlässt die IP dann verwaist - im State und auf der Rechnung.

hcloud primary-ip list -o columns=id,name,ip,type,assignee

Zeilen mit - in der Spalte ASSIGNEE sind nicht zugewiesen. IPv6-Primary-IPs sind kostenlos; ignorieren Sie sie. Für jede IPv4, die Sie entfernen möchten, deaktivieren Sie den Schutz (falls aktiviert) und löschen sie:

hcloud primary-ip disable-protection <id> delete
hcloud primary-ip delete <id>

0,50 €/Monat pro IPv4 wirken für sich genommen harmlos, aber fünf übrig gebliebene IPs in einem Projekt, das schon drei Architektur-Reviews hinter sich hat, summieren sich auf 30 €/Jahr - für nichts.


Floating IPs, die nie neu zugewiesen wurden

Floating IPs kosten jeweils 3,00 €/Monat, egal ob sie Traffic leiten oder nicht, und anders als Primary IPs lassen sie sich nie „standardmäßig" an einen Server hängen - sie sind ein HA-Baustein, den Sie explizit zuweisen müssen. Das Fehlermuster ist vorhersehbar: Ein Team baut eine Floating IP in einen Failover-Plan ein, der Plan wird stillschweigend aufgegeben, und die IP bleibt über Jahre liegen.

hcloud floating-ip list -o columns=id,name,ip,type,server,home_location

Alles mit - unter SERVER ist nicht angebunden. Prüfen Sie vor dem Löschen, ob noch DNS-Einträge darauf zeigen - eine Floating IP wird üblicherweise irgendwo über einen Hostnamen referenziert:

hcloud floating-ip describe <name>
dig +short api.example.com  # sicherstellen, dass nichts mehr hierher auflöst
hcloud floating-ip disable-protection <id> delete
hcloud floating-ip delete <id>

Jede Löschung spart 36 €/Jahr. Drei aufgegebene Failover-IPs, verteilt über eine Organisation mit mehreren Projekten, sind beim ersten Audit häufig schon der größte Einzelfund.


Verwaiste Volumes

Block Volumes kosten jetzt 0,0572 €/GB/Monat (vorher 0,044 €). Ein verwaistes 500-GB-Volume schlägt mit 28,60 €/Monat oder 343 €/Jahr zu Buche, und große Waisen sind keineswegs selten. Meist entstehen sie nach einem von zwei Mustern.

Das erste ist Server gelöscht mit aktivierter Option „Volume behalten". Die Hetzner Console fragt beim Löschen per Checkbox danach, und viele Engineers lassen sie „zur Sicherheit" aktiviert - mit dem Vorsatz, später zurückzukommen. Sie kommen nicht zurück. Das zweite ist Volume in der falschen Location erstellt und nie angehängt. Volumes sind an ein bestimmtes Rechenzentrum gebunden und lassen sich nur an Server am selben Standort anhängen - ein versehentlich in fsn1 angelegtes Volume, während alle Ihre Server in nbg1 laufen, ist praktisch vom ersten Moment an verwaist.

hcloud volume list -o columns=id,name,size,server,location

Volumes mit - unter SERVER sind verwaist. Wenn Sie wiederherstellbare Daten vermuten, hängen Sie das Volume an einen beliebigen Server am selben Standort an und mounten Sie es vor der Entscheidung schreibgeschützt:

hcloud volume attach <name> --server <any-server-in-same-location>
# auf dem Server:
sudo mount -o ro /dev/disk/by-id/scsi-0HC_Volume_<id> /mnt

Wenn Sie sicher sind:

hcloud volume detach <name>
hcloud volume delete <name>

Snapshot-Altlasten

Snapshots werden anhand der komprimierten Image-Größe mit 0,0143 €/GB/Monat abgerechnet (vorher 0,011 €) und wachsen an wie Logdateien: leise und mit der Zeit immer schneller. Zwei Gewohnheiten treiben das.

Die eine sind Snapshots vor jedem Deployment, für die nie eine Aufbewahrungsregel festgelegt wird - ein CI-Job erstellt vor jedem Deploy einen Snapshot des Webservers, nichts löscht ihn, und drei Jahre später sind es 400. Die andere sind manuell erstellte „Vorsichtshalber"-Snapshots, die anschließend vergessen werden. Beides summiert sich: Zehn 100-GB-Snapshots zum neuen Tarif ergeben 14,30 €/Monat.

So finden Sie alles, was älter als 90 Tage ist:

hcloud image list --type snapshot -o json \
  | jq -r '.[] | select((now - (.created | fromdateiso8601)) > (90*24*3600))
           | "\(.id)\t\(.name)\t\(.disk_size) GB\t\(.created)"'

Löschen mit:

hcloud image disable-protection <id> delete
hcloud image delete <id>

Die eigentliche Lösung ist Retention-as-Code. Ein nächtlicher Job, der alles löscht, was älter als N Tage ist, eliminiert diese Kategorie vollständig. Für das verwandte Muster „Server snapshotten, um nicht mehr dafür zu zahlen" siehe → Warum Hetzner für ausgeschaltete Server abrechnet.


Backups auf Servern, die sie nicht brauchen

Automatische Backups sind ein Aufschlag von +20 % auf den Monatspreis des Servers. Nach April 2026 ist der Grundpreis höher, also ist auch der Aufschlag absolut größer: Ein CCX13 zu 15,99 €/Monat kostet mit aktivierten Backups 19,19 €/Monat - 38 €/Jahr mehr als derselbe Server ohne Backups.

Für Produktion ist der Aufschlag vertretbar. Weniger vertretbar ist er auf über Jahre gewachsenen Dev- und Staging-Maschinen, bei denen Backups per Default in einem Terraform-Modul aktiviert wurden und niemand später zurückgekehrt ist, um das aufzuräumen.

hcloud server list -o columns=id,name,status,type,backup_window

Jede Zeile mit einem Wert in BACKUP_WINDOW hat Backups aktiv. Deaktivieren Sie sie auf Servern, die sie nicht brauchen:

hcloud server disable-backup <name>

Ausgeschaltete Server

Hetzner berechnet ausgeschaltete Server zum vollen Preis - die Kapazität bleibt auf dem physischen Host reserviert, bis Sie den Server löschen. Das ist mit Abstand die größte Kategorie vermeidbarer Hetzner-Kosten, die wir sehen, und zugleich die am häufigsten missverstandene - deshalb gibt es dazu einen eigenen Beitrag: → Warum Hetzner für ausgeschaltete Server abrechnet.

Kurzfassung: Stoppen ist kein Abrechnungszustand. Wenn Sie aufhören möchten, für einen Server zu zahlen, erstellen Sie einen Snapshot und löschen den Server; erstellen Sie ihn bei Bedarf aus dem Snapshot neu. Kandidaten finden:

hcloud server list -o columns=id,name,status,type | awk '$3=="off"'

Traffic-Überschreitungen

Das enthaltene Traffic-Kontingent beträgt 20 TB pro Server in den EU-/US-Regionen und 1 TB pro Server in Singapur und wird projektweit über alle Server gepoolt. Die Überschreitung kostet 1 €/TB in EU/US und 7,40 €/TB in Singapur - selten der größte Fund, aber einen Blick wert, wenn Sie trafficintensive Workloads oder einen CDN-Origin auf Hetzner betreiben.

hcloud server describe <name> -o json \
  | jq '{name, included_traffic, outgoing_traffic, ingoing_traffic}'

Hetzner benachrichtigt per E-Mail bei 75 % und 100 % des Pools. Behandeln Sie diese Mails als Auslöser zur Untersuchung, nicht als erste Warnung - wenn die 100-%-Mail eintrifft, zahlen Sie bereits die Überschreitung.


Die komplette Prüfung in einem Durchlauf

Die obigen Kommandos sind die Bausteine. Für einen einmaligen Durchlauf über alle sechs Kategorien plus eine Dry-Run-Vorschau der Bereinigung liegen zwei Skripte als GitHub Gist bereit:

  • hetzner-audit.sh - meldet nicht zugewiesene IPs, Floating IPs, verwaiste Volumes, alte Snapshots, Server mit aktivierten Backups und ausgeschaltete Server, jeweils mit einer monatlichen Kostenschätzung.
  • hetzner-cleanup-dry-run.sh - gibt die hcloud … delete-Kommandos aus, die ausgeführt würden, ohne sie tatsächlich auszuführen. Kopieren Sie heraus, was Sie wirklich löschen möchten.

Führen Sie das Audit regelmäßig aus, nicht nur einmal. Verwaiste Ressourcen sammeln sich mit jedem Refactoring und jedem ausscheidenden Engineer an; ein monatlicher Cron bringt auf Dauer mehr als ein einmaliger perfekter Großputz.


Vier Fehler, auf die Sie stoßen werden

unauthorized - das Token wurde rotiert oder gehört zu einem anderen Projekt; legen Sie den Kontext neu an. rate_limit_exceeded - die API erlaubt 3.600 Anfragen pro Stunde und Projekt; fügen Sie sleep 1 zwischen Schleifeniterationen ein. protected - führen Sie vor dem Löschen hcloud <resource> disable-protection <id> delete aus. locked - auf dieser Ressource läuft bereits eine Aktion; warten Sie 30-60 Sekunden und versuchen Sie es erneut.


Das Fazit

Der Serverpreis aus der Schlagzeile ist nicht der Ort, an dem sich Hetzners Verschwendung versteckt. Sie steckt in sechs Kategorien: Primary IPs, Floating IPs, verwaiste Volumes, alte Snapshots, überflüssige Backups und ausgeschaltete Server. Nach der Preiserhöhung im April 2026 kostet es rund 30 % mehr, jede einzelne davon zu ignorieren, als noch vor einem Quartal.

CloudTally macht alle sechs Kategorien automatisch bei jedem Sync sichtbar und liefert eine Kostenaufschlüsselung pro Ressource, wie sie auch die obigen Skripte erzeugen - das Audit läuft also von selbst. Ob mit CloudTally oder dem Gist: Das Prinzip bleibt gleich - nicht genutzte Ressourcen sind nicht kostenlos, und Ihre Rechnung wird Sie immer wieder daran erinnern.

Dieser Artikel wurde maschinell übersetzt.