Thruk, NagVis, Checkmk -- a whole ecosystem of consoles speaks MK
Livestatus (LQL) to read a monitoring engine's state without caring what
that engine actually is. jaque implements that protocol, so those tools
point at it without a single config change on their side. What it costs:
Livestatus inherits the protocol's own gaps, most visibly no log table
(section 3).
1. Turning it on
Two flags, both empty (protocol off) by default:
-livestatus-listen 127.0.0.1:6557 # TCP
-livestatus-socket /tmp/jaque-livestatus.sock # UNIX socket
Either or both can be set at once.
printf 'GET status\nOutputFormat: json\n\n' | nc -U /tmp/jaque-livestatus.sock
2. What it reads from
Its own projection of the event log, in parallel with the dashboard's -- same mechanism, separate consumer, so a Livestatus client never blocks or is blocked by the dashboard.
3. The tables
Nine tables: hosts, services, hostgroups, servicegroups,
contacts, downtimes, comments, status, plus the meta-table
columns describing all of them. Filtering, Stats: aggregation
(sum/min/max/avg), and both output formats (csv, the Nagios
default, and json) are supported.
The log table is not implemented, so Thruk features that need it will
not work.
GET services
Filter: state = 2
Stats: state = 2
OutputFormat: json
4. Verified against a real client, not just the spec
The status table implements all 20 columns Thruk's connect probe
(get_processinfo) actually requests -- not a subset inferred from reading
the LQL spec. The exact request/response sequence Thruk sends on connect is
pinned in a replay test against real Thruk traffic, so this is not "should
work" -- it is checked against what a production Nagios console does the
moment it connects.
5. What this unlocks
Any console that already knows how to talk Livestatus -- Thruk, NagVis, Checkmk, WOCU -- can point at a jaque instance and read its state without modifying its own configuration at all. Combined with the exec plugin protocol and the FIFO, this is the third leg that lets an existing Nagios-adjacent toolchain keep functioning unmodified while the engine underneath changes.
6. Security considerations
As in the original Livestatus protocol, the wire format carries no
authentication: anything that can reach the socket can read full state.
-livestatus-listen should bind a trusted interface, not 0.0.0.0, and
-livestatus-socket should rely on filesystem permissions to keep the
socket restricted -- the protocol offers no door of its own to lock.