Ai-OPs
ai-ops.com
Docs
/
Troubleshoot
/

Service Health & Resource Alarms

Service Health & Resource Alarms

This is the platform layer. When a specific device, tag, model, or scan group looks wrong, start with the layer that owns it. But when many things fail at once, or the whole server slows down, the cause is usually one layer beneath them all: a background service has stopped, or the host is out of CPU, memory, or disk. This page covers how to read the System Alerts banners, diagnose unhealthy services and their heartbeats, respond to resource alarms, and interpret scan-group execution errors.

For the shared status colors, the three diagnostic fields, and the auto-clear vs. stuck checklist, see Reading Status, Quality & Errors. This page does not repeat those.

Start with the System Alerts banners

Koios continuously checks the platform's health signals and surfaces them as alert banners. Read the banners first — they tell you which layer to investigate and link straight to the tool that owns it.

BannerSeverityWhat it meansWhere it links
Server UnreachableErrorThe interface cannot reach the Koios server. While this is active it replaces every other alertServer Won't Start
Unhealthy ServicesWarning, or Error if every service is downOne or more background services are not sending healthy heartbeatsServices
Performance AlarmWarningA CPU, Memory, Disk, or Network alarm threshold is currently exceededSystem Health
Failed Devices / Tags / Models / Scan GroupsErrorOne or more entities of that type are in a failed stateThe matching list page
License (No License / Invalid / Grace Period)Warning or ErrorLicensed functionality is gated by license stateLicense

Three of these also pin a persistent bar at the bottom of the app until resolved: Server Unreachable, any active license alert (No License, Invalid, or Grace Period), and the unhealthy services banner, which names the services that aren't running.

The failed-entity and license banners are the entry points to other layers. Follow them to Bad, Missing, or Frozen Tag Values, A Model or Binding Isn't Running, or Licensing Problems. The rest of this page covers services and resource alarms.

Unhealthy or stopped services

Open System > Service Status to see every service. Services are split into two tables:

  • Application Services — Data Collector, Predict Engine, Expression Evaluator, Parameter Mapping, Performance Monitoring, and Component Engine. These do the platform's real work, and they report heartbeats.
  • Infrastructure — Celery Worker, the configuration database, the time-series database, the in-memory cache, the web proxy, and the metrics agent. These support the application services.

Each row shows status, CPU, memory, PID, and uptime.

How heartbeats decide health

Application services report a heartbeat on a regular cadence. The status badge combines that heartbeat with the process state:

StatusColorMeaningWhat to do
RunningTealHealthy and reporting normallyNothing
StoppedGrayNot runningStart it from the detail drawer
FailedRedCrashed or exited with an errorRead the error, then Start or Restart
StartingYellowIn the process of startingWait for the transition to finish
StoppingYellowIn the process of stoppingWait for the transition to finish
UnresponsiveOrangeProcess is alive but not sending healthy heartbeatsRestart it; if it keeps going unresponsive, check the logs and resource alarms
StandaloneOrangeHeartbeats are healthy but the process is not managed by the service managerUsually a dev/manual-launch artifact; restart to bring it back under management

Unresponsive is the key heartbeat state: the process didn't crash, so it isn't Failed, but it stopped checking in. A service that pins the host CPU or runs out of memory will often go Unresponsive rather than Failed. Hover any badge for a plain-language explanation.

Recover a service

Click a service row to open its detail drawer. The Overview tab shows the description, live metrics (CPU, memory, thread count, PID, uptime), Last Heartbeat (when it last reported in), and any reported Error Info message and detail. Action buttons appear in the footer based on the current state:

Current stateAvailable actions
Stopped / FailedStart
Running / UnresponsiveRestart, Stop
Starting / StoppingNone — wait for the transition

Start and Restart run immediately; Stop asks for confirmation. The list refreshes automatically afterward.

When a service keeps going Unresponsive or Failed

  1. Open the drawer's Diagnostics tab (application services only). It shows the service's live workload: Pressure (thread-pool utilization as a rolling average), In-Flight (tasks executing now), and Queued (tasks waiting). A badge turns yellow at 70% pressure and red at 90%. Sustained high pressure means the service is overloaded, not broken — reduce its workload or scan rate rather than just restarting it.
  2. For the Predict Engine, the Diagnostics tab lists Top Contributors — the AI models putting the most load on the service. Click a model to open it and check whether one model is starving the rest.
  3. Stream the service's log for the actual traceback. See Logs, and set the log level to Debug there if the default output isn't detailed enough.
  4. Check whether a resource alarm is active (next section). A service that keeps dying is often a symptom of the host running out of memory or disk.

Resource alarms: CPU, memory, disk, network

A Performance Alarm banner, or a red dot on a tab in System > Health, means a hardware threshold has been crossed. The Health page has four tabs, each with a live chart, an alarm limit, and display options. The alarm state is re-evaluated every 10 seconds; a red dot on the tab means that metric's alarm is currently active.

AlarmThreshold settingFires whenFirst things to check
CPUCPU Alarm Limit (%)Overall CPU usage exceeds the limitWhich service is consuming it — the chart's per-service Service Processes breakdown shows the culprit. A hot Predict Engine or Data Collector usually means scan rates are too aggressive for the hardware.
MemoryRAM Alarm Limit (%)Memory usage exceeds the limitPer-service memory in the chart legend. Sustained high memory is the most common cause of a service going Unresponsive or Failed. Switch the axis to bytes with Show in Bytes for absolute numbers.
DiskStorage Alarm Limit (%)Disk usage exceeds the limitThe live display shows free space, daily change rate, and a projected time-to-full. If it's filling fast, history is the usual cause — tighten retention and compression.
NetworkNetwork Alarm Limit (MB/s)Throughput exceeds the limit, or (if Alarm on Packet Drops is on) packet drops are detectedThe interface selector — confirm you're watching the right interface. Packet drops point at a physical link or driver problem, not Koios.

Each tab's Show Setpoint option draws the threshold as a dashed red line so you can see how close you are. Thresholds save automatically the moment you change them — there's no Save button.

Disk alarm won't clear

Disk pressure rarely resolves itself. The largest consumer is almost always historical storage. Lower retention windows and enable/tune compression (see the retention settings, below), then confirm the projected time-to-full estimate on the Disk tab is trending back up. Backups also accumulate — old pre-migration and manual dumps in the media volume can be pruned.

A resource alarm caused a service failure

If a resource alarm was active at the same time a service went Unresponsive or Failed, treat the alarm as the root cause. Relieve the resource pressure (reduce scan rates, tighten retention, add capacity), then restart the affected service. Restarting without relieving the pressure just repeats the cycle.

Device housekeeping failures (codes 14, 15)

A running device can report a platform-side failure that isn't about the connection or a tag read — it's the Data Collector failing to complete background work for that device. These surface as device error codes and usually clear on the next cycle once the underlying service or resource pressure eases.

CodeMeaningWhat to do
14 — Failed to Update HeartbeatThe device's availability heartbeat could not be writtenCheck the Data Collector service and the in-memory cache; typically transient under high load.
15 — Failed to CleanupResource cleanup after a device operation failedUsually transient; if it persists, restart the Data Collector and check for an active resource alarm.

These are symptoms of service or host pressure, not a device fault. If one recurs, work the services and resource-alarm sections above — the fix is almost always there.

Scan-group errors: On-Demand Read and Overscan

A scan group runs its members on a shared schedule. When the scan group itself is Failed or shows a warning, the error code identifies what went wrong at the group level (distinct from any per-tag or per-binding errors underneath it).

CodeMeaningWhat to do
0 — NoneRunning normallyNothing
2 — On-Demand Read FailedThe group's shared on-demand read failedTrace it to the underlying device or tag — this is a device-layer failure surfacing at the group. See Troubleshoot a Connection.

Overscan

Overscan is not an error code. When a group's execution takes longer than its configured scan rate, it stays Running with error code 0 and Koios records a warning message on the group's status — for example Scan group execution (14.2s) exceeded scan rate (10s) with 32 models. You see it as the amber running-with-warning state and in the group's status tooltip, and the same message is written to the group's log. Filtering or searching for an error code will not find an overscanning group.

The group still works; it just can't keep up. Slow the scan rate, or reduce the number of members.

The on-demand read failure here is the group-level view. When a model binding reports an on-demand read failure (binding code 20), diagnose it from the model side in A Model or Binding Isn't Running.

What's Next