Maple is live · start your free trial
Kubernetes monitoring

Cluster, workload, and span in one view

Install one Helm chart. Kubelet, host, and kube-state metrics flow in over OTLP. The OpenTelemetry Operator injects pod identity into every span your apps emit, so a slow request lands you on the exact replica that served it.

Cluster console

Workloads, pods, and nodes — one filter sidebar

The same view your platform team lives in. Facet down to a deployment in a namespace on a node, or scope to a cluster and watch it live.

cluster: prod-us-east-1 LIVE
infra › kubernetes › workloads
Last 12 hours Reload Live 10s
Nodes 12
Workloads 8
Cluster CPU 42%
Cluster MEM 54%

Workloads

Aggregated pod metrics by deployment, statefulset, and daemonset.

Deployment StatefulSet DaemonSet
Namespace Workload Kind Ready CPU Memory Node
default api-gateway Deployment 3/3
47%
62%
ip-10-0-1-12
default order-service Deployment 4/4
71%
51%
ip-10-0-1-44
default checkout-worker StatefulSet 2/2
23%
38%
ip-10-0-2-08
observability otel-collector DaemonSet 6/6
39%
48%
per-node
default payment-svc Deployment 2/3
86%
67%
ip-10-0-1-44
default inventory-svc Deployment 3/3
34%
49%
ip-10-0-2-08
kube-system coredns Deployment 2/2
12%
21%
ip-10-0-1-12
ingress-nginx nginx-ingress DaemonSet 3/3
28%
33%
per-node
Three views

Pods, nodes, and workloads — first-class

Same filters everywhere. Click through from a workload to its pods to the node that runs them.

/infra/kubernetes/pods 200 pods

Pods

Per-pod CPU and memory — against requests and limits.

Pod CPU req CPU lim Mem lim
otel-gateway-5988fb47f… ns observability 147% 37% 30%
prd-artifacts-api-6688… ns default 0% 52% 10%
prd-warpstream-5bb84bb… ns warpstream 42% 42% 35%
prd-enrichment-api-769… ns default 0% 34% 21%
/infra/kubernetes/nodes 3 nodes

Nodes

Kubelet stats per node, with uptime and lifecycle.

Node Status CPU Last seen
i-0ef7f77feb3e0a3eb Active 3.00 14s ago
i-0293a9e7e2bac82a4 Active 2.65 30s ago
i-0a8c19f2d4e7b15c1 Active 1.84 22s ago
 
/infra/kubernetes/workloads 21 workloads

Workloads

Aggregated by deployment, statefulset, daemonset.

Workload Pods Avg CPU NS
api-gateway 3 47% default
order-service 4 71% default
payment-svc 2 86% default
inventory-svc 3 34% default
Span → pod

From a slow span to the exact pod

The OpenTelemetry Operator stamps every span with k8s.pod.name, k8s.node.name, and k8s.namespace.name at admission. The slow trace already knows where it ran.

Trace: 7af1c204 1.18s
Waterfall
api-gateway
POST /checkout
1.18s
order-service
createOrder
425ms
payment-svc
processPayment
612ms
inventory-svc
reserveItems
98ms
Pod attribution
pod Active
payment-svc-78f4d6c89b-x7k2p
k8s.pod.name payment-svc-78f4d6c89b-x7k2p
k8s.node.name ip-10-0-1-44.ec2.internal
k8s.namespace.name default
One Helm chart

Drop it on your cluster

Read the chart end-to-end. Three commands and the cluster is reporting kubelet, host, and kube-state metrics over OTLP.

helm install maple-k8s-infra
1 Create the ingest-key secret
kubectl create namespace maple
kubectl -n maple create secret generic maple-ingest-key \
  --from-literal=ingest-key=$MAPLE_INGEST_KEY
2 Install the chart
helm upgrade --install maple-k8s-infra \
  oci://ghcr.io/makisuo/charts/maple-k8s-infra \
  --namespace maple \
  --set maple.ingestKey.existingSecret.name=maple-ingest-key \
  --set maple.ingestKey.existingSecret.key=ingest-key \
  --set global.clusterName=production
3 Watch the rollout
kubectl -n maple rollout status daemonset/maple-k8s-infra-agent

Helm chart, not a black box

maple-k8s-infra is a small Helm chart you can read end-to-end. Kubelet stats per pod, host metrics per node, kube-state metrics across the cluster. OTLP receivers on every node for your apps.

Pod and span, joined

Spans arrive carrying k8s.pod.name, k8s.node.name, and k8s.namespace.name. Drill from a slow trace straight to the pod and node that ran it.

Kube-state metrics

Deployments, StatefulSets, DaemonSets, replica counts, and pod phase, all scraped via the standard kube-state-metrics exporter.

Workloads, pods, and nodes

Three first-class infrastructure views in the dashboard. Inspect a deployment, a single pod, or a single node, with the same filters you use everywhere else.

OpenTelemetry Operator

Pods get OTEL_EXPORTER_OTLP_ENDPOINT and pod/node identity injected at admission. Apps with an OTel SDK linked are instrumented without code changes.

Multi-cluster ingest

One ingest endpoint per organization. Send from prod, staging, and a developer's kind cluster, and split them with cluster-name resource attributes.

Explore more

Related features

Ready to observe with clarity?

Start sending traces, logs, and metrics in under five minutes.

maple.dev — observability, simplified