Skip to content
Last9
Book demo

Continuous Profiling

Inspect CPU flamegraphs and top-function rankings for your Kubernetes services in Last9 Profiling, without leaving the dashboard.

Last9 Profiling shows where CPU time is going inside your services. Open Profiling in the left navigation to see a continuous flamegraph and top-functions table for any instrumented service — without leaving Last9.

Profiling is a peer signal to Logs, Traces, and Metrics. You can jump from a slow trace or a firing alert into the flamegraph for the same service and time window.

Prerequisites

  • Profiling data flowing into Last9. See Kubernetes profiling for the eBPF DaemonSet setup.
  • A service with the last9.profiling/enabled: "true" pod label on at least one workload.
  • Profiling enabled for your organization. Contact support@last9.io if the Profiling nav item is not visible.

Open Profiling

Click Profiling in the left navigation (between Traces and Synthetic Monitoring) or navigate to app.last9.io/profiles.

Select a service

When you open Profiling without a service selected, the page shows all services that have profile data in the current time window as clickable chips. Click a service chip to load its flamegraph.

Filters

All filters apply immediately (300 ms debounce) and sync to the URL so you can share the exact view.

FilterDescription
ServiceRequired to see data. Select from the suggestion chips or the service dropdown.
ClusterRestrict to profiles from a specific Kubernetes cluster.
NamespaceRestrict to profiles from a specific Kubernetes namespace.
EnvFilter by the deployment.environment.name attribute. This is an exact match — selecting prod does not also match production.
RuntimeRestrict to a specific language runtime: Java, Node, Go, Python, or all.
Profile typeSwitch between available profile types (CPU, allocation, wall). Profile types that have no data in the selected window are shown as disabled. Phase 1 ships CPU-only for eBPF collection.
Time rangeDefault is the last 1 hour. Use the time picker to select any window.

Views

Use the Flamegraph / Top Functions toggle to switch between the two views. Switching does not re-fetch data — both views are computed from the same loaded profile.

Flamegraph

The flamegraph shows the full call-stack tree for the selected service and time window. Width represents cumulative CPU time.

InteractionWhat it does
Hover a frameShows the function name, self time %, and total time % in a tooltip.
Click a frameZooms into that frame and pins its details panel: function name, self/total samples, stack hash, and file location when available. A breadcrumb at the top tracks the zoom path. Click a breadcrumb entry or press Esc to zoom back out.
SearchType a substring in the search box to highlight matching frames and dim everything else.
Hide runtimeToggle off OS and runtime-internal frames (runtime.*, libc.*, GC, syscall) to focus on application code.

Frame colors group packages: each unique top-level package (Go package path, Java class root, Node module) gets a consistent color. The Show top N stacks note appears when the loaded tree was capped at 1,000 stacks.

Top Functions

The Top Functions table ranks every function by exclusive (self) sample count. Sort by Self %, Total %, or Samples. Function names without file and line information appear when the profiled binary has no debug symbols.

Share a profile view

The selected service, filters, time range, and view are all synced to the URL. Copy the address bar URL to share the exact view — recipients see the same flamegraph without having to re-select filters.

Profiling in the service detail tab

Profiling data is also available on the Profiling tab inside any service’s detail panel in Discover → Services. The tab shows a flamegraph scoped to that service with the same time range and controls. If the service has no profiling data, the tab shows a setup prompt.

Agent-driven profiling investigation

Use Last9 MCP to query profiling data from a coding agent or an automated investigation. Four tools are available:

ToolUse for
get_profile_servicesList services that have profiling data in a time window
get_profile_summaryShort natural-language triage summary for a service — call first to decide whether a deeper investigation is needed
get_top_functionsSelf-sample function ranking for a service and profile type
get_flamegraphFull nested flamegraph tree for building a structured report

Include profiles in LAST9_TOOLSETS or use investigate (which includes profiling tools). See the MCP profiling tools reference for parameters.


Troubleshooting

  • No services appear on the landing page

    Check that at least one workload has the last9.profiling/enabled: "true" pod label and that the eBPF profiler DaemonSet is running. Use kubectl rollout status daemonset/last9-profiler --namespace last9-profiler to confirm. Widen the time range — new data takes up to a few minutes to appear.

  • Frames show as [unknown]

    The eBPF profiler records stacks but cannot always resolve symbols for stripped binaries or shell-only images. Use a Go, Java, or Node workload built with debug symbols to verify the pipeline before profiling production services. Unknown frames from historical data are not re-symbolized after ingestion.

  • Profile type is disabled (greyed out)

    The selected service has no data for that profile type in the current window. Phase 1 collects CPU profiles only. Other types (allocation, wall) appear when data is available.

  • Profiling nav item not visible

    Profiling is currently in early access. Contact support@last9.io to enable it for your organization.

Please get in touch with us on Discord or Email if you have any questions.