Australian cloud for business software — built and run in Sydney since 2003

NetLeverage
NetLeverage

Measuring cloud egress before you commit: method, tools and worked calculations

Technical article
Cloud

About this article: AI-assisted writing, reviewed against the cited sources. This is source research, not a lab validation of the procedures. Check the stated versions and your own recovery requirements before making changes.

Egress is data leaving a cloud provider's network or moving between its billing locations. Estimate it by mapping every path your workload will use after the move, measuring today's bytes on each path for at least a full business cycle, then applying the provider's tiers in its own unit.

The trap is to measure only what crosses your internet link today. Traffic between users and servers on your own network is free and often invisible on that link. Move the server to the cloud and the same traffic can become metered.

Rates below were read on 10 November 2026, are in US dollars and exclude tax. Commands come from vendor documentation or were written for this article where labelled. None was run in a lab.

Why it matters

Compute and storage are easy to price because they follow a size you choose. Data transfer follows behaviour: who downloads what, how chatty the application is, and where each tier sits.

A monthly total alone is not enough. One gigabyte can cost nothing, or be charged twice, depending on its path. So the model needs a separate line for each path.

What is actually metered

These are vendor facts for AWS, Azure and Google Cloud. Your region and agreement can change them.

Path AWS Azure Google Cloud
Into the cloud from the internet No charge Free No charge, though services that process it may charge
Internet out, Australian source $0.114 per GB first 10 TB, Sydney $0.12 per GB next 10 TB Varies by source and destination
Monthly free internet allowance 100 GB, across services and Regions First 100 GB Standard Tier: first 200 GiB per month free, per account, across all regions. Read Premium with your region selected
Between zones, same region Charged in both directions, $0.01 per GB each way in Sydney Same Availability Zone is free; the table lists no cross-zone rate, so confirm on a pilot $0.01 per GiB within one VPC network
Between regions in Oceania $0.08 per GB, Sydney to Melbourne $0.08 per GB $0.08 per GiB

Other charges sit on top:

Watch the unit. Azure states 1 TB = 1,000 GB. Google prices per GiB, which is 1,073,741,824 bytes. AWS labels its unit GB, and its Sydney price list sets the first tier boundary at 10,240, which suggests 1,024 GB per TB. Check how a real bill counts before you rely on the difference.

Step 1: Draw the paths after the move

Write every flow as source, destination and path. This is editorial method, and it decides which lines the model needs.

Flow Today After the move
Users opening files from a server LAN, free Cloud to office: metered
Web visitors Internet link Cloud to internet: metered
Nightly backup to a second site WAN link Inter-region or internet: metered
Database replica in a second zone LAN or campus Inter-zone: metered in some clouds
Application server to database Same switch Free only if placement keeps it on a no-charge path
Restores and DR tests Rare Metered when they run
Patches and downloads Inbound Inbound is free, but replies and NAT processing may apply

Consider which way each byte flows. Uploads from an office to a server are ingress after the move. Reads from that server are egress. So you need both counters, split by direction.

Step 2: Measure totals with interface counters

Use counters from routers, firewalls or switch ports to get reliable totals by direction.

For network devices, poll the 64-bit ifHCOutOctets counter and its inbound partner. RFC 2863 says a 32-bit octet counter can wrap in 34 seconds at 1 Gbit/s, which is why the 64-bit version matters. It also says the count includes framing characters, so it reads slightly higher than IP bytes. Counters can have discontinuities after a device reinitialises, so handle resets in your tool.

Choose ports with care. The internet edge gives you today's internet traffic. The switch ports facing servers that will move give you the LAN traffic that may become egress. On a server's own interface, the out-counter shows what that server sent, which estimates its future egress. A switch sees the same port from the other side: its ifHCInOctets counts what the server sent, and its ifHCOutOctets counts traffic towards the server. That reversal is an editorial warning.

On a Linux host, vnStat keeps five-minute, hourly, daily, monthly and yearly totals per interface. It reads kernel counters rather than capturing packets, so it is light. It reports totals, not destinations. The vnstat command only queries the database, and the vnstatd daemon is "responsible for data retrieval, caching and storage", so keep it running for the whole measuring period.

vnstat -m -i eth0
vnstat --json m -i eth0

The JSON form reports bytes. The interface name is a placeholder.

Step 3: Split totals by destination with flow records

Totals do not tell you which traffic moves. Flow records do. NetFlow and IPFIX exporters on routers and firewalls send per-flow summaries to a collector.

nfdump can then rank them. This example adapts the manual's statistic and filter syntax for this article, with placeholder paths and networks:

nfdump -r FLOWFILE -s dstip/bytes -n 20 'src net 192.0.2.0/24'
nfdump -r FLOWFILE -s record/bytes -A srcip,dstip 'src net 192.0.2.0/24'

The first lists the top destinations of traffic sent by a server subnet. The second shows which pairs exchange most data. Classify results into office, internet, other site and internal.

Check whether the exporter samples flows. If it does, scale with care and compare the result against the interface counters from Step 2. A large gap means the flow data needs fixing before you trust it. That comparison is editorial.

Measure across a period that includes month-end processing, full backups, patching and any quarterly peak. A single quiet week can understate the bill. This article suggests at least one full month, and preferably a quarter.

Step 4: Run a pilot and read flow logs

A pilot shows protocol behaviour that estimates miss. All three clouds offer flow logs, and they count different things.

Cloud Byte field What it counts Coverage
AWS bytes Bytes transferred during the flow Not all traffic: DNS to the Amazon server, DHCP and metadata are excluded
Azure Bytes sent, bytes received Packet header and payload Recorded at one-minute intervals
Google Cloud bytes_sent Estimated user payload bytes Sampled; primary rate varies with host load

Payload-only and header-included numbers will never match exactly. Google advises aggregating over longer periods or more resources for accuracy.

On AWS, use a custom format with flow-direction, traffic-path and pkt-dst-aws-service. The traffic-path field describes egress records only. A value of 8 means an internet gateway, 7 a gateway VPC endpoint, 2 either of those, and 1 another resource in the same VPC. By that definition, a private instance sending to a NAT gateway shows 1, so also log the NAT gateway's interface. That reading is an inference from the field definition.

AWS gives a Logs Insights example for top destinations, shown with its subnet as a placeholder:

filter isIpv4InSubnet(srcAddr, "192.0.2.0/24")
| stats sum(bytes) as bytesTransferred by dstAddr
| sort bytesTransferred desc
| limit 15

Flow logs have their own cost. Azure charges per gigabyte collected after 5 GB a month per subscription, and storage is separate. AWS applies ingestion and archival charges. Include them in the pilot budget.

Step 5: Reconcile against the bill

The bill is the final measure. Reconcile the flow data to it before you extrapolate.

Cloud Where to look Field
AWS Cost and Usage Report lineItem/UsageType, such as APS2-DataTransfer-Out-Bytes and APS2-DataTransfer-Regional-Bytes
Azure Cost details export MeterCategory and related fields
Google Cloud BigQuery billing export sku.description, usage.amount_in_pricing_units, usage.pricing_unit

AWS Cost Explorer can group usage by usage type. This command was written for this article with placeholder dates. The end date is exclusive:

aws ce get-cost-and-usage \
  --time-period Start=YYYY-MM-01,End=YYYY-MM-01 \
  --granularity MONTHLY \
  --metrics UsageQuantity UnblendedCost \
  --group-by Type=DIMENSION,Key=USAGE_TYPE

For Google, this query was written for this article against the standard usage table. SKU wording is not a stable interface, so review what it returns:

SELECT FORMAT_TIMESTAMP('%Y-%m', usage_start_time) AS month,
       sku.description, usage.pricing_unit,
       SUM(usage.amount_in_pricing_units) AS quantity
FROM `PROJECT.DATASET.gcp_billing_export_v1_BILLING_ACCOUNT_ID`
WHERE LOWER(sku.description) LIKE '%data transfer%'
   OR LOWER(sku.description) LIKE '%egress%'
GROUP BY month, sku.description, usage.pricing_unit
ORDER BY month, quantity DESC

The AWS report shows two line items for inter-Availability Zone traffic, one for each direction. For inter-Region traffic, the charge is on the outbound line and the inbound line has none. Do not sum both and treat it as doubled inter-Region cost.

Worked calculations

Google's internet line is left out, because its rate depends on the source and destination you select on its pricing page. Read it with your own selection before you compare the three clouds.

These are arithmetic examples for this article. The traffic volumes are hypothetical. The rates are published list rates. Your agreement, tax and exchange rate will differ.

Example workload after the move: 20,000 GB a month out to the internet, plus 5,000 GB replicated between zones and 8,000 GB between regions within Oceania.

Internet out: AWS Sydney

Apply the 100 GB allowance first, assuming no other account usage. The price list describes the first tier as beyond that allowance.

Portion GB Rate Cost
Allowance 100 $0 $0.00
First tier 10,240 $0.114 $1,167.36
Next tier, remainder 9,660 $0.098 $946.68
Total 20,000 $2,114.04

Internet out: Azure Australia

Azure sets the next tiers at 10 TB and 40 TB, with 1 TB as 1,000 GB.

Portion GB Premium network Routing preference, transit ISP
First 100 GB 100 $0.00 $0.00
Next 10 TB 10,000 $1,200.00 $1,100.00
Remainder 9,900 $841.50 $742.50
Total 20,000 $2,041.50 $1,842.50

Internal paths

Path Calculation Monthly cost
AWS inter-zone, Sydney 5,000 GB × $0.01 × 2 directions $100.00
Google inter-zone, one VPC network 5,000 GiB × $0.01, sender attributed $50.00
AWS Sydney to Melbourne 8,000 GB × $0.08 $640.00
Azure within Oceania 8,000 GB × $0.08 $640.00

The Google figure treats the 5,000 as GiB for simplicity. The AWS inter-zone figure assumes each gigabyte is metered on one sending and one receiving resource, as the billing page describes for a resource. Confirm the count on a pilot.

The AWS figure assumes the traffic is charged. AWS says to confirm the service's pricing page, because some services have in-Region traffic at no cost. Check this for database replicas between zones.

What the unit does

Suppose a device counted 20 × 10¹² bytes. That is 20,000 decimal GB, or about 18,626 GiB. On the AWS tiers above, the second reading gives about $1,979, which is roughly 6% less. If a model mixes units, the error can exceed the difference between providers.

Add margin

Multiply each path by expected growth, then add any known events. A full restore of 10,000 GB out of Sydney, in a month already past the first tier, adds $980 at the $0.098 rate. Budget for restore tests at the rate that applies in that month's tier.

What to choose and why

These are editorial recommendations.

Result Consider Why
Egress is mostly user downloads Keep bulky content near users, or a CDN, after pricing it Moves the largest line
Inter-zone traffic is high Review placement against availability needs Do not trade away resilience without saying so
NAT processing is large Use endpoints for provider services where available AWS suggests this for heavy traffic to its services
Egress is steady and large Price private connectivity and negotiated rates List rates are a starting point
Volumes are small and uncertain Pilot before detailed modelling Measured traffic replaces assumptions

Leaving a provider is a different case. AWS, Azure and Google each describe free data transfer for eligible customers moving out. These are conditional programmes, not a general discount, so read the terms.

Risks and limits

Warning: Do not enable full packet capture, broad flow exports or SNMP changes on production network devices without a change record and a check of device load and data handling. Flow records show who talks to whom and can identify individual users and systems.

  • Published rates change. Google's pricing page records past changes to internet transfer rates. Date every rate in your model.
  • Google's Sydney internet rate is not quoted here. Its table changes with the selected region, so read it with Sydney selected.
  • The AWS NAT rate is not quoted here. Take it from the VPC pricing page for your Region.
  • The flow data is not the bill. Fields count differently, and some traffic is excluded or sampled.
  • Encapsulation is not modelled here. VPN and overlay headers add bytes that inner flow records may not show.
  • Application behaviour changes. Latency can change caching, retries and chunk sizes, so the pilot may not match a simple byte copy.
  • Egress is one line. Load balancers, firewalls, API requests and storage retrieval have separate charges not covered here.
  • Not tested here. All behaviour comes from documentation opened on 10 November 2026. No command was run.

Sources

Opened 10 November 2026. Sources behind the corrections reopened 10 November 2026.