Skip to content
v0.3.3Logs, profiles, eBPF network, agents.Release notes

Every signal.Every dollar.One agent.

Cost allocation, logs, continuous profiling, eBPF network cost, rightsizing and alerting for AKS, GKE and EKS — with a read-only agent that connects every signal to the dollar it costs.

LokiOpenCostPyroscopeeBPF agentsalert glueone open-source install

kubehero ask “why did checkout-api spend jump?” live
Rendered live in your browser · demo data
Clouds
AKS · GKE · EKS
any Kubernetes ≥ 1.28
License
Apache-2.0 · BSL-1.1
free to self-host
Install
One Helm chart
air-gap capable
Data
Never leaves your cluster
agents are read-only

Five tools, five agents, five UIs. Or one install.

The usual answer to “what is this cluster doing, and what does it cost?” is a cost tool, a log stack, a profiler, a network agent and an alerting layer — each with its own collector, storage, query language and UI, and none sharing a cost model. KubeHero is one collector and one control plane that speaks their APIs.

Cost
OpenCost / Kubecost
agent
cost-model + scrape
store
Prometheus
query
allocation API
ui
its own
Logs
Loki + Promtail / Alloy
agent
log-shipper DaemonSet
store
object store + index
query
LogQL
ui
Grafana
Profiles
Pyroscope + Alloy
agent
eBPF profiler DaemonSet
store
object store
query
profile selectors
ui
Grafana / Pyroscope
Network
a flow-cost agent
agent
network DaemonSet
store
its own
query
its own
ui
its own
Alerts
Alertmanager + rules per tool
agent
an evaluator per tool
store
—
query
PromQL · LogQL · …
ui
Alertmanager
5node agents
4+storage systems
4+query languages
0shared cost model

Seven signals. One model of what they cost.

Every pillar writes into the same ClickHouse store with the same labels — cluster, namespace, workload, team — so a log spike, a hot function and a cross-zone edge all carry a dollar figure, and the agent can join them.

01Cost

Allocation you can reconcile.

OpenCost-compatible allocation by any dimension — namespace, workload, team, label — with idle and shared cost handled explicitly, per-resource cost for CPU, RAM, GPU and network, and a FinOps FOCUS export for the finance side of the house.

  • Drop-in /allocation/compute — OpenCost and Kubecost API consumers keep working
  • Idle and shared cost kept separate, or shared back weighted or evenly
  • FOCUS 1.2 CSV export, forecasts, chargeback and an efficiency score
OpenCost-compatible API
curl -s "$KUBEHERO/allocation/compute?window=7d&aggregate=namespace&shareIdle=true" \
  | jq '.data[0].checkout | {totalCost, cpuEfficiency, networkCost}'
{
  "totalCost": 4213.62,
  "cpuEfficiency": 0.41,
  "networkCost": 318.4
}

Honest limit — Allocation is an estimate reconciled to node prices — not your cloud invoice.

Cost allocation docs
02Logs

Loki’s query language. Your cluster’s storage.

A DaemonSet tails every container’s logs into ClickHouse. Query with LogQL — filters, json and logfmt parsers, metric queries — live-tail it, collapse a million lines into a handful of patterns, and see what each team’s log volume costs per month.

  • LogQL: selectors, line filters, json/logfmt parsers, label filters, metric queries
  • Drain pattern mining and live tail; log volume priced per team
  • Loki push + query API — Grafana’s Loki datasource just works
LogQL · error rate by namespace
sum by (namespace) (
  count_over_time({cluster="eks-use1-prod", level="error"} |= "timeout" [5m])
)
Logs docs
03Profiles

Flamegraphs with a price tag.

eBPF samples every CPU on every node — no code changes, no restarts. Scrape pprof endpoints with the annotations Pyroscope and Alloy already use, or push to a Pyroscope-compatible /ingest. Every function gets a monthly cost.

  • Whole-node eBPF CPU profiling — nothing to instrument
  • pprof scraping via profiles.grafana.com/* annotations; Pyroscope-compatible /ingest
  • Diff flamegraphs and $/mo per function, from the workload’s real CPU spend
pod annotations · pprof scrape
metadata:
  annotations:
    profiles.grafana.com/cpu.scrape: "true"
    profiles.grafana.com/cpu.port: "6060"
    profiles.grafana.com/memory.scrape: "true"

Honest limit — User-space stacks rely on frame pointers: great for Go, Rust and the JVM with -XX:+PreserveFramePointer.

Profiling docs
04Network

See the bill for every edge.

cgroup eBPF programs account every byte between pods, services, nodes and the internet. A live service map shows who talks to whom — and which edges cross zones or leave the cloud, priced per GB, with TCP retransmits on every hop.

  • Byte-level flow accounting per workload pair — no sidecars, no mesh
  • Cross-zone and internet egress priced per GB, defaults per cloud, overridable
  • TCP retransmits per edge from a stable kernel tracepoint
kubehero network costs --since 24h
WORKLOAD            EGRESS   CROSS-ZONE    $/MO   TOP DESTINATION
retrieval-indexer   412 GB   1.9 TB      $1,682   storage.googleapis.com
checkout-api         38 GB   884 GB        $368   payments-worker
model-server-a100     6 GB   310 GB        $109   retrieval-indexer

Honest limit — eBPF needs Linux ≥ 5.8 with cgroup v2 — the default on current AKS (Ubuntu 22.04+, Azure Linux), GKE (COS) and EKS (AL2023, Bottlerocket) node images.

Network docs
05Rightsizing

Recommendations that actually apply.

Percentile recommendations from measured container usage — p95 CPU plus headroom, memory never below the observed max. The operator applies them only through a RightsizingPolicy a human arms: bounded steps, OOM-aware, rollout-aware, reversible.

  • p50 / p95 / p99 / max per container, confidence from sample coverage
  • recommend → shadow → apply — humans arm, the operator executes
  • Bounded steps, OOM guard, skips mid-rollout; kubehero undo restores
RightsizingPolicy
apiVersion: kubehero.kubehero.io/v1
kind: RightsizingPolicy
metadata:
  name: payments-rightsize
spec:
  scope:
    namespaceSelector:
      matchLabels: { team: payments }
  mode: apply            # recommend | shadow | apply — inert until armed
  safety:
    p95HeadroomPct: 15
    observationWindow: 7d
    maxChangePerDay: 1
Rightsizing docs
06Alerts

One rule engine for every signal.

Alert on LogQL metrics, spend rate, budget burn, anomalies, network cost and cluster events — OOM kills, crash loops, unschedulable pods — and route to the tools your on-call already lives in. Silences and re-notification included.

  • Six rule kinds, one grammar: logs · cost · budget · anomaly · network · event
  • pending → firing → resolved, templated annotations, silences
  • Slack · PagerDuty · Opsgenie · Teams · Discord · webhooks · Alertmanager
AlertRule · kind: logs
name: checkout-error-spike
kind: logs
query: sum by (namespace) (count_over_time({namespace="checkout", level="error"}[5m]))
op: ">"
threshold: 100
pendingFor: 5m
severity: critical
channels: ["slack://payments-oncall", "pagerduty://checkout"]
Alerting docs
07Agents

Ask why. Get evidence.

kubehero ask runs a read-only investigation across cost, logs, profiles, the network map and cluster events, then answers with cited evidence and guarded proposals. The same tools are exposed over MCP, so Claude can query your clusters too.

  • A read-only tool loop over every signal; every fact cites its query
  • kubehero mcp — an MCP server for Claude and other agents
  • Bring your own Anthropic key, or deterministic rules and nothing leaves
kubehero ask
$ kubehero ask "why did checkout-api spend jump last night?"
  ↳ get_cost_allocation  checkout · 24h          +31%
  ↳ get_log_patterns     payments-client         retry storm ×14.2k
  ↳ get_top_functions    checkout-api            http.(*Client).Do  $1.9k/mo
answer   spend +31% ($4.2k/mo): a retry storm in payments-client
proposal RightsizingPolicy + alert rule — inert until you arm it
Agents & MCP docs

Don’t take the screenshots’ word for it. Run it, in this tab.

Four live demos on a bundled demo cluster: a working LogQL engine with Drain pattern mining, a zoomable flamegraph priced per frame, the eBPF service map with cross-zone and egress cost, and the spend-ceiling kill switch — armed by a human, reversible by design.

loading demo…

Runs entirely in your browser on bundled demo data — no backend, no account, nothing sent anywhere.

An agent that can read everything. And change nothing.

Advisor briefings (text and voice), kubehero ask investigations and the MCP server all run the same read-only tool loop over every signal. What comes out is evidence and proposals — never a write. A proposal becomes a change only as a guarded CRD.

  1. 01
    Propose
    the agent

    Drafts a RightsizingPolicy, CeilingPolicy or alert rule, validated against a CRD whitelist. It holds no write credentials — anything else is downgraded to “investigate”.

  2. 02
    Arm
    a human

    Reviews the diff, the dollar impact and the risk call, then arms it from the dashboard or the CLI. Nothing fires before this.

  3. 03
    Execute
    the operator

    Deterministic reconciler: bounded steps, OOM- and rollout-aware, PDB-aware evictions, dry-run first. Never the model.

  4. 04
    Audit
    the control plane

    Every proposal, arm and action lands in an append-only, HMAC-signed log you can forward to your SIEM.

  5. 05
    Reverse
    a human

    kubehero undo <audit-id> restores the previous spec inside the cooldown window.

the model never holds the pen: it drafts, a human arms, the operator executes

kubehero ask · read-only investigation
$ kubehero ask "why did checkout-api spend jump last night?"
  investigating · eks-use1-prod · 24h · brain: claude (your key)

  ✓ get_cost_allocation checkout · 24h vs 7d      412ms spend +31% · $4.2k/mo
  ✓ list_anomalies      kind=spend                188ms checkout-api z=4.1 from 01:40
  ✓ get_log_patterns    {namespace="payments"}    603ms "retrying request" ×14.2k
  ✓ get_top_functions   checkout-api · cpu        377ms TLS handshake +12.6 pts
  ✓ get_service_map     checkout → payments       241ms 164 retransmits/min

ANSWER
  checkout-api spend rose 31% ($4.2k/mo) because payments-worker's
  upstream started failing at 01:40. Every retry opens a fresh TLS
  connection [3][4], multiplying handshake CPU and cross-zone
  traffic [5]. Fix the client's connection reuse; cap the blast radius:

PROPOSED  inert until a human arms them
  AlertRule         payments-retry-storm   logs · rate > 200/5m
  RightsizingPolicy checkout-api           shadow · cpu 2.0 → 1.2

  evidence [1] allocation [2] anomaly [3] LogQL [4] flamegraph [5] map
MCP server · kubehero mcp

Claude, meet your clusters.

The same read-only tools, over the Model Context Protocol — stdio for desktop clients, streamable HTTP with --http. Authenticate with a viewer-role token.

claude_desktop_config.json
{
  "mcpServers": {
    "kubehero": {
      "command": "kubehero",
      "args": ["mcp"],
      "env": {
        "KUBEHERO_ENDPOINT": "https://kubehero.internal.example.com",
        "KUBEHERO_TOKEN": "<a viewer token>"
      }
    }
  }
}
Claude Code
claude mcp add kubehero -e KUBEHERO_ENDPOINT=https://kubehero.internal.example.com -- kubehero mcp

tools: list_clusters · get_cost_allocation · get_cost_timeseries · list_rightsizing · query_logs · get_log_patterns · get_top_functions · get_service_map · list_network_costs · list_alerts · list_anomalies · get_briefing · investigate

Your key, your model
LLM features use your own Anthropic API key; the advisor defaults to Claude Opus 5 and the model is configurable.
No key? Still works
Deterministic rules brains write the briefings and run investigations. Nothing leaves the cluster.
What an LLM sees
In LLM mode, the tool results an investigation needs — including capped samples of log lines — go to Anthropic under your key. Rules mode sends nothing.
Voice briefings
Every briefing carries a spoken script; the dashboard reads it with your browser’s speech synthesis.

Works with what you already run. Adoption is a config change.

KubeHero speaks the wire formats your tools already use — Loki push and query, the OpenCost allocation API, Pyroscope ingest, OTLP logs, Alertmanager — so Grafana dashboards, shippers and FinOps pipelines point at it without a migration.

query it from

Your existing front-ends

  • GrafanaLoki datasource → KubeHero
  • OpenCost clients/allocation/compute
  • FinOps toolsFOCUS 1.2 CSV export
  • Claude + MCP clientskubehero mcp
  • Prometheus/metrics + recording rules
ship into it

The agents you already run

  • Promtail/loki/api/v1/push
  • Grafana Alloyloki.write
  • Fluent Bitloki output
  • OpenTelemetry CollectorOTLP/HTTP logs · /v1/logs
  • Pyroscope SDKs/ingest (pprof, folded)
alert through

Where on-call lives

  • Slackslack://
  • PagerDutypagerduty://
  • Opsgenieopsgenie://
  • Microsoft Teamsteams://
  • Discorddiscord+https://
  • Webhookswebhook+https://
  • Alertmanageralertmanager+https://
runs beside

Your platform, untouched

  • Karpenter · Cluster Autoscalertheir nodes priced, not replaced
  • HPA · KEDArightsizing edits requests, not replicas
  • VPAits containers are skipped
  • Trivyfindings ranked by workload $
  • AKS · GKE · EKSany Kubernetes ≥ 1.28
Config snippets for every integration

An honest table. Where others win, it says so.

Cost tools, log stores, profilers and all-in-one SaaS each do part of this well. KubeHero's claim is narrower and checkable: all of it, in one open install you run yourself, with automation a human arms.

Capabilities of KubeHero compared with OpenCost, Kubecost, Grafana Loki, Grafana Pyroscope, Datadog and Cast AI
capabilityKubeHeroOpenCostKubecostGrafana LokiGrafana PyroscopeDatadogCast AI
Cost allocation
idle + shared, any label
✓✓✓✗✗✓✓
Logs
store + LogQL-class queries
✓✗✗✓✗✓✗
Continuous profiling
incl. no-code eBPF
✓✗✗✗✓✓✗
Network cost per workload
cross-zone + egress
✓◐3✓3✗✗✓5✓6
Rightsizing that applies
not just recommends
✓✗✓2✗✗✓5✓
Human-armed guardrails
armed · bounded · audited · undo
✓—◐2——◐5◐6
AI investigation
built-in, cites evidence
✓✗✗✗4✗4✓5✗
MCP server
for Claude & other agents
✓✓1✓2◐4◐4✓5✓6
Self-hosted, data stays in-cluster
air-gap capable
✓✓✓✓✓✗✗
License
Apache-2.0 + BSL-1.17Apache-2.0Proprietary (free tier)AGPL-3.0AGPL-3.0ProprietaryProprietary
Price
Free, self-hostedFreeFree tier + enterpriseFree OSS; Grafana Cloud paidFree OSS; Grafana Cloud paidUsage-based SaaSQuote-based SaaS
✓ built in◐ partial — see note✗ not offered— no automation to guardchecked against public docs on 2026-09-28 · wrong? open an issue
  1. 1OpenCost ships a built-in MCP server from v1.118. source
  2. 2Kubecost 3.0 added automated container request sizing (free tier up to 250 cores) with suspendable, audited resize runs; an MCP server ships by default from v3.3. source
  3. 3OpenCost/Kubecost network costs come from a separate network-costs DaemonSet that classifies egress as cross-zone, cross-region or internet; no service map. source
  4. 4Loki and Pyroscope are AGPL-3.0. MCP access is through the separate mcp-grafana server; the Grafana Assistant AI is a Grafana Cloud feature. source
  5. 5Datadog: Kubernetes Autoscaling applies rightsizing (in-app or GitOps rollouts); data-transfer cost allocation via Cloud Network Monitoring (eBPF) + CCM; Bits AI SRE and the MCP server are GA. source
  6. 6Cast AI: network cost monitoring (egress, cross-AZ), policy-driven workload autoscaling, and an MCP server; SaaS control plane with an in-cluster agent. source
  7. 7CLI, collector, cost model and protos are Apache-2.0; control plane, operator, advisor and dashboard are BSL-1.1 — source-available and free to self-host, not OSI-approved. source
The long version, tool by tool

One collector. One control plane. Every surface reads the same store.

A DaemonSet does the kernel work on every node; a control plane on ClickHouse and Postgres stores, prices and serves it. Agents propose through CRDs; only the operator — armed by a human — ever writes to your cluster.

KubeHero architectureThe kubehero-collector DaemonSet on every node captures eBPF network flows and CPU profiles, tails container logs, scrapes pprof endpoints and reads usage and cluster events, and ships them to the control plane, which stores them in ClickHouse and Postgres and serves the dashboard, CLI, MCP server, advisor agents, Grafana and alert channels. Agents propose guarded CRDs; a human arms them; the operator applies them, records an audit entry, and can undo.IN EVERY NODECONTROL PLANESURFACESkubehero-collectorDaemonSet · read-only Kubernetes RBACeBPF · cgroup_skb flowseBPF · CPU profilercontainer log tailerpprof scraperusage · cluster eventsShippers you already runPromtail · Alloy · Fluent Bit · OTel · SDKskubehero-control-planeGo · Connect-RPC · stateless replicasingest · TelemetryServiceLoki push · OTLP · PyroscopeClickHouselogs · profilesflows · usagecost rollupsPostgrespolicies · alertssilences · auditclusters · RBACLogQL · Drain · allocationrightsizing · alert evaluatorserve · RPC · Loki · /allocationDashboardevery signal, one UIkubehero CLIlogs · profile · cost · askkubehero mcpClaude & MCP clientsAdvisor + Askread-only agentsGrafanaLoki + Prometheus datasourcesAlert channelsSlack · PagerDuty · Teams · …GUARDED ACTION LOOPAgent proposesRightsizingPolicy · CeilingPolicyHuman armsdashboard or kubehero CLIkubehero-operator executesbounded · OOM- & rollout-awareAudited · reversibleHMAC-signed log · kubehero undoproposals are inert CRDs — agents hold no write credentials

Collector — eBPF needs Linux ≥ 5.8 with cgroup v2; without it the collector keeps running and skips the kernel signals.

Control plane — degrades to clearly-labelled demo data when a store is missing, unless KUBEHERO_DEMO_MODE=false.

Everything runs in your cluster from one Helm chart; images on ghcr.io/kubehero-io are cosign-signed with SBOM attestations.

Architecture docs

Five minutes to every signal. No account. No license key.

One Helm chart installs the collector, control plane, operator, advisor and dashboard into your cluster. Nothing phones home; the images mirror cleanly into air-gapped registries.

Any Kubernetes ≥ 1.28 · Helm ≥ 3.12 · embedded Postgres + ClickHouse, auth on by default

helm · oci://ghcr.io/kubehero-io/charts
helm install kubehero oci://ghcr.io/kubehero-io/charts/kubehero \
  -n kubehero-system --create-namespace

# your admin token (dashboard sign-in, CLI, API)
kubectl -n kubehero-system get secret kubehero-control-plane   -o jsonpath='{.data.admin-token}' | base64 -d; echo

# the dashboard — sign in with that token
kubectl -n kubehero-system port-forward svc/kubehero-dashboard 3001:3001
What you get
  • Cost allocation and chargeback by namespace, team and label
  • Every container's logs, queryable with LogQL — or from Grafana
  • CPU flamegraphs for every workload, no code changes
  • A priced service map: cross-zone and internet egress
  • Rightsizing recommendations — applied only when you arm a policy
  • Default alerts: error spikes, OOM kills, spend anomalies, budget burn
  • Advisor briefings: rules brain by default, Claude with your own key

eBPF signals (profiles, network) need Linux ≥ 5.8 with cgroup v2. Everything else works on any node.

Sixty seconds, start to fix. Watch the whole story.

From the 3 AM page to a cited answer and a guarded, reversible fix. The film is also a HyperFrames composition — flip to the live-rendered version and it plays as HTML, right in this page.

the 3 am problem → one install → every signal → the agent → a guarded action → the outcome