Production,
in plain sight.
Iknos reads the logs and metrics of every app on your servers: one search over every line, errors grouped into issues, alert rules, and the trace of each request. Your apps keep writing the standard formats they already write.
FetchError: forecast upstream request timed out after 8000 ms
at ForecastClient.fetchCity (forecast/forecast-client.js:61)
at async ForecastService.refresh (forecast/forecast.service.js:118)
at async CityController.forecast (city/city.controller.js:42)
rate(http_5xx[10m]) > 5%
beacon-api · 7.8%
One rail. Every signal.
Pick a service and every view follows it. Each card plays a real piece of the console, with a demo fleet.
rate(http_5xx[10m]) > 5%
beacon-api · 7.8%
probe_failures[90s] ≥ 2
beacon-api · 0
Find the line in milliseconds
Every line lands in a daily partition, so a search over one service and one day answers in about two milliseconds, even on ten million rows. A bar of the histogram jumps the table to its time.
- Filters on service, level, route and status
- A live tail over SSE
- The query time on every answer
Group every error by its cause
Errors that share a fingerprint become one issue: its count, first and last seen, its last 48 hours and its latest stack. From there, one click opens the logs of the request that raised it.
- Server and browser errors, one schema
- Resolve, ignore, or reopen
- A regression flagged when it comes back
Watch every rule, evaluated for you
The collector evaluates each rule every minute: an error rate, failed probes, a restart. A rule is pending until it has held, then firing, and each change lands in its history with the reading behind it.
- Pending, firing, resolved
- Acknowledge, or silence for an hour
- Six hours of state per rule
The whole fleet, one rail away.
Four views of the console, playing with a demo fleet: every log line, one service, the grouped errors and the alerts.
Every line, wherever it starts.
A page has no stdout, so the browser posts its errors to one route, in the same ECS JSON a server prints. Once stored, a browser error reads like any other line.
The same tailer follows each vhost's access log, so what nginx answered on its own, and a static site with no process, sit beside everything else.
Each day is its own partition. Retention drops the oldest in one statement and hands the disk back, with three days of partitions ready ahead.
The addresses behind a route, grouped, and one click to see who an address belongs to and where it is — asked once, then cached.
Standard formats in.
Free to move on.
Your apps write ECS JSON to stdout and expose /metrics, and that is the whole contract. Moving to Loki or Grafana later takes zero lines in your server apps.
Production,
in plain sight.
Every app's logs, errors and alerts, on your own infrastructure.