Waarom je Azure-factuur hoog is ook als je resources juist gedimensioneerd zijn
In dit artikel

Kort samengevat: Rightsizing en reserved instances pakken misschien 20-30% van de beschikbare besparingen. De rest zit verstopt in partnerconfiguratie (PEC), log ingestion sprawl, ongebruikte private endpoints, egress-verrassingen, diagnostic settings die niemand auditet en orphaned resources. De meeste hiervan zijn op te lossen in een kostenreview van 1-2 weken.
De meeste Azure-kostenoptimalisatie begint en eindigt met dezelfde twee hefbomen: rightsizing van VMs en het kopen van reserved instances. Beide zijn valide. Azure Advisor vertelt je erover. Je FinOps-tool toont ze in het eerste dashboard. Als dat alles is wat je doet, pak je misschien 20-30% van de beschikbare besparingen.
De rest zit verstopt op plekken die Advisor niet flagt en FinOps-dashboards niet tonen. Dit zijn problemen op configuratieniveau, architecturale bijeffecten en operationele oversights die zich stilletjes ophopen over maanden. Ze verschijnen niet als een enkele grote kostenpost. Ze verspreiden zich over tientallen kleine kosten die er individueel normaal uitzien maar optellen tot duizenden euro’s per maand.
Hier vinden we consequent geld dat weglekt in enterprise Azure-omgevingen.
| Kostenlek | Typische maandelijkse impact | Hoe te vinden |
|---|---|---|
| Ontbrekende PEC (partner credit) | EUR 7.500-15.000+ | Check CSP-overeenkomst + RBAC-toewijzingen |
| Log ingestion op verkeerde tier | EUR 2.000-5.000 | Vergelijk Basic vs Analytics table-gebruik |
| Ongebruikte private endpoints | EUR 350-1.000 | Azure Resource Graph query |
| Egress en NAT Gateway | EUR 500-4.000+ | Network Watcher flow analytics |
| Diagnostic settings-explosie | EUR 1.000-3.000 | Audit diagnostic settings per resource type |
| Orphaned disks en NICs | EUR 500-2.000 | Resource Graph query voor unattached resources |
Je partner verdient geen credit namens jou
Als je Azure via een CSP-partner draait, biedt Microsoft Partner Earned Credit (PEC) aan wanneer de partner actieve operationele toegang heeft tot je omgeving. De reductie op in aanmerking komend verbruik is vaak zo’n 15%, en afhankelijk van je commerciële overeenkomst kan dat voordeel terugvloeien naar jou als lagere Azure-prijzen of gefinancierde diensten.
We behandelden dit in detail in ons artikel over partnerkostenbesparingen. De korte versie: de meeste ondernemingen op CSP-overeenkomsten ontvangen geen PEC-voordeel omdat de partner niet de vereiste RBAC-toegang heeft, het factureringsmodel verkeerd is geconfigureerd, of niemand het überhaupt heeft ingesteld.
Voor een onderneming die EUR 150.000/maand aan Azure uitgeeft, met ruwweg EUR 80.000 in aanmerking komend voor PEC na aftrek van reservations en savings plans, is het gat zo’n EUR 12.000/maand. Dat is EUR 144.000/jaar aan voordeel dat verdampt door een configuratieprobleem.
Check de RBAC-toewijzingen van je partner. Vraag of PEC wordt verdiend. Als ze niet weten wat PEC is, zegt dat iets over de relatie.
Log Ingestion is je onzichtbare kostenpost
Log Analytics en Microsoft Sentinel factureren op datavolume. Tegen pay-as-you-go tarieven in West Europe kosten Analytics Logs ruwweg EUR 2,50/GB. Een middelgrote Azure-omgeving die 80 GB/dag ingest, geeft zo’n EUR 6.000/maand uit aan logopslag alleen.
Het probleem is niet dat logging duur is. Het probleem is dat de meeste omgevingen alles ingesten op de hoogste tier zonder enige filterstrategie. We schreven over dit patroon in ons Sentinel ingestion cost control-artikel en we zien het in vrijwel elk landgoed dat we reviewen.
Drie dingen drijven onnodige logkosten.
Diagnostic settings die alles doorsturen. Wanneer iemand diagnostic settings inschakelt op een resource, is de standaard in veel IaC-templates “stuur alle categorieën naar Log Analytics.” Voor een drukke Application Gateway betekent dat access logs, performance logs en firewall logs, allemaal landend in de Analytics-tier op vol volume. Voor een storage account betekent het elke read, write en delete-operatie. Een enkel storage account met veel blob-verkeer kan 5-10 GB/dag aan transaction logs genereren waar niemand queries op draait.
Geen gebruik van Basic Logs. Microsoft biedt een Basic Logs-tier aan voor ruwweg EUR 0,50/GB voor data die je nodig hebt voor onderzoek maar waar je geen scheduled queries op draait. NSG flow logs, uitgebreide firewall logs, container stdout en storage access logs zijn allemaal goede kandidaten. Het verplaatsen van 40 GB/dag van Analytics naar Basic bespaart zo’n EUR 80/dag, ofwel ruwweg EUR 2.400/maand.
Geen Data Collection Rules-filtering. DCRs laten je data filteren en transformeren voordat het de workspace bereikt. Een Windows Security Event-stroom die elke event ID ingest, genereert 10-20 GB/dag per honderd servers. Filteren naar alleen de event IDs waar je detectieregels naar verwijzen, scheelt 60-80%. Als je workspace is opgezet voordat DCRs bestonden en niemand de configuratie heeft herbekeken, betaal je voor data die je nooit gebruikt.
Ongebruikte Private Endpoints tellen stilletjes op
Een enkel private endpoint kost zo’n EUR 7/maand. Dat klinkt verwaarloosbaar. In een enterprise-omgeving met 300+ private endpoints zijn de basiskosten meer dan EUR 2.100/maand, nog voordat je de data processing charges meetelt.
De verborgen kosten zijn niet de endpoints die je gebruikt. Het zijn de endpoints die je niet gebruikt. We vinden regelmatig private endpoints voor resources die zijn uitgefaseerd, endpoints aangemaakt in meerdere VNets voor dezelfde resource terwijl maar een VNet daadwerkelijk toegang nodig heeft, en endpoints ingericht “voor het geval dat” tijdens initiële deployments die nooit aan applicatieworkloads zijn gekoppeld.
Een snelle Azure Resource Graph query toont orphaned private endpoints:
resources
| where type == "microsoft.network/privateendpoints"
| extend connectionState = properties.privateLinkServiceConnections[0].properties.privateLinkServiceConnectionState.status
| where connectionState != "Approved" or isnull(connectionState)
Voor endpoints die wel approved zijn maar mogelijk ongebruikt, kruisrefereer met network flow data of DNS query logs. Een endpoint dat zes maanden is ingericht met nul DNS-queries is een kandidaat voor verwijdering.
Naast het endpoint zelf creëert elk private endpoint een network interface met een privé-IP-allocatie en heeft het minimaal een DNS-record nodig in een private DNS zone. Bij grote omgevingen is de kostenvermenigvuldiging reëel: 300 private endpoints betekent 300 NICs die IP-adresruimte verbruiken en 300+ DNS-records verspreid over meerdere zones. De NIC- en DNS-overhead is op zichzelf gratis, maar de operationele kosten van het beheren van verouderde records, de IP-adresruimtedruk in drukke subnets en de troubleshooting-complexiteit wanneer DNS-records verwijzen naar uitgefaseerde endpoints, dat alles komt terug in engineeringuren in plaats van op de Azure-factuur.
Tegen EUR 7/maand per stuk bespaart het opruimen van 50 orphaned endpoints EUR 350/maand. Niet spectaculair op zichzelf, maar deze kleine lekken stapelen zich op over een volledige omgeving.
Patroon: De eerste drie kostenlekken (PEC, log ingestion, private endpoints) zijn configuratieproblemen, geen architectuurproblemen. Ze zijn op te lossen zonder workloads te wijzigen, resources opnieuw te deployen of applicatiecode aan te raken.
Egress-kosten waar niemand voor budgetteerde
Azure-ingress is gratis. Egress niet, en de tarieven variëren aanzienlijk afhankelijk van waar het verkeer naartoe gaat.
Internet-egress vanuit een standaard Azure-regio kost zo’n EUR 0,08/GB voor de eerste 10 TB/maand. Cross-region verkeer binnen Azure kost zo’n EUR 0,02/GB. VNet peering-verkeer binnen dezelfde regio is EUR 0,01/GB in elke richting.
Deze tarieven lijken klein tot je naar de daadwerkelijke volumes kijkt. Een Application Gateway die een publieke API serveert kan makkelijk 500 GB/maand aan internet-egress genereren, zo’n EUR 40/maand. Een druk Azure Front Door-profiel dat statische content serveert voegt meer toe. Cross-region replicatie voor storage accounts of databases genereert doorlopende overdrachtskosten.
De verrassingen komen van onbedoeld cross-region verkeer. Een workload in West Europe roept een API aan die in North Europe wordt gehost omdat niemand heeft gecheckt in welke regio de dependency staat. Een Log Analytics workspace in de ene regio ontvangt diagnostische data van resources in drie andere regio’s, waardoor er cross-region ingress-kosten ontstaan op elke GB.
Application Gateway en Front Door hebben ook hun eigen data processing charges bovenop de onderliggende egress. App Gateway v2 rekent zo’n EUR 0,007/GB voor data processing. Front Door-kosten variëren per tier maar voegen per-request en per-GB kosten toe.
NAT Gateway is een andere egress-kostendriver die onder de radar vliegt. Wanneer al het uitgaande verkeer van een subnet via een NAT Gateway wordt gerouteerd, brengt elke byte internet-verkeer egress-kosten plus NAT Gateway data processing fees (zo’n EUR 0,04/GB) met zich mee. Voor workloads die veel externe API-aanroepen doen, regelmatig container images pullen of data overdragen naar third-party SaaS-platformen tellen de gecombineerde kosten snel op. Een subnet dat 2 TB/maand aan uitgaand verkeer door NAT Gateway duwt, betaalt ruwweg EUR 240/maand aan processing fees alleen, bovenop de standaard internet-egress. De meeste teams budgetteren voor de NAT Gateway-uurkosten (zo’n EUR 32/maand per gateway) maar zien de per-GB processing charge volledig over het hoofd.
Breng je verkeersstromen in kaart. Identificeer cross-region paden die per ongeluk bestaan in plaats van bewust. Coloceer workloads met hun dependencies. Deze wijzigingen vereisen geen nieuwe diensten of tools, alleen bewustzijn van waar verkeer daadwerkelijk naartoe gaat.
Diagnostic Settings die niemand auditet
Elke Azure-resource kan diagnostische data sturen naar Log Analytics, een storage account, Event Hubs of een partneroplossing. Landing zone-policies deployen doorgaans automatisch diagnostic settings met DeployIfNotExists-effecten.
De intentie is goed. Het resultaat, na twee jaar, is vaak een explosie van diagnostic settings die niemand heeft gereviewed. We vinden regelmatig resources die dezelfde logs naar twee verschillende Log Analytics-workspaces sturen (een vanuit een landing zone-policy, een handmatig toegevoegd tijdens troubleshooting). Resources die alle diagnostische categorieën doorsturen terwijl er maar twee nodig zijn. En storage account diagnostic settings die enorme volumes transaction logs genereren voor accounts die dienen als archive tiers met minimale toegang.
Een enkele Azure SQL Database met alle diagnostische categorieën ingeschakeld kan 2-5 GB/dag naar Log Analytics sturen. Vermenigvuldig met 40 databases in de hele omgeving en je hebt 80-200 GB/dag aan SQL-diagnostics, waarvan het meeste door niemand wordt bevraagd.
De audit is eenvoudig: lijst alle diagnostic settings op in de omgeving met Azure Resource Graph, identificeer welke categorieën zijn ingeschakeld per resource type, en vergelijk met wat je monitoring- en security-teams daadwerkelijk gebruiken. Verwijder de categorieën die geen dashboards, alerts of detectieregels voeden.
resources
| where type contains "microsoft.insights/diagnosticsettings"
| extend resourceId = tostring(properties.storageAccountId)
| summarize count() by type, tostring(properties.logs)
Alleen deze exercitie bespaart vaak al 20-30% van de Log Analytics-uitgaven.
Orphaned Resources
De klassieke verspillingscategorie, maar het blijft bestaan omdat niemand de opruiming in eigendom heeft.
Managed disks die los staan van VMs stapelen zich op wanneer VMs worden verwijderd maar hun disks zijn ingesteld om te blijven bestaan. Een Premium SSD P30 (1 TB) kost zo’n EUR 100/maand, of het nu attached is of niet. We vinden routinematig 20-50 orphaned disks in middelgrote omgevingen, goed voor EUR 500-2.000/maand aan verspilling.
Public IP-adressen die niet aan een resource zijn gekoppeld kosten zo’n EUR 3,50/maand per stuk (Basic SKU) of EUR 4,40/maand (Standard). Network interfaces die los staan van VMs kosten op zichzelf niets maar duiden op onvolledige opruiming. Network Security Groups die niet aan een subnet of NIC zijn gekoppeld zijn gratis maar voegen operationele verwarring toe.
De grotere kostenposten onder orphaned resources zijn vaak minder voor de hand liggend: Azure Bastion hosts (EUR 140/maand) ingericht voor een migratie die maanden geleden is afgerond, VPN Gateways (EUR 130+/maand) voor verbindingen die zijn vervangen door ExpressRoute, en App Service Plans zonder gedeployde apps (gefactureerd voor het plan, niet de apps).
Een praktische kostenaudit in vijf stappen
Als je Azure-factuur hoger voelt dan zou moeten en het gebruikelijke rightsizing-advies het gat niet heeft gedicht, werk dan door deze stappen.
-
Check je CSP-partnerconfiguratie. Verifieer PEC-geschiktheid, bevestig RBAC-toegang, en vraag hoe PEC-waarde is verwerkt in je commerciële voorwaarden. De fix is een gesprek, geen technische exercitie.
-
Audit Log Analytics ingestion. Draai de
Usage-tabelquery om GB/dag per data type te zien. Identificeer de top vijf tabellen op volume. Bevestig voor elk daarvan dat een detectieregel, dashboard of operationeel proces ervan afhankelijk is. Verplaats high-volume, low-signal tabellen naar Basic Logs. -
Lijst alle private endpoints op en kruisrefereer met DNS-queries en network flows. Verwijder endpoints voor uitgefaseerde resources en consolideer dubbele endpoints.
-
Breng egress-paden in kaart. Gebruik Network Watcher flow logs of Cost Management om cross-region en internet-egress te identificeren. Zoek naar onbedoeld cross-region verkeer tussen workloads en hun dependencies.
-
Exporteer alle diagnostic settings via Resource Graph. Vergelijk ingeschakelde categorieën met daadwerkelijk gebruik. Schakel categorieën uit die geen monitoring-, security- of compliance-vereisten voeden.
Elke stap richt zich op een kostengebied dat standaard FinOps-tooling mist. Doorloop ze elk kwartaal. Azure-omgevingen zijn niet statisch, en de kostenlekken die er vandaag niet zijn verschijnen over zes maanden wanneer workloads veranderen en nieuwe resources worden ingericht.
Typische opdracht: Een Azure kosten- en platformreview gaat verder dan VM rightsizing. We analyseren partnerconfiguratie, log ingestion-patronen, private endpoint sprawl, egress-stromen, diagnostic settings en orphaned resources. De output is een geprioriteerde besparingskaart met EUR-schattingen en implementatiestappen. De meeste reviews duren 1-2 weken.
Gerelateerd: Je Azure-factuur is hoger omdat je partner niets beheert PEC en partnerverantwoordelijkheid · Microsoft Sentinel in 2026 en hoe je ingestion-kosten beheerst log ingestion-optimalisatie · Wat een Azure Landing Zone Audit echt vindt governance-hiaten die kosten drijven
Op zoek naar Azure-architectuurbegeleiding?
Wij ontwerpen en bouwen Azure-fundamenten die schalen - landing zones, netwerken, identiteit en governance op maat van uw organisatie.