Vitals: server, database and infrastructure monitoring
Find the one gauge that stopped behaving normally.
80% processor use is fine on one server and an incident on another. Vitals learns what is normal for every gauge on every host, database and service you run, and tells you which one changed. No thresholds to set.
The problem
Too many dashboards, and nobody knows which number means trouble.
Your database counts its lock waits, your web server counts its errors and your application server reports its pauses. Every one has a dashboard. But someone still has to decide, for every gauge on every server, which number means trouble, and change it every time the workload changes.
Vitals reads the counters your systems already report, learns what each one normally does through the day and the week, and raises an alert naming the gauge that changed. A memory leak shows up as a leak, even when the server's other gauges look calm.
Vitals reads the counters your infrastructure already publishes. It does not instrument your code or follow a request from one service to the next. That is distributed tracing, a different kind of product.
What it watches
Hosts, databases, web servers, app servers, queues and containers.
Every counter below is standard telemetry your infrastructure already reports, read from each system's own statistics. Each one gets its own learned normal.
| Source | The counters it reads |
|---|---|
| Host | Processor utilisation, memory in use, run queue and load, swap in use, disk and network where the machine exposes them. |
| SQL database | Connections, active and idle sessions, query-latency percentiles, slow-query rate, lock waits, deadlocks, replication lag, buffer and cache hit ratio, transactions per second, table and index bloat. |
| Web server | Requests per second, response-time percentiles, status-class rates (2xx, 3xx, 4xx and 5xx, each on its own), active connections, queue depth, upstream latency, keep-alive reuse. |
| Application server | Request rate and latency per route, error rate, thread and worker pool utilisation, queue depth, garbage-collection pause time and frequency, heap used against heap committed, open file descriptors. |
| Queue or cache | Queue depth, consumer lag, eviction rate, hit ratio, connection count. |
| Runtime or container | Restarts, out-of-memory kills, throttled processor periods, filesystem pressure. |
Every counter above is read from the source's own statistics interface. Nothing is installed inside your database, your web server or your application.
How it works
Read the counters. Learn each one. Flag the one that changed.
Step one
It reads counters where they are
Vitals reads each system's own statistics on your servers, at an interval you choose. There is no external metrics service and nothing is uploaded, so it works on networks with no internet access at all.
Step two
It learns each gauge's normal
Every gauge gets its own normal, learnt from its own history on that machine. A database that always runs at high memory and a web server that always runs low are both normal. If a gauge does not have enough history yet, Vitals says so rather than guessing.
Step three
It names the gauge that changed
Vitals flags the gauge that changed, not an average health score that hides it. You start with a named server, a named gauge and a time window, not a dashboard and a hunch.
What you get
A named instance, a named gauge, and what stopped being normal about it.
A sample alert, so you can see the shape of what Vitals reports.
Gauge departed from its normal
Investigating- Source
- SQL database instance
- Instance
- db-prod-02 / orders
- Raised
- 2026-09-21 19:52:04 AEST
- Thresholds crossed
- None there are none to cross
- Status
- Departed from learned normal
What moved
| Gauge | Normal for this instance | Now |
|---|---|---|
| Transactions per second | 380-520 | 441 |
| Connections in use | 40-70 | 63 |
| Lock waits per minute | 0-3 | 148 |
| Query latency, 95th percentile | 18-40 ms | 610 ms |
| Buffer hit ratio | 98-99% | 98% |
In words
Throughput, connections and buffer hit ratio are exactly where this instance normally sits, so a load-based or connection-based alert would never have fired. What is new is that lock waits have climbed and stayed climbed, and the 95th-percentile query latency has gone with them. The pair, not any single reading, is what changed. The lock-wait gauge is the worst of the five, so it is the one named at the top of the alert.
Sample alert. The instance names and values are examples.
Per gauge, not per fleet
Every gauge on every instance gets its own normal. Adding a database, a web server or a container is pointing Vitals at its statistics interface and leaving it alone, not copying a threshold template and editing it.
Counters only, never content
Vitals takes a number and the name of the thing that produced it. Not statement text, not bind parameters, not table rows, not request URLs or query strings, not headers, cookies or client addresses, not request or response bodies, not message bodies, not cache keys or values. "Show me the slow query" is a feature we do not offer, because offering it would mean capturing it.
Nothing phones home
Samples are analysed on your infrastructure and held there, and each source is tapped through a dedicated read-only account with the least privilege its statistics interface needs. It runs on machines with no internet route at all.
The same console
Vitals is a module in the one Senua AI Cyber console alongside Shield, Pulse and Discern, enabled by your subscription. One login, one place to look.
Pricing
Flat per month, across everything it watches.
Flat and never metered, with a 3-day grace period after expiry before the instance goes read-only. Your data is never deleted on lapse.
- 25 hosts
- 10 database instances
- 25 web, application, queue and cache instances
- 100 containers or pods
- Up to 512 gauges per box
- 15-day retention, alerting and exports
- Annual is AUD $1,990
- Vitals, Shield, Pulse, Discern
- 100 hosts
- One console, one subscription
- Cheaper than the $2,396 sum
- Every product, unlimited caps
- Offline licence activation
- No call-home for verification
- Large fleets: Contact us
Prices, meters, the gauge ceiling and grace period are read from one price file. All amounts include 10% GST. Subscriptions are arranged with our team directly, on your own hardware, with a guided setup.
Point it at one database, or one host.
Start with whichever of your streams you care about most. Tell us what runs in your estate, and we will show you how Vitals learns each gauge's own normal, on your own hardware.