Bỏ qua

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 data
  • signoz_traces - for trace/span data
  • signoz_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_metrics
  • signoz_traces
  • signoz_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 signoz database (created by CLICKHOUSE_DB env 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