Kubernetes · LangGraph · Grafana Stack
A two-node LangGraph agent investigates a live Kubernetes incident — logs, metrics, pod state — and writes a cited, read-only report. Alongside it, a scoped audit pipeline watches for RBAC changes and interactive pod access. Built on EKS, instrumented with Grafana's agent-observability tooling.
Alertmanager pushes; the agent reacts. No polling, no chat window that only works when someone's watching — every run leaves a file behind.
Given an alert, pulls the same evidence an on-call engineer would check first: recent logs from Loki, the restart-count metric from Prometheus, and a pod describe via the read-only Kubernetes API. No interpretation yet — just gathering.
Turns that evidence into three things: a likely cause, the specific evidence for it, and one suggested next diagnostic step. Never a fix, never an action — it has no tool that could take one.
A scoped Kubernetes audit policy watches for exactly two signals — RBAC object changes and kubectl exec — shipped through Grafana Alloy into Loki. Everything else is dropped before it becomes noise.
Every agent run is traced with Grafana's agent-observability SDK, so the tool that investigates cluster health shows up in the same dashboards as the cluster it's investigating.
Rides entirely on an existing EKS cluster's Prometheus and Alertmanager — no parallel cluster, no second Grafana.
Solid lines: data and alert flow. Dashed line: the agent's own instrumentation, feeding back into the same Grafana.
"Don't take actions" isn't a line in a prompt here — a prompt is advisory. It's a property of the code and the cluster permissions, independently.
The tool clients the agent calls simply don't contain a write method. There's no delete_pod or patch_deployment function anywhere for a bug — or a misbehaving prompt — to reach for.
The agent's service account is granted get, list, watch — nothing else. Even if the code layer had a bug, the API server itself would reject any write attempt.
Media from a real run against a live cluster goes here.
kubectl exec event and an RBAC change captured within seconds.
A working two-node agent beats an elaborate multi-agent system nobody, including its builder, can fully explain.