UPS battery aging¶
A UPS battery loses what it holds slowly, over years, and most sites find out during the outage it was meant to cover. UPS battery aging watches each UPS's runtime at its load for months and warns while there is time to order a battery:
Battery: 72% of its first month's runtime at the same load, falling ~7.5% a month; under 10 min at today's load around 2027-05-14.
It warns when:
- the battery holds 75% or less of what it held in its first month with Collimo, at the same load;
- runtime at today's load is forecast to fall under 10 minutes within 90 days;
- the UPS dates its battery, and it is over 4 years old.
These are warnings, never critical: a battery is replaced on a schedule. UPS battery aging is part of Business and MSP. Collimo only reads: it never starts a self-test or changes a setting on the UPS.

Before you start¶
- Your UPSes, over the network card (see UPSes) or shared by a NAS or server over NUT (see UPSes over NUT).
- A month. Collimo learns each battery's runtime at its load over its first 30 days, and judges it after that. Until then each UPS says learning (12 of 30 days). Readings are kept on every edition, so a license added later starts with the history already there.
- The archive kept between restarts (
LEDGER_PATH, on by default). With it off, history starts again at every restart.
Read it¶
Open the Power and servers tab and open a UPS. Under its facts, the Battery strip says:
- how much of its first month's runtime it holds now, at the same load, and which way it is going a month;
- when runtime at today's load is forecast under 10 minutes, if within 90 days, or how long it lasts at today's load by its trend;
- the battery's age, where the UPS gives a date, or that it doesn't.
The strip is amber while its warning is new, until you mark it seen in Needs attention. A UPS that can't be judged says why: on battery, it doesn't report its load, and so on.
Why runtime at the same load
A UPS at 20% load shows an hour; the same UPS at 60% shows a quarter of that. So Collimo multiplies runtime by load, which stays about the same while the battery is healthy, whatever the load. It isn't exact (a battery gives a little more at light loads), but a quarter lost is clear.
When it warns¶
- Order a battery for that UPS model. The UPS's manual or maker names the replacement part.
- Plan the swap in a maintenance window: many UPSes allow a battery change under load, some don't.
- After the swap, run the UPS's own self-test or runtime calibration, from its front panel or its management card, so its runtime estimate learns the new battery.
Collimo notices the new battery by itself: its runtime jumps and stays up, or its battery date changes. It starts learning the new one, and the warning clears.
The battery's date
UPSes shared over NUT often give the date the battery was installed
(battery.date), or the date it was made (battery.mfr.date). Over
the network card, Collimo asks for APC's battery replace date; other
cards' standard UPS MIB has no date. Where there is none, nothing is
guessed. If the UPS's date is wrong after a battery change, set it on
the UPS (APC: Battery replace date in the card's settings).
What counts, exactly
- Only readings on mains with the battery charged to 95% or more (where the UPS reports charge), not during a self-test, and not in the hour after running on battery, while it recharges.
- Load of 5% or more: below that, many UPSes report a fixed ceiling.
- One reading a minute at most; each day's median is kept, in the capacity history beside the archive, for two years. A day with fewer than 30 readings isn't kept.
- The first 30 days are the baseline. After that, the same trend capacity planning uses (see How forecasts work) over the last 90 days gives today's figure and its pace.
- The runtime figure is the UPS's own estimate. A UPS that never self-tests may not revise it until its battery fails, so a monthly self-test makes this more accurate.
Alert and metric¶
| Alert | When | Level |
|---|---|---|
UPS battery aging (ups_battery_aging) |
75% or less of its first month, under 10 min at today's load within 90 days, or over 4 years old | warning |
infra_ups_battery_health_ratio{source, ups} is the battery's runtime at
its load today over its first month's: 1 is as it was when Collimo first
saw it. It is absent while a battery is learning.