Deploy SigNoz
Observability tool for your app's traces, metrics and logs
clickhouse
Just deployed
/var/lib/clickhouse
Just deployed
/var/lib/postgresql/data
clickhouse-keeper
Just deployed
/var/lib/clickhouse-keeper
schema-migrator
Just deployed
signoz
Just deployed
/var/lib/signoz
otel-collector
Just deployed
Deploy and Host SigNoz on Railway
SigNoz is an open-source, OpenTelemetry-native observability platform that keeps traces, metrics and logs in one place instead of three. Teams run it as a self-hosted alternative to Datadog and New Relic: APM, distributed tracing, log search, dashboards and alerting, all queried out of a ClickHouse column store that stays fast on high-cardinality data. Because it speaks OpenTelemetry natively, any language SDK you already run can point at it without a proprietary agent.
Deploy SigNoz on Railway and you get the full production topology, not a single container: the SigNoz app (UI, query API and OpAMP server), an OpenTelemetry Collector receiving OTLP over gRPC and HTTP, a one-shot schema migrator for the ClickHouse tables, ClickHouse as the telemetry store, a ClickHouse Keeper node, and a managed Postgres for users, dashboards and alert rules. Your apps send telemetry to the collector, it writes into ClickHouse, and the UI reads back from it. Self-host SigNoz on Railway without wiring six containers together by hand.

Getting Started with SigNoz on Railway
Set SIGNOZ_USER_ROOT_EMAIL and SIGNOZ_USER_ROOT_PASSWORD when you deploy — the app creates that admin on first boot and reconciles it on every restart, so the instance is never left with an open signup page. The password needs 12+ characters with an uppercase letter, a lowercase letter, a digit and a symbol, or the service refuses to start. Open the SigNoz service's public URL, sign in, and you land on a home screen reporting whether ingestion is active.
Next, point an application at the collector. Its public domain accepts OTLP over HTTP on /v1/traces, /v1/logs and /v1/metrics, behind basic auth using OTLP_USERNAME and OTLP_PASSWORD; add a Railway TCP proxy on port 4317 for OTLP over gRPC. Apps in the same project can skip the public hop and use the collector's private hostname on port 4318. Once spans arrive, the Services page lists each application with P99 latency, error rate and throughput, and clicking one opens its APM view. To confirm the deployment end to end, send a handful of spans and check they appear in both Services and the Traces explorer.




About Hosting SigNoz
SigNoz answers a question most teams hit around their second production incident: why does understanding one request mean opening three tools? It stores traces, metrics and logs in the same ClickHouse database, so a slow endpoint on a dashboard leads to the spans behind it and the logs those spans emitted. Teams self-host it to keep telemetry on their own infrastructure and avoid per-host billing.
- OpenTelemetry-native ingestion — no proprietary agent, no vendor SDK
- APM with latency percentiles, error rates, Apdex and database breakdowns
- Distributed tracing with flamegraphs, trace funnels and span search
- Log management with severity filtering, live tail and parsing pipelines
- Dashboards and alerting to Slack, PagerDuty, webhooks or email
The Railway architecture splits the work the way SigNoz's own installer does. SigNoz serves the UI and query API and pushes log-parsing pipelines to the collector over OpAMP. The OTel Collector is the only ingest path; it batches spans, derives span metrics and writes to ClickHouse. The Schema Migrator runs once per deploy to create and upgrade ClickHouse tables. ClickHouse stores the telemetry, with ClickHouse Keeper coordinating its distributed DDL, and Postgres holds accounts, dashboards and alert rules.
Why Deploy SigNoz on Railway
Railway runs the whole stack as one project rather than a hand-assembled compose file.
- Six services provisioned and wired together in one click
- Persistent volumes for ClickHouse, Keeper and the app
- Private networking between the collector, ClickHouse and app
- A public HTTPS domain for the UI plus an authenticated ingest endpoint
- Vertical scaling as telemetry grows, with no per-host licence
Common Use Cases
- Application performance monitoring — track P99 latency, error rate and throughput per service, then drill into the traces behind a regression
- Debugging production incidents — correlate a failing request's trace with the logs its spans emitted
- Centralised log management — ship logs from every service into one searchable store with severity and attribute filters
- Cost-controlled observability — replace per-host APM billing with infrastructure you size yourself
Dependencies for SigNoz
signoz/signoz:latest— API server, query service and web UI (GitHub)signoz/signoz-otel-collector:latest— OTLP ingest and the schema migratorclickhouse/clickhouse-server:25.12.5— telemetry store for traces, metrics, logsclickhouse/clickhouse-keeper:25.12.5— coordination for distributed DDL- Railway managed Postgres — metastore for users, dashboards, alert rules
Environment Variables Reference
| Variable | Service | Purpose |
|---|---|---|
SIGNOZ_USER_ROOT_EMAIL / _PASSWORD | SigNoz | Admin account created on first boot |
SIGNOZ_TOKENIZER_JWT_SECRET | SigNoz | Signs session tokens; keep it stable |
SIGNOZ_SQLSTORE_POSTGRES_DSN | SigNoz | Metastore connection string |
SIGNOZ_GLOBAL_EXTERNAL__URL | SigNoz | Public URL used in alert links |
OTLP_USERNAME / OTLP_PASSWORD | OTel Collector | Basic auth on both OTLP listeners |
CLICKHOUSE_PASSWORD | all | Shared ClickHouse credential |
Note the double underscore: SigNoz maps _ to a nesting level and __ to a literal underscore, so SIGNOZ_GLOBAL_EXTERNAL_URL silently sets nothing.
Deployment Dependencies
Hardware Requirements for Self-Hosting SigNoz
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 2 vCPU | 4–8 vCPU |
| RAM | 4 GB total | 8–16 GB, most of it ClickHouse |
| Storage | 5 GB ClickHouse volume | 20 GB+, sized to retention |
| Runtime | Linux containers | Linux containers |
ClickHouse is the component that grows: storage tracks ingest volume times retention, and query latency depends far more on its memory than on the app service.
Self-Hosting SigNoz
Upstream installs SigNoz through Foundry, a CLI that generates deployment manifests from a casting.yaml:
curl -fsSL https://signoz.io/foundry.sh | bash
foundryctl forge
foundryctl cast
That brings up ClickHouse, a Keeper node, Postgres, the collector and the app. Point any OpenTelemetry SDK at the collector with the standard exporter variables:
OTEL_EXPORTER_OTLP_ENDPOINT=https://your-collector-domain
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_HEADERS=Authorization=Basic
OTEL_RESOURCE_ATTRIBUTES=service.name=checkout-api,deployment.environment=production
On Railway the same variables apply, with the collector's public domain as the endpoint.
How Much Does SigNoz Cost to Self-Host?
SigNoz is open source and the self-hosted edition is free — no licence fee, seat count or per-host charge. You pay only for the infrastructure it runs on, which on Railway means the compute and volume usage of six services. That is why teams move: managed APM vendors bill per host or per ingested gigabyte, and at 100 GB of logs a day the gap is routinely an order of magnitude. A paid SigNoz Cloud exists if you would rather not operate it.
FAQ
What is SigNoz? SigNoz is an open-source observability platform that collects traces, metrics and logs through OpenTelemetry and stores them in ClickHouse, giving you APM, tracing, log search, dashboards and alerting in one UI.
What does this Railway template deploy? Six services: the SigNoz app, an OpenTelemetry collector, a ClickHouse schema migrator, ClickHouse, ClickHouse Keeper and a managed Postgres metastore, with volumes and private networking configured.
Why does SigNoz need both ClickHouse and Postgres? ClickHouse is the telemetry store — every span, metric point and log line — and its column layout is what makes high-cardinality queries fast. Postgres holds the small relational data: accounts, dashboards and alert rules.
How do I send traces to self-hosted SigNoz from my application?
Set OTEL_EXPORTER_OTLP_ENDPOINT to the collector's domain, OTEL_EXPORTER_OTLP_PROTOCOL to http/protobuf and an Authorization: Basic header from OTLP_USERNAME and OTLP_PASSWORD.
Is the OTLP ingest endpoint open to the internet?
It is reachable publicly but not anonymous: both listeners sit behind HTTP basic auth and an unauthenticated request is rejected with 401. Rotate it by changing OTLP_PASSWORD on the collector.
Can I run more than one replica of the SigNoz app? No. It runs metastore migrations and the alert ruler in-process without leader election, so keep it at one replica and scale vertically. Retention is set per signal in the UI and enforced by ClickHouse TTLs — size that volume to ingest rate times retention.
Template Content
clickhouse
gridalpha/signoz-railwayclickhouse-keeper
gridalpha/signoz-railwayschema-migrator
gridalpha/signoz-railwaysignoz
gridalpha/signoz-railwayotel-collector
gridalpha/signoz-railway