Metadata store
Use this page when you decide between SQLite and PostgreSQL, or move to PostgreSQL to run more than one backend replica.
Telemetry goes to ClickHouse. Everything else (organizations, users, dashboards, alert
rules, SSO domains, authorization) lives in the metadata store, configured under
sqlstore.
| Provider | Use it for |
|---|---|
sqlite (default) |
A single backend replica. The database is a file on a persistent volume. |
postgres |
Several backend replicas, or an existing managed PostgreSQL. |
The backend creates and migrates the schema at startup on both providers. Pick the provider before the first start: FuseScope does not copy metadata from one store to the other.
SQLite
Section titled “SQLite”sqlstore: provider: sqlite sqlite: path: /var/lib/signoz/signoz.db mode: wal busy_timeout: 10s transaction_mode: immediate| Key | Default | Values |
|---|---|---|
sqlite.path |
/var/lib/signoz/signoz.db |
Path of the database file |
sqlite.mode |
wal |
Journal mode: delete, wal |
sqlite.busy_timeout |
10s |
How long to wait for a lock |
sqlite.transaction_mode |
immediate |
deferred, immediate, exclusive |
The Helm chart keeps the file on a PVC (signoz.persistence.*, 1Gi by default).
PostgreSQL
Section titled “PostgreSQL”sqlstore: provider: postgres postgres: dsn: postgres://fusescope:secret@postgres:5432/fusescope?sslmode=disablepostgres.dsn is required with this provider. It accepts a postgres:// URL or a
key=value connection string, including sslmode and the other libpq parameters.
Through the environment:
SIGNOZ_SQLSTORE_PROVIDER=postgresSIGNOZ_SQLSTORE_POSTGRES_DSN=postgres://fusescope:secret@postgres:5432/fusescope?sslmode=disableConnection pool
Section titled “Connection pool”These keys apply to both providers:
| Key | Default | Description |
|---|---|---|
max_open_conns |
100 |
Maximum open connections; the PostgreSQL pool size |
max_conn_lifetime |
0 |
Maximum time a connection is reused; 0 keeps connections regardless of age |
With the Helm chart
Section titled “With the Helm chart”Bundled PostgreSQL
Section titled “Bundled PostgreSQL”postgresql: enabled: true auth: existingSecret: fusescope-postgressignoz: replicaCount: 2The chart deploys PostgreSQL 15 (user and database signoz), sets
SIGNOZ_SQLSTORE_PROVIDER and SIGNOZ_SQLSTORE_POSTGRES_DSN and skips the SQLite volume.
The password comes from postgresql.auth.password or, with postgresql.auth.existingSecret,
from the password key of that secret (postgresql.auth.secretKeys.userPasswordKey
changes the key).
External PostgreSQL
Section titled “External PostgreSQL”Leave postgresql.enabled off and set the provider and DSN, keeping the DSN in a secret:
signoz: replicaCount: 2 env: signoz_sqlstore_provider: postgres signoz_sqlstore_postgres_dsn: valueFrom: secretKeyRef: name: fusescope-metastore key: dsn