ClickHouse Databases Fix for Signoz
Problem
The Signoz OTEL collector was failing with errors:
error: "code: 81, message: Database signoz_metrics does not exist"
Root Cause
Signoz uses separate ClickHouse databases for different telemetry types:
signoz_metrics- for metrics datasignoz_traces- for trace/span datasignoz_logs- for log data
We only had the signoz database (created by ClickHouse init), but Signoz exporters expect the specific database names.
Solution
1. Created Required Databases
CREATE DATABASE IF NOT EXISTS signoz_metrics;
CREATE DATABASE IF NOT EXISTS signoz_traces;
CREATE DATABASE IF NOT EXISTS signoz_logs;
2. Updated OTEL Collector Configuration
Updated config/signoz/otel-collector-config.yaml to use the correct database names:
exporters:
signozclickhousemetrics:
dsn: tcp://default:clickhouse123@clickhouse:9000/signoz_metrics
clickhousetraces:
datasource: tcp://default:clickhouse123@clickhouse:9000/signoz_traces
clickhouselogsexporter:
dsn: tcp://default:clickhouse123@clickhouse:9000/signoz_logs
Verification
Check Databases Exist
docker exec football-booking-backend-boilerplate-clickhouse-1 \
clickhouse-client --user default --password clickhouse123 \
--query "SHOW DATABASES"
Should show:
signoz(for query service metadata)signoz_metricssignoz_tracessignoz_logs
Check Collector Logs
docker logs football-booking-backend-boilerplate-signoz-otel-collector-1
Should see:
- No more "Database does not exist" errors
- "Everything is ready. Begin running and processing data."
Database Structure
signoz_metrics
- Stores metric samples and time-series data
- Tables:
distributed_samples_v4,distributed_time_series_v4, etc.
signoz_traces
- Stores trace and span data
- Enables distributed tracing queries
signoz_logs
- Stores log data (OpenTelemetry Logs Data Model)
- Schema V2 with fields:
timestamp,trace_id,span_id,severity_text,body, etc.
signoz (existing)
- Used by Signoz Query Service for metadata
- User data, dashboards, alerts configuration
Automatic Database Creation
For future deployments, you can add an init script to automatically create these databases:
# In docker-compose.dev.yml
clickhouse:
volumes:
- clickhouse-data:/var/lib/clickhouse
- ./config/clickhouse/init-databases.sql:/docker-entrypoint-initdb.d/init-databases.sql
Create config/clickhouse/init-databases.sql:
CREATE DATABASE IF NOT EXISTS signoz_metrics;
CREATE DATABASE IF NOT EXISTS signoz_traces;
CREATE DATABASE IF NOT EXISTS signoz_logs;
Notes
- The
signozdatabase (created byCLICKHOUSE_DBenv var) is still used by the query service - The three separate databases (
signoz_metrics,signoz_traces,signoz_logs) are used by the OTEL collector - This separation allows for better data organization and potential future scaling