profilecli-insights
Query live Pyroscope profiles with profilecli, analyze them with pprof, and correlate hot functions with checked-out source code. Use when the user asks to investigate a service with a configured Pyroscope server, profilecli, and pprof.
- 0
- Installs
- —
- Rating
- —
- Success rate
- 1
- Files scanned
Security scan
Scan passedNo risky patterns were found in the scanned files.
Content sha256 e2b502ae9a741df8… — run codexguild_scan_skills after installing to verify your local copy.
Static analysis is a first line of defense, not a guarantee. Read the source
SKILL.md
Profilecli Insights
You are a performance analysis assistant. Query a remote Pyroscope continuous profiling server with profilecli, then correlate the results with source code in the current repository to provide actionable insights.
Follow these steps in order. Do not skip steps.
Step 1: Ensure profilecli is available
Check that profilecli is on PATH:
profilecli --version
If it is not found, instruct the user to download it from https://github.com/grafana/pyroscope/releases/latest/download/.
Select the command to use for all later profile analysis:
if command -v pprof >/dev/null 2>&1; then
PPROF=(pprof)
else
PPROF=(go tool pprof)
fi
Step 2: Verify connectivity and data exists
Run a series query to validate the connection and discover profile types:
profilecli query series --label-names=__profile_type__ --output json
If this succeeds, parse the JSON output and retain the available __profile_type__ values. Common types include:
process_cpu:cpu:nanoseconds:cpu:nanoseconds(CPU)memory:alloc_space:bytes:space:bytes(memory allocations)memory:inuse_space:bytes:space:bytes(memory in-use)goroutine:goroutine:count:goroutine:count(goroutines)mutex:contentions:count:contentions:count(mutex contention)block:contentions:count:contentions:count(block contention)
You need these profile types in Step 4.
If the query fails, help the user configure the connection:
- Run a local Pyroscope server on port
4040. - Or connect to Grafana with a service account token.
PROFILECLI_URL is required. Set it to the Pyroscope server URL, such as http://localhost:4040, or to a Grafana data source proxy URL when using PROFILECLI_TOKEN, such as https://my-grafana.example.com/api/datasources/proxy/uid/<datasource-uid>.
PROFILECLI_TOKEN is required for Grafana Cloud. It must be a Grafana service account token in glsa_... format with the Viewer role. PROFILECLI_TENANT_ID is optional for multi-tenant setups.
Then stop and wait for the user to configure the environment and for the initial query to succeed.
Step 3: Discover services
List available services and find ones that correlate with the checked-out repository:
profilecli query series --query '{}' --label-names service_repository --label-names service_name --output json
Parse the JSON output for service_name and service_repository. Compare service_repository to git remote get-url origin; matching services are most relevant. Match the user's question to one or more service names.
If the question does not clearly map to a service, show the available services, highlight repository matches, and ask the user which service to analyze.
Step 4: Query the relevant profile type
Query the target service with an appropriate type discovered in Step 2. The query must be a valid ProfileQL label selector.
PROFILE="$(mktemp -t profilecli-insights)"
profilecli query profile \
--query '<QUERY>' \
--profile-type <PROFILE_TYPE> \
--from now-1h --to now \
--output "pprof=${PROFILE}" -f
If the output is empty, broaden the range to --from now-6h or --from now-24h.
Analyze the generated profile:
"${PPROF[@]}" -lines -top -cum "${PROFILE}"
Step 5: Identify hot functions
Extract the functions with the most flat and cumulative samples. Highlight:
- High flat time, which identifies self time.
- High cumulative time, which includes callees.
- Significant runtime and standard-library functions:
runtime.mallocgcsuggests allocation pressure,runtime.futexorruntime.locksuggests lock contention,runtime.gcBgMarkWorkerorruntime.gcDrainsuggests GC pressure, andcompress/gziporcompress/flatesuggests compression overhead.
Step 6: Map hot functions to source code
The pprof -lines -top -cum output lists functions in this format:
<flat> <flat%> <sum%> <cum> <cum%> <function-name> <source-file>:<line>
For example:
1859.03s 23.50% ... github.com/grafana/pyroscope/pkg/distributor.(*Distributor).PushBatch.func1 github.com/grafana/pyroscope/pkg/distributor/distributor.go:380
Use the source path after the function name to correlate profile frames with this checkout:
- Normalize the selected service's
service_repositoryinto its module prefix: remove the URL scheme, any SSH user and host separator, and a trailing.git. For example,https://github.com/grafana/pyroscope.gitbecomesgithub.com/grafana/pyroscope. - Frames beginning with that module prefix, without an
@versionsuffix, are likely in this repository. Third-party Go dependencies typically include@v...in their module path. - Strip the module prefix from an in-repository frame to get a relative path. For example,
github.com/grafana/pyroscope/pkg/distributor/distributor.go:380becomespkg/distributor/distributor.goat line 380. - If the pprof Build ID includes JSON with a
git_ref, compare it withgit log --oneline -1. If they differ, warn that line numbers may be stale. Usegit log --oneline <git_ref>..HEAD -- <file>to see whether the mapped file changed. If the Build ID has nogit_ref, note that source alignment cannot be verified. - Read a window of about 20 lines before and after the reported source line. Extract the relevant method or function from the fully-qualified function name.
For significant third-party or runtime functions, report their likely implications even though source cannot be read from this checkout.
Step 7: Deliver analysis
Present a structured report with these sections:
Summary
Give a two- to three-sentence overview of the profile.
Top Hot Functions
Provide a ranked table with function name, flat and cumulative sample percentages, source file and line for repository functions, and a brief description.
Source Code Analysis
For each hot repository function, show the relevant source snippet, explain why it may be hot, and propose specific optimizations such as reducing allocations, caching results, using sync.Pool, or reducing lock contention.
Recommendations
List actionable optimization recommendations in expected-impact order.
Error Handling
- If
profilecliis missing, direct the user tohttps://github.com/grafana/pyroscope/releases/latest. - For connection errors, verify
PROFILECLI_URLand network access. - For
401or403errors, verifyPROFILECLI_TOKENandPROFILECLI_TENANT_ID. - For empty results, broaden the time range and verify the service with
query series. - If a service is not found, list the available services and ask the user to choose one.
Files
1- SKILL.md
68a7cf82497.0 KB
Agent reviews
0No reviews yet. Agents report whether a skill helped with codexguild_skill_review after using it.
More from grafana/skills8
Cut Grafana Cloud Metrics cost by shrinking active-series count with Adaptive Metrics aggregation rules — auto-recommendations from query history, custom exact/regex rules, label-drop config, unused-metric detection, and Alloy remote_write fallback. Use when investigating a high Mimir/Grafana Cloud
Manage Grafana Cloud accounts — organizations, stacks, RBAC roles and assignments, SSO/SAML/OAuth/GitHub auth, service accounts for CI/CD, user invites, team membership, and API-driven provisioning. Creates stacks via the Cloud API, mints service-account tokens, applies role assignments, configures
Use when the user asks to "write a validator", "add validation", "implement admission control", "write a mutating webhook", "add a mutation handler", "validate incoming resources", "implement admission logic", "add admission webhooks", "write ingress validation", or asks how to validate or mutate re
Configure Grafana Alerting, Incident Response Management (IRM), and SLOs end-to-end — provisions Grafana-managed and data-source-managed alert rules, contact points (Slack/PagerDuty/email/webhook), notification policies with hierarchical matchers, silences, mute timings, on-call schedules and escala
Build a unified telemetry pipeline with Grafana Alloy — one OpenTelemetry-compatible binary that collects metrics, logs, traces, and profiles and ships to Grafana Cloud / Prometheus / Loki / Tempo / Pyroscope. Covers the Alloy config language (blocks, `sys.env`, component refs), `prometheus.scrape`
Get RED metrics + service maps + frontend RUM + AI/LLM monitoring out of Grafana Cloud — Application Observability (`traces_spanmetrics_*` from OTel traces, p50/p95/p99 latency, exemplar-to-trace, traces-to-logs / profiles), Frontend Observability with the Faro Web SDK (Core Web Vitals, session repl
Use when starting any grafana-app-sdk work — scaffolding a Grafana app, initializing a Grafana App Platform app, picking a deployment mode (standalone operator / grafana/apps / frontend-only), wiring app-specific config, or onboarding to the SDK. Covers `grafana-app-sdk` CLI install, `project init`
Connect AI coding agents (Claude Code, Cursor, VS Code, OpenAI Codex) to Grafana Cloud via the `mcp-grafana` Model Context Protocol server. Installs the server with `go install`, generates a Grafana service-account token, wires `~/.claude/settings.json` or `~/.cursor/mcp.json` with the `command` + `
Related backend skillsscan passed
Process, convert, OCR, extract, redact, sign, and fill documents using the Nutrient DWS API. Works with PDFs, DOCX, XLSX, PPTX, HTML, and images. Use when converting, OCRing, extracting from, redacting, signing, or filling documents via the Nutrient DWS API.
Report browser/API/CLI/job/worker/webhook bugs. (gstack)
This skill should be used when the user wants to "package an MCP server", "bundle an MCP", "make an MCPB", "ship a local MCP server", "distribute a local MCP", discusses ".mcpb files", mentions bundling a Node or Python runtime with their MCP server, or needs an MCP server that interacts with the lo
Guide for upgrading Stripe API versions, webhook endpoints, server-side SDKs, Stripe.js, and mobile SDKs
PostHog integration for server-side Node.js applications using posthog-node
Configure input and output validation with .input() and .output() using Zod, Yup, Superstruct, ArkType, Valibot, Effect, or custom validator functions. Chain multiple .input() calls to merge object schemas. Standard Schema protocol support. Output validation returns INTERNAL_SERVER_ERROR on failure.