Railway's July 31 changelog reads like a dashboard team showing off, and the showing off is earned: six new observability panels, cursors that sync across every graph, and Shift-drag to zoom the whole dashboard into the five minutes that matter. Here is the uncomfortable part for anyone budgeting past this quarter: the panels are free, they are genuinely good, and the price still went up. Not on your invoice — in the size of the exit. Every panel that makes Railway's dashboard nicer is one more reason the deploy target and the telemetry stay bundled, and the bundled telemetry has hard edges: 30 days of metrics, no custom application metrics at all, and log retention that tops out unless you climb plan tiers.
So here is the verdict up front, priced on one typical workload — a telemetry sidecar (OTel Collector plus Prometheus plus Grafana, 0.5 vCPU / 1 GB RAM / 10 GB disk) that a team adds the day the bundled dashboard stops being enough:
| Railway bundled panels | Self-hosted Grafana (LGTM) | Perses | |
|---|---|---|---|
| What you see | Infra metrics + edge HTTP telemetry + logs | Anything you instrument: infra, app, business KPIs | Same backends as Grafana (Prometheus, Loki, Tempo, Pyroscope), fewer plugins |
| Retention | Metrics 30 days; logs 7–90 days by plan | Whatever disk you buy | Whatever disk you buy |
| Custom app metrics | Not collected — ship to a vendor or OTel backend | Native (Prometheus scrape / OTel / Loki) | Native via the same backends |
| Dashboards as code | Clicks in a project dashboard; not git-versioned | Provisioned files + sidecar exporters; mature GitOps story | Git-native by design: YAML, percli CI validation, K8s operator |
| $/mo for the sidecar | $21.50 metered (math below) once you run backends on Railway | ~$0 marginal on an owned box, or a single-digit-$ VPS slice | Same infra as Grafana; the server itself is one small binary |
| Ops burden | Zero — Railway runs it | You run it: upgrades, backups, retention tuning | Same as Grafana, plus Sandbox-maturity caveats |
The worked math, so nobody has to trust the table: Railway meters compute at $20/vCPU and $10/GB of RAM per month with volumes at $0.15/GB-month. Half a vCPU ($10) plus a gigabyte of RAM ($10) plus 10 GB of disk ($1.50) is $21.50/mo for the sidecar on Railway rates — against roughly $0 marginal on a box you already own, since a minimal Prometheus-plus-Grafana footprint is measured in hundreds of megabytes. That $16–21/mo delta is the standing monthly cost of keeping your escape hatch on metered land. And retention sensitivity cuts one way only: tripling retention from 30 to 90 days triples the disk line (about +$3/mo on Railway volumes; near-zero on owned disk) while compute stays flat — but on the bundled panels, 90 days of logs is not a disk purchase at all, it is an Enterprise-plan conversation or a vendor bill.
What Railway actually shipped
Changelog #0301, dated July 31, 2026, bundles three announcements — a ChatGPT plugin, a dev.new preview, and the observability work — plus databases going private by default. The observability half is the one with lasting budget consequences. The Observability tab is a customizable per-environment dashboard; clicking Add block now offers six new panel types on top of the existing CPU, memory, network, disk, logs, and spend widgets.
The six break into two groups. Three HTTP metric panels — HTTP Requests (counts as stacked bars by status class), HTTP Latency (p50, p90, p95, and p99 lines), and HTTP 5xx Rate — scope to a single service each. Three log panels — HTTP Logs, DNS Logs, and Network Logs — pin live log streams to the dashboard, each supporting the log explorer's filter syntax with the filter saved into the panel. Point an HTTP Logs panel at @httpStatus:404 and you own a standing view of every dead link your users hit. DNS and Network log panels can span every service in the environment, which is the view you actually want during a "which service started misbehaving" incident.
The interaction upgrades matter as much as the panels. Synced cursors put a cursor at the same timestamp on every graph when you hover one, with per-graph tooltips — correlating a latency spike with a memory spike stops being an exercise in eyeballing two x-axes. Custom time ranges accept natural language ("2 hours ago"), shorthand ("15m"), or calendar picks, and setting an end time freezes the window so live updates stop dragging the charts forward mid-incident. Shift-drag zooms every panel to the selected window, and the browser back button restores the previous range.
Before this changelog, the dashboard covered resource metrics and runtime logs, HTTP data lived inside each deployment's own view, and time ranges were a fixed preset menu. Incidents do not align themselves with presets, so this was a real gap and the changelog closed it honestly. Give credit where due: for edge-HTTP debugging inside a 30-day window, this is now a good dashboard that costs $0 and zero operations.
Where the bundled dashboard stops
Railway's own docs draw the boundary lines, and there are four of them. First, metrics retention: up to 30 days of data per project, full stop. Second, log retention by plan — 3 days on Free, 7 on Trial and Hobby, 30 on Pro, up to 90 on Enterprise — with the genuinely nice touch that upgrading restores logs previously outside the retention window. Third, a logging throughput ceiling: 500 log lines per second per replica across all plans, with excess lines dropped and a warning emitted. A chatty service on a busy day can eat that budget faster than you expect. Fourth, and most structural: application-level metrics such as request latency, error rates, or business KPIs are not collected by Railway. The new Latency and 5xx panels describe edge HTTP telemetry, not your application's interior — queue depth, checkout conversion, per-tenant usage, model inference latency. For any of that, Railway's docs point you at the third-party guide: vendor SDKs (Datadog, New Relic, Sentry) for the low-complexity path, or OpenTelemetry export for the vendor-neutral one.
Two softer edges complete the picture. There is no log drain setting — long retention means running a Vector or Fluent Bit forwarder yourself, or emitting via SDK/OTel — and dashboard configuration lives in the project UI, not in git. No review process, no diff, no disaster recovery for the dashboards themselves beyond Railway's own backups. For a side project that is fine. For a team whose incident review asks "who changed this alert threshold and when," it is a gap with a shape you already know.
Notice the pattern: every edge is a bundling edge. Longer retention, custom metrics, and dashboard versioning are all solvable — on someone else's meter, with the deploy target and the telemetry still one vendor relationship.
What a Grafana you own costs instead
The self-hosted alternative is the boring LGTM stack — Loki, Grafana, Tempo, Mimir, or the leaner Prometheus-plus-Grafana core — and its economics are almost entirely "disk and an always-on container." A minimal four-container Prometheus-plus-Grafana setup serving a handful of scrape targets runs in roughly 160 MB of RAM; a full metrics-plus-logs-plus-traces stack serving dozens of microservices fits comfortably on a 4–8 GB VPS. Retention is a disk purchase, not a plan tier: Prometheus keeps what its local TSDB is sized for, Loki keeps what object or local storage you point it at, and the 30/90-day cliffs simply do not exist.
Run the sidecar math again slowly, because this is the number the whole post stands on. The workload: an OTel Collector receiving app telemetry, Prometheus scraping and storing metrics, Grafana rendering dashboards — 0.5 vCPU, 1 GB RAM, 10 GB disk, a size consistent with published small-setup footprints. On Railway's metered rates ($20/vCPU-month, $10/GB-month, $0.15/GB-month for volumes): $10.00 + $10.00 + $1.50 = $21.50/mo, ticking continuously, before a single application container. On an owned box with spare capacity: marginal cost effectively $0 — the containers land on CPU and RAM already paid for, and 10 GB of disk is a rounding error. On a dedicated small VPS: single-digit dollars or euros a month. The delta is ~$16–21/mo for this one workload, every month, compounding across environments (staging wants dashboards too) and across retention growth.
Retention sensitivity favors the owned side asymmetrically. Going from 30 to 90 days of metrics roughly triples disk: about 20 GB more, or +$3/mo on Railway volumes and near-zero on owned storage — while the compute lines do not move. But the bundled path has no disk line to buy: 90-day logs mean Enterprise or a vendor SDK with its own per-host, per-GB metering. The sensitivity analysis that matters is not "what does more retention cost" but "which paths even offer the knob."
Honesty requires the other column. Self-hosting is a real operational surface: Grafana and Prometheus upgrades, Grafana database backups, retention and cardinality tuning (an unbounded label set will happily eat your disk and RAM), TLS and auth for the dashboard, and no HA unless you build it. Published guides put minimum practical sizing at 2 vCPUs and 4 GB for a Docker Compose stack, and the "runs reliably" reports cluster around that same small-VPS shape. If your team has no one who will own that surface, $21.50/mo of metered sidecar — or the bundled panels plus a vendor SDK — is cheaper than the 3 a.m. page when your monitoring is down during your outage. The looked-after-ness of Railway's panels is a genuine feature with genuine value; price it, don't dismiss it.
Where Perses fits
Grafana is the default answer, but Perses deserves its own row because it inverts Grafana's weakest property for platform teams: dashboards start as code instead of ending there. Perses is a CNCF Sandbox project (accepted August 2024) built substantially by the Prometheus/Thanos community, and its whole model is GitOps-native — dashboards are versioned YAML/JSON resources authored directly or via Go/CUE SDKs, validated statically, applied through percli (a CLI designed for CI/CD pipelines), or reconciled by a Kubernetes operator. Datasources cover the stack you already run: Prometheus, Loki, Tempo, and Pyroscope natively.
For a self-hosted PaaS, two properties stand out. First, the operator-plus-CRD shape means tenant or team dashboards can be provisioned by the same declarative machinery as everything else — no ClickOps, no screenshot-driven disaster recovery. Second, Perses even ships an MCP server so AI agents can create and update dashboards as resources, which lands directly on the agent-operated-infrastructure story: the same agent that deploys the service can provision its dashboard from the same prompt.
The caveat is maturity, stated plainly: Sandbox, not graduated or even incubating, with a smaller plugin and prebuilt-dashboard ecosystem than Grafana's decade-deep library. If your team reaches for a specific datasource plugin or imports community dashboards regularly, Grafana's catalog is the safer bet today. Perses is the bet that dashboard-as-code stops being a migration project and starts being the default — right for GitOps-native teams who author more dashboards than they import.
The decision
Stay on Railway's bundled panels when the edges do not bind you: edge-HTTP debugging plus infra metrics is sufficient, 30 days of history answers your incidents, log volume stays under 500 lines/sec per replica, and nobody needs a custom metric or a git-blamed dashboard. That description fits a large fraction of early-stage projects, and for them the new panels are pure win — $0, zero ops, materially better incident debugging than the preset-range era.
Graduate the day any edge binds — usually in this order: the first custom metric ("we need queue depth on a graph"), the first retention argument ("the incident started before the 30-day window"), the first compliance questionnaire asking for a year of audit logs. At that point the cheapest portable move is OpenTelemetry instrumentation now, before you need the backend: Railway's own guide documents the OTLP variables, and instrument-once-point-anywhere means the backend choice (self-hosted LGTM on owned iron, Perses for the GitOps-native, or a vendor for the ops-averse) stays reversible. What you must not do is let the nice panels delay instrumentation — every month of uninstrumented app code is a month of history no backend can ever recover.
The through-line is the one the TODO spec named: each panel deepens the bundle. Railway's dashboard team did good work — synced cursors and Shift-drag zoom are the interactions every dashboard should have had years ago — but good work in a bundle is still a bundle. Price the panels at what they cost to leave, keep your telemetry instrumented portably, and the glow-up stays an asset instead of quietly becoming the reason your observability strategy is a vendor relationship.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. Star the repo on GitHub or deploy your first app today.
Sources
- Railway changelog #0301, "Railway plugin for ChatGPT, dev.new preview, new observability panels" (July 31, 2026) — changelog
- Railway docs, "Observability Dashboard" — docs
- Railway docs, "Logs" (retention table, 500 lines/sec/replica limit, no log drain) — docs
- Railway docs, "Metrics" (infra-only metrics, 30-day retention) — docs
- Railway docs, "Connect a Third-Party Observability Tool" (vendor SDK vs OpenTelemetry) — docs
- Railway blog, "Usage-Based vs. Fixed Pricing: Which Is Cheaper in 2026?" ($20/vCPU, $10/GB, $0.05/GB egress, $0.15/GB volume) — blog
- CNCF, "Perses" (Sandbox, accepted August 29, 2024) — cncf.io
- Perses docs (Prometheus/Tempo/Loki/Pyroscope support, percli CI validation, SDKs) — perses.dev
- SAP Community, "Moving ahead in Dashboard Visualization with Perses" (dashboard-as-code, operator, MCP server) — article
- "The Ultimate Self-Hosted Observability Stack" (4–8 GB VPS for dozens of microservices) — dev.to
- BeeHiveTeam/monad-grafana (four containers, ~160 MB RAM, small Prometheus+Grafana setup) — github



