Skip to content

SigNoz — Architecture

Component breakdown, deployment topologies, and data flow for SigNoz.

System Architecture

flowchart TB
    subgraph Sources["Data Sources"]
        APP["Application\n+ OTel SDK"]
        PROM["Prometheus\nTargets"]
        LEGACY["Jaeger /\nZipkin Clients"]
        FB["FluentBit /\nFluentD"]
        RUM["Browser\n(RUM SDK)"]
    end

    subgraph CollectorFleet["OTel Collector Fleet"]
        direction TB
        GW["Gateway Collectors\n(load-balanced)"]
        AGT["Agent Collectors\n(DaemonSet, optional)"]
    end

    subgraph Backend["SigNoz Backend"]
        direction TB
        QS["Query Service\n(Go API)"]
        Rule["Ruler +\nAlertmanager"]
        OpAMP["OpAMP Server\n(dynamic config)"]
        EE["Enterprise Extensions\n(SSO, RBAC, SAML)"]
        FE["React Frontend\n(SPA)"]
    end

    subgraph CHCluster["ClickHouse Cluster"]
        direction TB
        Shard1["Shard 1\n(Replica A + B)"]
        Shard2["Shard 2\n(Replica A + B)"]
        ZK["ZooKeeper /\nClickHouse Keeper"]

        subgraph Tables["Core Tables"]
            T_Traces["signoz_traces\n.signoz_index_v2"]
            T_Logs["signoz_logs\n.logs"]
            T_Metrics["signoz_metrics\n.samples_v4"]
        end
    end

    subgraph Meta["Metadata"]
        PG["PostgreSQL\n(metadata, auth)"]
    end

    Sources --> CollectorFleet
    GW -->|"ClickHouse\nexporter"| CHCluster
    AGT -->|"forward"| GW
    QS -->|"query"| CHCluster
    Rule -->|"eval"| CHCluster
    QS --> FE
    QS --> PG
    OpAMP -.->|"reconfigure"| CollectorFleet

    style Backend fill:#7b1fa2,color:#fff
    style CHCluster fill:#1565c0,color:#fff

Component Responsibility Matrix

Component Language Role Scales Via
OTel Collector (Gateway) Go Ingestion, processing, routing Horizontal (replicas behind LB)
OTel Collector (Agent) Go Per-node collection, forwarding DaemonSet (1 per node)
Query Service Go API layer, ClickHouse queries Horizontal (stateless)
Ruler / Alertmanager Go Alert evaluation, notifications Single leader
OpAMP Server Go Dynamic collector reconfiguration Single instance
React Frontend TypeScript UI, dashboards, query builder Static assets (CDN/replicas)
ClickHouse C++ Columnar storage for all signals Sharding + replication
ZooKeeper / Keeper Java/C++ ClickHouse coordination 3-node ensemble
PostgreSQL C Metadata, user auth, settings Standard HA (RDS etc.)

Deployment Topologies

Small (< 50 GB/day)

flowchart LR
    OTel["OTel Collector\n(single)"]
    QS["Query Service"]
    FE["Frontend"]
    CH["ClickHouse\n(single node)"]
    PG["PostgreSQL"]

    OTel --> CH
    QS --> CH
    QS --> PG
    QS --> FE

Production (50–200 GB/day)

flowchart LR
    subgraph Collectors["Collector Fleet"]
        C1["Collector 1"]
        C2["Collector 2"]
        C3["Collector 3"]
    end

    LB["Load Balancer"]
    subgraph QSPool["Query Service Pool"]
        QS1["QS 1"]
        QS2["QS 2"]
    end

    subgraph CHCluster["ClickHouse (2×2)"]
        S1R1["Shard1 Rep1"]
        S1R2["Shard1 Rep2"]
        S2R1["Shard2 Rep1"]
        S2R2["Shard2 Rep2"]
    end

    Collectors --> LB --> CHCluster
    QSPool --> CHCluster

ClickHouse Storage Schema Detail

Trace Index Table

Column Type Purpose
timestamp DateTime64(9) Nanosecond precision timestamp
traceID FixedString(32) 128-bit trace identifier
spanID String Span identifier
parentSpanID String Parent span link
serviceName LowCardinality(String) Service name
name LowCardinality(String) Operation name
kind Int8 Span kind (server/client/etc.)
durationNano UInt64 Span duration
statusCode Int16 Status code
httpMethod LowCardinality(String) HTTP method
httpRoute LowCardinality(String) HTTP route
resourceAttributes Map(String, String) Resource attributes

Log Table

Column Type Purpose
timestamp UInt64 Unix nanoseconds
body String Log message body
severityText LowCardinality(String) ERROR, WARN, INFO, etc.
severityNumber UInt8 Numeric severity
traceID String Correlation to traces
spanID String Correlation to spans
resourceAttributes Map(String, String) Resource context
logAttributes Map(String, String) Log-specific attributes

Sources