Obstack EagleAvailable now

An observability console that speaks PromQL, LogQL and TraceQL — and answers back.

Eagle is the Obstack Stack's own console, and it is running today. Workloads, infrastructure, the service map, logs, traces and AI spans, read straight from the store in its own query languages. Ask Eagle answers from that same telemetry, TypeScript functions run beside it on an edge runtime, and EagleSRE brings incidents into the same place.

Self-hosted or Obstack CloudAir-gap readyGreptimeDB or ClickHouse
Eagle's Service Map: services and their dependencies with call and error rates; checkout and payment are flagged for errors
9 sectionsfrom workloads to dashboards, in the order an investigation runs
1 search syntaxcompiled to PromQL, LogQL or TraceQL, and shown to you
10 assistant toolseach one a read-only query, run under your identity
320 px and upto a wall display, with a mouse or a finger, checked on every route
01 / How it is laid out

In the order an investigation runs.

Eagle's sections follow the questions you ask during an incident, not the teams that own the data. A service keeps the same name on the map, in its logs and in its traces, so moving between them keeps your place.

  1. What is runningWorkloads, Hosts, Docker Swarm and Kubernetes: every service and the machine it runs on.
  2. How it connectsA Service Map drawn from traces, and APIs: every service broken down by endpoint.
  3. What it emittedLogs, Traces and AI Observability, searched with one syntax. A trace id in a log line opens its trace.
  4. How you watch itMonitors, Metrics and Dashboards over the same labels as everything else.
Workloads: every running service with its node, requests per second, error rate and p95

Every running service, in one list.

The node it runs on, its CPU and memory, requests per second, error rate and p95, with bars you can read at a glance.

A host drawer: CPU and memory by state, load, and filesystems with a fill forecast showing /var/lib/mongo full in about 46 minutes

A host, measured or marked not measured.

CPU and memory by state, load, network and disk, and filesystems with a straight-line fill forecast. A metric the collector does not send says so, instead of drawing a zero.

Kubernetes pods with status, namespace, node, restarts, age, CPU and memory

Pods, nodes and restarts.

Every pod with its namespace, node, restarts, age, CPU and memory. Docker Swarm services get the same view.

Logs: a volume histogram, presets, level facets with counts and log rows

Logs with facets that add up.

A volume histogram, presets and saved queries, facets whose counts add up to the rows, and a patterns view. Every search shows the LogQL it runs.

A trace waterfall opened from the Traces list, with spans across frontend, shipping, mongodb and redis

Spans, traces and the waterfall.

Golden signals over whatever the search matched, then a waterfall for each trace in a drawer that lives in the URL. A trace id in a log line opens here.

The AI Observability dashboard preset: GenAI spans, error spans, p95 latency, total cost, total tokens and chat spans, with spans by status over time

Your own LLM traffic, as spans.

OpenTelemetry GenAI spans: tokens, recorded cost, tool calls and models, next to latency and errors. It installs as a dashboard preset you can then edit.

02 / One search, three languages

Type the search. Read the query it runs.

Eagle compiles one search syntax to LogQL, TraceQL or PromQL and prints the result under the bar. Switch to the native query whenever you want, and back. Structured fields such as level become pipeline filters, not stream selectors, so a search never quietly matches nothing.

Logsruns as LogQL
service:checkout level:error "timeout"
{service_name="checkout"} |= "timeout" | level="error"
Tracesruns as TraceQL
service:checkout status:error duration:>500ms
{ resource.service.name = "checkout" && status = error && duration > 500ms }
Metricsruns as PromQL
avg:http_server_duration{service:checkout} by {route}
avg by (route) (http_server_duration{service_name="checkout"})
Eagle's Logs page filtered by status:error: the search bar, the LogQL it runs, presets, a volume histogram and the error facet
“Runs as LogQL” sits under the bar on every search, with a copy button.
03 / AI, built in

An assistant that answers from your telemetry, with its working shown.

Ask Eagle sits in the rail on every page, and ⌘J opens it anywhere. It knows the section you are on, the query in the bar and the time range, and it answers by running the queries the pages run.

Ask Eagle docked beside the Logs page: it ran four queries, explains that order-service errors point at its database calls, and offers the queries as Run in Logs and Run in Traces buttons
The queries it ran come first, each with what came back and an Open link. A refused query is shown as refused.
  1. You askIn plain words, or by describing the query you want written.
  2. The model picks a toolsearch_logssearch_tracestrace_golden_signalsquery_metricsservice_maplist_workloadslist_hostshost_detailsget_tracesuggest_query
  3. Eagle runs it, as youThe same read-only query the page would make, with your permissions, in one of your tenant's query slots. The model never touches the store.
  4. Eagle does the arithmeticCounts, extremes and when a peak happened are computed by Eagle and handed back. Missing data comes back as “not measured”, never as zero.
  5. You get an answer you can checkEvery query listed and openable on its page; suggested queries come back as buttons. Up to 8 tool rounds a turn, then the tools are withdrawn and it must answer.

Ask Eagle, on every page

Root causes, where a piece of data lives, or the query you could not quite write. It docks beside the page on a desktop and opens as a sheet on a phone.

In the function editor

Explain, test or debug a function. It sees your unsaved files and manifest; a proposed change opens as a diff and reaches the editor only when you apply it. Commit and deploy stay yours.

In EagleSRE

An investigation agent built on LangGraph runs as a Serverless function and checkpoints every step. Ask Eagle can read incident records, but never starts or changes one.

AI Observability

Watch your own AI features: OpenTelemetry GenAI spans with tokens, recorded cost, tool calls and models, next to their latency and errors.

Your model, on your network.

Eagle is included in every stack plan; model-provider usage and inference hosting are separate. Point Eagle at any OpenAI-compatible Chat Completions endpoint with tool calls: Netter's router, a hosted provider, or a model you run yourself. The browser never talks to the model; Eagle does, from the server, and renders its answers as text, never as HTML.

# eagle.env
COMPANION_URL=https://llm.internal.example
COMPANION_API_KEY=…
COMPANION_MODEL=switchyard
COMPANION_MAX_ROUNDS=8
04 / Edge Serverless engine

Functions that run next to your telemetry.

Write TypeScript, commit it to git, and Eagle builds it into an immutable artifact. Every run gets its own isolated worker on Edge Runtime and is gone when it finishes. Functions read signals, write metrics, raise and resolve alerts, and react to telemetry as it arrives.

The function workspace in Eagle: the AWS EC2 status function's main.ts in a code editor, with the Run panel for drafts beside it
The workspace: code, manifest, run panel, bindings, triggers, deployments and history, with Ask Eagle one button away.

From commit to production, every step recorded.

  1. CommitTo a Forgejo repository Eagle creates for you, or to your own Git.
  2. BuildType-checked with Deno and bundled to an eszip. Errors land in the editor's gutter.
  3. VersionImmutable, numbered, deduplicated by source digest.
  4. StagingNotifications and sink writes are captured, so nothing real is touched.
  5. TestThe version's own tests, with their results kept beside it.
  6. ProductionPromotion gated on tests and approvals. Roll back to any built version without a rebuild.

A whole function.

presets/http-check · main.ts
import { defineScript } from "@eagle/sdk";

export default defineScript<{ url: string; expected_status: number; timeout_ms: number }>(
  async (ctx, input) => {
    const started = performance.now();
    const url = new URL(input.url);
    const response = await fetch(url, { redirect: "manual", signal: AbortSignal.timeout(input.timeout_ms) });
    await response.body?.cancel();
    const ok = response.status === input.expected_status;
    ctx.metrics.gauge("http_check_latency_ms", performance.now() - started, { target: url.origin });
    ctx.metrics.gauge("http_check_success", Number(ok), { target: url.origin });
    if (ok) await ctx.resolve(url.origin);
    else await ctx.alert({ key: url.origin, severity: "S2", title: `HTTP check answered ${response.status}` });
    return { ok, status: response.status };
  });
# script.toml
name = "HTTP check"
[run]
timeout = "30s"
[[triggers]]
every = "5m"

Six ways to start a run.

Schedule

Every five minutes, or a cron line. Fires exactly once across replicas.

Query

A query over your telemetry, evaluated against history through Piper.

Ingest

A Lua predicate inside Vector, sandboxed and hot-loaded, sees each record as it arrives.

Webhook

A bearer token per deployment, shown once and rotated from the console.

Event and listen

Topics that other functions and external publishers write to.

By hand

Run now, with a form generated from the manifest's inputs.

Presets, ready to install
HTTP checkTLS expiryDNS checkTCP connectPostgres query checkAWS EC2 status

One worker per run

Edge Runtime in oneshot mode: non-root, read-only root filesystem, and a run's timers die with it.

Secrets stay in Vault

OpenBao or Vault holds the values; Git and Postgres hold only names. Resolved secrets are redacted from every run's output.

No path inward

Workers reach Eagle's broker, the artifact store and the public internet. Private ranges, metadata endpoints and your databases are firewalled off.

Builds that work air-gapped

A pinned runtime, offline dependency packs and prebuilt preset archives: a build never reaches for a registry.

The Runs tab: each run with its status, function, trigger, environment, version and duration
Every run, kept. Trigger, environment, version, duration, logs, output and what it emitted.
An ingest rule drawer: a Lua predicate in a sandboxed editor, tested against a flattened sample log record
Ingest rules, tested first. A Lua predicate is checked against recent samples before it goes live.
05 / New: EagleSREPreview

Incident response, where the evidence already is.

EagleSRE is an optional service beside Eagle. Alerts become incidents with severity, escalation and on-call; responders work them from Eagle, Slack or Microsoft Teams. Eagle stays the identity provider: no second user database, no second login.

  1. Alert inEagle monitors and query triggers, Prometheus Alertmanager, or any webhook with its own token.
  2. IncidentMapped to a service, a severity and an escalation policy. Every action carries the version you saw, so a stale click is refused.
  3. NotifySlack, Teams, email, Pushover or Twilio, along schedules and escalation steps.
  4. InvestigateYou ask the question; the agent gathers evidence with approved read-only queries and checkpoints each step.
  5. LearnFollow-ups, postmortems, SLO definitions and status updates, alongside the incident.
EagleSRE inside Eagle: the incidents list with an S1 incident open in a drawer, showing acknowledge, escalate and resolve, an investigation question and the timeline
Incidents, investigations, services, on-call, escalation policies, requirements, monitoring review, SLOs, postmortems and status pages: one section of Eagle.
The EagleSRE bot, in Slack or Teams
/eaglesre declare S1 Checkout failures
/eaglesre incidents
/eaglesre ack <incident>
/eaglesre investigate <incident> Compare the error spike with recent changes
/eaglesre catchup <incident>

A change typed in chat comes back with a confirm button bound to the incident's revision. Answers that contain queried data are sent to you privately.

From requirements to monitors.

Write down what must stay true. A planner drafts monitors as Serverless functions and tests them, then waits: only a person can approve one, from the web, against the exact revision that passed.

One identity, short-lived credentials.

Eagle issues two-minute, audience-bound credentials to EagleSRE, and every change is checked against your current permissions in Eagle.

Preview. Incidents, escalation workers, the Slack and Teams adapters and the investigation agent are built; delivery through each provider is in acceptance testing. It is not yet a replacement for a production pager. Explore EagleSRE or contact us to scope an evaluation.

06 / What's inside

Nine sections, one set of labels.

Everything below is in the console today, reading the same store as Grafana.

Workloads

Every running service in one list, with the node it runs on, its CPU and memory, requests per second, errors and p95.

req/s · errors · p95

Infrastructure

Hosts, Docker Swarm and Kubernetes. A host opens on CPU, memory, filesystems with a fill forecast, disk and network, and says "not measured" instead of drawing a zero.

hosts · swarm · kubernetes

Service Map

Who calls whom, drawn from traces. Every service shows its call rate and error rate; colour the map by errors or by latency, or read it as a list.

graph · list

APIs

Each service by endpoint: latency percentiles, errors by span name and spans by status.

per endpoint

Logs

Search, presets and saved queries over a volume histogram, with counted facets and a patterns view.

LogQL

Traces

Spans or whole traces, golden signals over whatever the search matched, and a waterfall for each trace.

TraceQL

AI Observability

GenAI spans: tokens, cost, tool calls and models, with latency and errors beside them, as an installable dashboard preset.

GenAI spans

Monitors

Conditions with a severity. Each shows when it was last evaluated; open issues show when they last changed.

conditions · issues

Metrics and dashboards

Metrics in PromQL or the search syntax. Dashboards per tenant, with panel tabs and presets you can install and then edit.

PromQL

Built in

The things you only notice when they are missing.

  • One identity across several tenants: OIDC or Active Directory / LDAP sign-in, groups, roles and an audit log.
  • Every query bound to the tenant that made it, and API keys per tenant.
  • Every page works from a 320-pixel phone to a wall display, with a mouse or a finger. A test sweeps each route across that range.
  • Details open in drawers that live in the URL, so the link you paste opens what you were looking at.
  • Light and dark themes. The dark one is the default.
  • One telemetry store behind it, GreptimeDB or ClickHouse, read through Piper.
07 / Compared

Where Eagle differs from the consoles teams weigh it against.

Four questions that decide how a console feels in use: where it runs, what you type, where you start, and who answers when you ask.

No winners marked: each row says how the console works. Others' details from their public documentation and announcements, reviewed October 2026.
CapabilityEagleGrafanaDatadoggroundcoverSigNoz
Where it runsYour servers or Obstack Cloud. Runs air-gapped, assistant included.Self-managed, or Grafana Cloud.Datadog's cloud.Bring your own cloud: the data plane sits in your cloud account.Self-hosted open source, or SigNoz Cloud.
What you typeOne search syntax, compiled to PromQL, LogQL or TraceQL and shown under the bar. Native queries any time.Each data source's own language, with query builders.Datadog's own search and query syntax.gcQL for logs, traces and events; PromQL for metrics.A query builder, ClickHouse SQL, and PromQL for metrics.
Where you startSections in investigation order, from workloads to dashboards. Details open in drawers that live in the URL.Dashboards, and Explore for ad-hoc queries.A product area per signal: APM, Logs, Infrastructure and more.Kubernetes workloads and the signals around them.Services, traces, logs and dashboards.
The assistantAsk Eagle, with every query it ran listed. Any OpenAI-compatible model, including one you host.Grafana Assistant. Self-managed installs connect a Grafana Cloud stack; in public preview there.Bits AI, in Datadog's cloud.Agent Mode, running in your cloud.Noz, on SigNoz Cloud.

Swipe the table sideways to reach every column.

Next to Grafana

Grafana stays.

In every plan, with unlimited users and the Grafana MCP server for agents. Both read the same store, so choosing one costs nothing in the other.

A second way in

Eagle follows the incident.

Keep the dashboards you have. Open Eagle when you want to go from a service to its log line, ask a question of the data, or run code against it.

08 / How it fits

Eagle is Piper's client, and its identity service.

Piper serves one store as PromQL, LogQL and TraceQL and holds no user records. On every query it asks Eagle what the credential is, which decides the tenant, the database and the signals that may be read. Eagle starts first and needs no Piper to become healthy.

Browserdesktop, tablet, phoneEagleconsole · Ask Eagleidentity · functions controlPiperPromQL · LogQL · TraceQLGreptimeDBor ClickHouseone telemetry storeYour LLM endpointOpenAI-compatibleVector · OpenTelemetryingest and trigger teeSlack · Teamsthe EagleSRE botEagleSREpreviewincidents · on-callinvestigation agentEdge Runtimeone worker per runVault · Git · S3secrets, source, artifactsqueriesintrospectAsk Eagleidentityagent runsOTLP in

Swipe the diagram sideways to see all of it.

Available now

Eagle is in the Obstack Stack today.

Explore EagleMCP for assistant access to the stack.

Install the self-hosted Max demo with our Helm chart and a 30-day evaluation license. Run your own telemetry through Eagle and Grafana, then activate Go, Pro or Max on the same installation.