S3 Storage Class Analysis: Intelligent-Tiering vs Standard vs One Zone for DevOps Logs

// tool
Object Storage Calculator
Compare S3, Spaces, B2, and Vultr — enter your GB and egress to see real costs.
Open Calculator →

Why Most Teams Overpay for S3 Log Storage

$0.023 per GB per month is the S3 Standard price for the first 50TB in us-east-1. That number feels trivial until you’re storing 6 months of structured application logs across 40 microservices and the bill reads $800/month for data nobody has touched since last quarter’s incident review.

The three storage classes that matter for DevOps log workloads are S3 Standard, S3 Intelligent-Tiering, and S3 One Zone-IA. Each has a different pricing model, and the math on which one wins depends almost entirely on your data volume, access patterns, and how long you keep logs before deleting or archiving them.

The Pricing Numbers You Need

All prices are for us-east-1 as published on the AWS S3 pricing page.

Storage ClassStorage Cost (per GB/month)Minimum Storage DurationPer-Request (PUT/COPY/POST/LIST)Per-Request (GET/SELECT)Monitoring/Automation Fee
S3 Standard$0.023None$0.005 per 1,000$0.0004 per 1,000None
S3 Intelligent-Tiering$0.023 (frequent) / $0.0125 (infrequent) / $0.004 (archive instant)None$0.005 per 1,000$0.0004 per 1,000$0.0025 per 1,000 objects/month
S3 One Zone-IA$0.0130 days$0.01 per 1,000$0.001 per 1,000None

Intelligent-Tiering breaks down into tiers: the Frequent Access tier costs $0.023/GB (same as Standard), the Infrequent Access tier costs $0.0125/GB, and the Archive Instant Access tier costs $0.004/GB. Objects move between these tiers automatically based on access patterns. The catch is that monitoring fee: $0.0025 per 1,000 objects per month, charged regardless of which tier an object lands in.

One Zone-IA stores data in a single Availability Zone instead of three. The tradeoff is a 20% price reduction versus standard IA pricing, with the real risk being data loss if that AZ has a major outage. For logs you can regenerate or that serve only historical reference purposes, that’s usually an acceptable tradeoff.

The Monitoring Fee Is the Hidden Tax

The Intelligent-Tiering monitoring fee is where the math breaks against you for small datasets. At $0.0025 per 1,000 objects per month, this adds up fast when you’re dealing with high-cardinality log storage.

Consider a typical microservices setup: 40 services, each writing hourly log files, retained for 90 days. That’s:

40 services × 24 files/day × 90 days = 86,400 objects

Monthly monitoring cost:

86,400 objects / 1,000 × $0.0025 = $0.216/month

That’s negligible. But scale up to a serious production environment: 200 services, 5-minute log rotation, 90-day retention:

200 services × 288 files/day × 90 days = 5,184,000 objects
5,184,000 / 1,000 × $0.0025 = $12.96/month in monitoring fees alone

If those 5.18 million objects average 2KB each (common for structured JSON logs), total storage is about 10GB. At Standard pricing that’s $0.23/month in storage. You’d be paying $12.96/month in monitoring fees to potentially save fractions of a cent on infrequently accessed 2KB files. Intelligent-Tiering is clearly the wrong choice here.

The monitoring fee becomes a non-issue once objects are large enough. AWS recommends Intelligent-Tiering only for objects larger than 128KB. Objects smaller than 128KB are charged for monitoring but will never move out of the Frequent Access tier. This is documented behavior, not a bug.

The 90-Day Log Rotation Breakeven

For typical DevOps log retention, the real comparison is between S3 Standard and a lifecycle policy that transitions objects to One Zone-IA (or Glacier Instant Retrieval for archive) after 30 days.

Take a concrete scenario: 500GB of log data, with the following access pattern:

S3 Standard, all 90 days:

500 GB × $0.023 × 3 months = $34.50

Lifecycle to One Zone-IA after 30 days:

Month 1: 500 GB × $0.023 = $11.50
Months 2-3: 500 GB × $0.010 × 2 = $10.00
Lifecycle transition requests: ~500,000 PUT requests = $5.00
Total: $26.50

That’s a $8.00 saving over 90 days on 500GB. Annualized at consistent volume: $32/year. Not impressive on its own, but at 5TB it becomes $320/year. At 50TB it’s $3,200/year. The lifecycle policy approach consistently wins for data with a clear “hot then cold” pattern.

Intelligent-Tiering at 500GB with the same access pattern:

If your log files are large (say, compressed daily aggregates averaging 50MB), the object count stays low. 500GB / 50MB = 10,000 objects.

Monitoring: 10,000 / 1,000 × $0.0025 = $0.025/month
Storage if 70% moves to IA after 30 days:
  Month 1: 500GB × $0.023 = $11.50
  Month 2: (150GB × $0.023) + (350GB × $0.0125) = $3.45 + $4.375 = $7.83
  Month 3: same ≈ $7.83
  Total monitoring: $0.075
  Total: ~$27.11

Intelligent-Tiering at 500GB with large objects comes out close to the lifecycle policy approach. The problem is that real-world log files are rarely 50MB compressed daily aggregates. They’re usually small, frequent files, which means object counts explode and the monitoring fee dominates.

When Intelligent-Tiering Actually Makes Sense

Intelligent-Tiering is the right call when:

  1. You have unpredictable access patterns. If some logs get pulled for a major incident review at month 2 and others never get touched, Intelligent-Tiering handles the variance automatically. A static lifecycle policy transitions everything to IA regardless of whether it’s actually cold.

  2. Object sizes average above 128KB. The monitoring fee is proportional to object count, not data volume. Larger objects mean the monitoring overhead is a smaller fraction of potential savings.

  3. Volume exceeds roughly 5TB with mixed access patterns. Below that threshold, the complexity and monitoring overhead rarely pays off compared to a simple lifecycle policy.

  4. You can’t predict access patterns at object creation time. Some log sets get queried repeatedly. Others never. If you can’t tag or prefix log data by expected access frequency at write time, Intelligent-Tiering handles the classification automatically.

One Zone-IA: The Underused Option for Reproducible Logs

One Zone-IA at $0.010/GB is 57% cheaper than S3 Standard. For logs that are derived from other systems (CloudWatch Logs exports, application logs shipped to S3 from a separate sink), the single-AZ risk is much less concerning because you have an alternate copy elsewhere.

The 30-day minimum storage duration means you should only transition objects you’re confident will sit for at least a month. Transitioning a log file to One Zone-IA and then deleting it 15 days later still charges you the full 30-day minimum. Plan your lifecycle rules accordingly.

One Zone-IA also has higher per-request costs: $0.01 per 1,000 PUT requests vs. $0.005 for Standard. If your logging pipeline writes millions of small files and you’re sending them directly to One Zone-IA (not transitioning via lifecycle), those write costs add up.

Building the Right Lifecycle Policy

For a 90-day retention window with typical log access patterns, this lifecycle configuration covers most DevOps use cases:

{
  "Rules": [
    {
      "ID": "log-retention-90day",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "logs/"
      },
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "ONEZONE_IA"
        }
      ],
      "Expiration": {
        "Days": 90
      }
    }
  ]
}

If regulatory requirements mean you can’t use One Zone-IA, substitute STANDARD_IA at $0.0125/GB. You lose some of the cost savings but maintain the three-AZ durability guarantee.

For longer retention requirements (compliance logs you need for 1-3 years), add a second transition to Glacier Instant Retrieval at $0.004/GB after 90 days:

{
  "Transitions": [
    {
      "Days": 30,
      "StorageClass": "ONEZONE_IA"
    },
    {
      "Days": 90,
      "StorageClass": "GLACIER_IR"
    }
  ],
  "Expiration": {
    "Days": 1095
  }
}

Run the numbers for your specific volumes using the InfraTally object storage calculator before committing to a storage strategy. The breakeven points shift significantly based on object count, file size distribution, and how frequently your team actually queries historical logs.

For a deeper explanation of S3 pricing tiers beyond just storage classes, the AWS S3 pricing explained article covers request pricing, data transfer, and replication costs that also affect your total bill.

My Take

Intelligent-Tiering is oversold for log workloads. The monitoring fee is a flat per-object tax that kills the economics for the high-cardinality, small-file log data that most DevOps teams actually produce. Unless your object sizes consistently average above 128KB and your access patterns are genuinely unpredictable, a lifecycle policy transitioning to One Zone-IA after 30 days beats Intelligent-Tiering in almost every log retention scenario below 5TB.

The actual breakeven for Intelligent-Tiering worth caring about: you need enough data volume that the storage savings in the IA tier ($0.023 minus $0.0125 = $0.0105/GB/month) exceed the monitoring fee. At an average object size of 1MB, monitoring costs $2.50 per TB per month. The storage savings only materialize once objects move to IA, which takes 30 days of inactivity. For logs that are accessed during the first 30 days and then abandoned, Intelligent-Tiering may never move them to IA at all, meaning you pay the monitoring fee and get exactly zero benefit.

Pick One Zone-IA via lifecycle policy for reproducible logs under 5TB. Pick Standard-IA via lifecycle for logs requiring full durability. Reserve Intelligent-Tiering for large-object, unpredictable-access workloads above 5TB where you genuinely cannot predict which data will stay hot.