# Azure Event Hub Idle

> ZopNight flags an Event Hubs namespace only when IncomingMessages and OutgoingMessages both sit below a floor of 1 message (average and peak alike) across 30 days of coverage. Throughput units bill as a fixed fee whether events flow or not, so a silent namespace is a pure standing charge.

Source: https://zop.dev/integrations/azure/recommendations/azure-event-hub-idle
Updated: 2026-08-19

---

## Producers can stop while consumers keep draining

Message infrastructure has two independent halves. A producer team can decommission its service
while a consumer still drains the backlog; a consumer can poll an empty hub long after
producers went quiet. Either half alone looks like activity. ZopNight therefore gates on both
axes: `IncomingMessages` below the floor proves nothing is publishing, `OutgoingMessages` below
the floor proves nothing is reading, and only the two together justify recommending deletion of
the namespace.

## Why the floor is 1 message and not 0

An Event Hubs namespace registers a faint pulse even with no workload: health probes, the
Azure monitoring agent, Capture and diagnostic housekeeping. Gating on exactly zero would
abstain forever on genuinely dead namespaces that merely carry that baseline. The floor of 1.0
sits above the platform noise and below any real traffic. Both the average and the maximum on
each axis must stay under it: one busy hour anywhere in the window, such as a nightly batch
producer, counts as use.

## The fixed fee this recovers

A Standard namespace bills its provisioned throughput units hourly whether or not events move;
Premium and Dedicated carry flat tier fees. ZopNight prices the finding from that fixed-fee
run-rate, so the savings figure is the namespace's real monthly charge, and the rule abstains
entirely when no priced cost is available.

## Watch both directions yourself

```bash
az monitor metrics list \
  --resource "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.EventHub/namespaces/<name>" \
  --metric IncomingMessages OutgoingMessages \
  --interval PT1H --offset 30d --aggregation Average Maximum
```

## Every way this rule declines to fire

Missing either metric series, less than 30 days of coverage on either axis, any hour at or
above the floor on either side, or an unknown cost. Each of those aborts the evaluation. There is no
tag-based fallback path; a label a customer typed can never authorize deleting messaging
infrastructure.

## Retiring a namespace safely

Capture any events you are contractually required to retain, confirm no connection strings for
the namespace remain in application configuration, then delete the namespace. Consumer groups
and hubs go with it. Detection uses the Reader and Monitoring Reader roles; ZopNight has no
write path to Event Hubs.
