Skip to content

Local dashboard

The collector serves a local dashboard at http://127.0.0.1:9191 (change with [api].bind in collector.toml). It is bound to loopback by default and protected by the JWT from [auth]; the phpray CLI hands you a valid token, in the browser you log in with the same token string.

Pages

  • Overview — per PHP version: requests/min, error rate, avg/p95/max duration, CPU time, memory, DB queries/min, HTTP calls/min, N+1 count. This is the "always-on" summary layer; it never samples.
  • Sites — list of docroots/hostnames with the same metrics per site; click through for the per-site drill-down.
  • Traces — the normal/full/alert records, filterable by level, duration, URI prefix, site. Each trace shows:
  • the timeline: request duration split into PHP, DB, HTTP, errors
  • the SQL list with fingerprints, durations and N+1 grouping
  • outbound HTTP calls (target, status, time)
  • PHP errors captured during the request
  • components (per-plugin / per-function breakdown) when the request was profiled — inclusive vs self time and call counts
  • Alertsalert-level traces, crash alerts (crash_threshold/window) and 4xx/5xx spikes; each alert links to the traces around it.

Reading a profile

In the components table: incl is time including children, self is time in the function/plugin itself. Sorted by self by default — that is where the wall time actually goes. WooCommerce, theme, plugin names appear as their canonical component path (e.g. plugins/woocommerce).

What the dashboard does not do

No cross-server view, no long-term storage beyond retention, no alert channels beyond local — that is what PHPRay Cloud is for (overview).