Logit.io
Retention days drive Hosted OpenSearch node count
← Back to blog
10/13/2026 · 6 min read

Retention days drive Hosted OpenSearch node count — plan ISM before you buy nodes

Logit.io Team
Logit.io Team
Technical Content Team

Last updated 10/13/2026

OpensearchHow To Guides

Stretching retention on Hosted OpenSearch is not “just more disk.” Retention days × measured daily primary ingest ≈ the hot/warm store that must fit on data-bearing nodes. Index State Management (ISM) is how you enforce that window — hot → warm/cold → delete — instead of leaving every index forever-hot “to be safe.” That forever-hot habit is the expensive failure mode: replica placement, minimum primary shards, and the hot window often force another node before free disk looks empty.

This post is the planning path operators actually run: measure primary store with CAT APIs, encode day thresholds in an ISM policy, then size nodes against published OpenSearch pricing (developer tiers from $45.52/node/mo annual). Governance vocabulary lives elsewhere — enterprise retention strategies and how long to hang onto data. Here the question is narrower: will this retention policy fit the node floor you are about to buy?

Contents

Retention is a node-count problem, not a policy PDF

A retention PDF that says “90 days” without a primary-byte estimate is not a capacity plan. On Logit.io the cluster is already managed — create flow provisions multiple nodes, upgrades are handled — so the dial you still own is how long indexes stay searchable and how many copies of them allocate. Every extra hot day multiplies yesterday’s primary ingest. Every replica that must place on a different node multiplies that footprint again.

Node shopping before ISM is backwards. Published developer tiers start from $45.52/node/mo annual; that number is useful only after you know the store the policy will hold. Sister posts already cover the adjacent math: ingestion capacity for 50 GB–1 TB/day and shard sizing with CAT APIs. Retention is the third leg — days, not only daily volume or shard shape.

Flow: retention window times daily primary ingest becomes store footprint, then a node floor at published OpenSearch pricing; encode the window in ISM and measure with CAT APIs

Measure primary store before you pick days

Start from a live stack. If you do not have one yet: create an OpenSearch cluster, then copy the REST host from Stack Settings → Endpoints. Useful calls operators actually run (add ?v for headers):

GET /_cat/indices?v&h=index,health,pri,rep,docs.count,store.size,pri.store.size
GET /_cat/allocation?v
GET /_nodes/stats/indices/store,fs?pretty

pri.store.size is the primary footprint signal. Day-over-day growth on the write index approximates primary ingest. /_cat/allocation shows how much each node already holds — the floor you are about to grow. /_nodes/stats store and filesystem sections confirm whether free disk is real headroom or already spoken for by replicas and merges. Capture a baseline before you lengthen retention: primary store, replica count, allocation per node, and whether health is green or yellow.

Anonymised production patterns and ops signals that show up across stacks are catalogued in anonymised OpenSearch ops facts; use those as pattern recognition, not as your numbers. Your CAT snapshot is the source of truth.

Encode the window in an ISM policy

ISM turns “keep 14 days hot, delete by 90” into states, actions, and transitions the cluster can enforce. Upstream policy shapes are documented in the OpenSearch ISM documentation; on Logit.io treat gists as drafts to verify — plan retention and managed limits may constrain what a self-hosted policy assumes. Ground index lifecycle work in the index management docs and the OpenSearch overview.

Example policy JSON (day thresholds are illustrative — replace with measured windows):

PUT _plugins/_ism/policies/logs-retention
{
  "policy": {
    "description": "Hot 14d, reduce replicas, delete at 90d",
    "default_state": "hot",
    "states": [
      {
        "name": "hot",
        "actions": [],
        "transitions": [{
          "state_name": "warm",
          "conditions": { "min_index_age": "14d" }
        }]
      },
      {
        "name": "warm",
        "actions": [{
          "replica_count": { "number_of_replicas": 0 }
        }],
        "transitions": [{
          "state_name": "delete",
          "conditions": { "min_index_age": "90d" }
        }]
      },
      {
        "name": "delete",
        "actions": [{ "delete": {} }],
        "transitions": []
      }
    ]
  }
}

Attach the policy to matching indexes (or via template/ISM template patterns your stack supports), then prove transitions on a short-lived test index before you trust production deletes. Hot stays searchable with the replica count you need for green; warm sheds copies you no longer pay to place; delete removes the index when the compliance window ends. If ingest settings fight the lifecycle — refresh storms, bulk rejects — fix those with the high-ingestion settings checklist before you add nodes to paper over a missing delete transition.

Start Free Trial

Unlock complete visibility with hosted ELK, Grafana, and Prometheus-backed Observability

Start Free Trial

Planning assumptions: days × ingest → store → nodes

The table below is a planning-assumptions worksheet, not a measured benchmark. Assumptions: ~50 GB/day primary ingest (steady), one replica on hot indexes only, warm drops replicas, no invented GB/s or docs/sec. “Illustrative nodes” shows how quickly node-count pressure grows when the hot window stretches — use your CAT pri.store.size growth instead of these rows when you have them.

Hot days (assumption)Rough primary storeHot store with 1 replica (approx.)Illustrative node pressure @ $45.52/node/mo
14~700 GB~1.4 TB allocatedFits a small multi-node floor if disk tiers match; verify allocation before stretching days
30~1.5 TB~3.0 TB allocatedOften another data node (or larger tier) before free disk looks empty — replicas + min primaries still need homes
90~4.5 TB~9.0 TB while forever-hotExpensive if left hot; ISM warm/delete is how you avoid buying nodes for data you meant to expire

Multiply your measured daily pri.store.size growth by the hot days you insist on, add replica copies that must allocate, then open OpenSearch pricing. Logs plans start from $25/mo, metrics from $12/mo, APM from $20/mo — keep shipper-first pipelines on log management unless OpenSearch itself is the product.

Failure modes: forever-hot, yellow replicas, delete-too-soon

  • Forever-hot “to be safe” — every index stays on the hottest path with full replicas. Store and shard count climb until the next node is mandatory. Explicit refusal: do not keep everything hot forever; encode delete (or cold) transitions you can defend to compliance.
  • Yellow from replica math — lengthening retention without checking placement leaves replicas UNASSIGNED. Primaries serve; cluster health is yellow. Lower hot replicas, add a node that can hold copies, or move warm indexes to zero replicas via ISM — do not “fix” yellow by deleting primaries.
  • Delete-too-soon — aggressive min_index_age that removes indexes still inside an audit or incident window. Prove the policy on a canary index pattern; keep compliance days in the delete transition, not as tribal knowledge.
  • Node shopping mid-incident — buying capacity while refresh storms or tiny-shard floods are the real cause. Measure CAT and ingest settings first; scale nodes after the policy and shard shape are honest.

Get started

Run /_cat/indices, /_cat/allocation, and a store slice of /_nodes/stats on your Hosted OpenSearch stack. Write down daily primary growth and the hot days you actually need. Encode that window in ISM — hot → warm/cold → delete — and verify transitions on a test index. Only then size nodes against the Hosted OpenSearch overview and published node pricing on OpenSearch pricing (from $45.52/node/mo annual). Create or resize via the create OpenSearch cluster flow when the measured store demands it.

Retention sets the store. ISM enforces it. Nodes come last.

Get the latest Elastic Stack & logging resources when you subscribe

Want to see this in action?
Start a free trial and connect logs to your alert workflows.