Skip to content

Apache SkyWalking — Architecture

Component breakdown, deployment topologies, and the V2 engine internals for Apache SkyWalking.

System Architecture

flowchart TB
    subgraph Probes["Probes & Agents"]
        JA["Java Agent\n(bytecode injection)\nauto-attach"]
        DotNet[".NET Agent"]
        GoAgent["Go Agent\n(compile-time)"]
        PyAgent["Python Agent"]
        NodeAgent["Node.js Agent"]
        PHPAgent["PHP Agent"]
        Rover["Rover\n(eBPF network profiling)"]
        Satellite["Satellite\n(Go edge proxy)"]
        OTelP["OTel Collector\n(OTLP receiver)"]
        EnvoyALS["Envoy ALS\n(service mesh)"]
    end

    subgraph OAP["OAP Server Cluster"]
        direction TB
        subgraph Receivers["Receiver Layer"]
            gRPC_R["gRPC Receiver\n(port 11800)"]
            HTTP_R["HTTP Receiver\n(port 12800)"]
            Kafka_R["Kafka Consumer\n(optional)"]
        end

        subgraph Analysis["Analysis Core (V2 Engine)"]
            OAL["OAL V2\n(ANTLR4 + Javassist)\nMetric aggregation"]
            MAL["MAL V2\n(Prometheus → metrics)"]
            LAL["LAL V2\n(Log analysis)"]
            MQE["MQE\n(Metric Query Engine)"]
        end

        subgraph Services["Service Layer"]
            Topo["Topology Builder"]
            Alert["Alerting Engine\n(rules + ML)"]
            Profile["Profiling Service"]
            Hierarchy["Service Hierarchy"]
        end
    end

    subgraph StorageLayer["Storage (Pluggable)"]
        BDB["BanyanDB\n(recommended)\nLiaison + Data nodes"]
        ES["Elasticsearch\n/ OpenSearch"]
        CH_SW["ClickHouse"]
        PG["PostgreSQL"]
    end

    subgraph UI["Presentation"]
        SWUI["SkyWalking UI\n(Vue.js)"]
        Grafana_SW["Grafana\n(PromQL plugin)"]
    end

    Probes -->|"native SW / OTLP\n/ Envoy ALS"| Receivers
    Receivers --> Analysis
    Analysis --> StorageLayer
    Services --> StorageLayer
    MQE --> SWUI
    OAP -.->|"PromQL"| Grafana_SW

    style OAP fill:#0d47a1,color:#fff
    style BDB fill:#1b5e20,color:#fff
    style Probes fill:#4a148c,color:#fff

Sub-Project Ecosystem

flowchart LR
    subgraph Core["Apache SkyWalking"]
        OAP_C["OAP Server\n(Java)"]
        UI_C["UI\n(Vue.js)"]
    end

    subgraph Agents["Language Agents"]
        JA_C["Java Agent"]
        NET["SkyWalking .NET"]
        GO["SkyWalking Go"]
        PY["SkyWalking Python"]
        NODE["SkyWalking Node.js"]
        PHP_C["SkyWalking PHP"]
        RUST_C["SkyWalking Rust"]
        CPP["SkyWalking C++"]
    end

    subgraph Infra["Infrastructure"]
        BDB_C["BanyanDB\n(Go)"]
        SAT_C["Satellite\n(Go, edge proxy)"]
        ROV["Rover\n(Go, eBPF)"]
        GraalVM_C["GraalVM Distro\n(native image)"]
    end

    subgraph Tools["Tools"]
        SWCTL["swctl\n(CLI)"]
        Helm_C["Helm Charts\n(OCI)"]
        Eyes["SkyWalking Eyes\n(license checker)"]
        Infra_E2E["Infra E2E\n(test framework)"]
    end

    Core --- Agents
    Core --- Infra
    Core --- Tools

BanyanDB Cluster Architecture

flowchart TB
    subgraph OAPCluster["OAP Cluster"]
        OAP1["OAP 1"]
        OAP2["OAP 2"]
        OAP3["OAP 3"]
    end

    subgraph BanyanCluster["BanyanDB Cluster"]
        L1["Liaison Node 1\n(query routing)"]
        L2["Liaison Node 2"]
        D1["Data Node 1\n(shard owner)"]
        D2["Data Node 2\n(shard owner)"]
        D3["Data Node 3\n(shard owner)"]
    end

    OAPCluster -->|"gRPC"| L1
    OAPCluster -->|"gRPC"| L2
    L1 --> D1
    L1 --> D2
    L1 --> D3
    L2 --> D1
    L2 --> D2
    L2 --> D3

    style BanyanCluster fill:#1b5e20,color:#fff

V2 DSL Engine Pipeline

sequenceDiagram
    participant Build as Build Phase
    participant Startup as OAP Startup
    participant Runtime as Runtime

    Note over Build: V2 (ANTLR4 + Javassist)
    Build->>Build: Parse OAL/MAL/LAL rules
    Build->>Build: Generate immutable AST
    Build->>Build: Compile to bytecode (Javassist)
    Build->>Startup: Load precompiled classes

    Note over Startup: Deterministic loading
    Startup->>Startup: Load manifests
    Startup->>Startup: Register metering functions
    Startup->>Runtime: Ready (no Groovy runtime)

    Note over Runtime: Thread-safe execution
    Runtime->>Runtime: Process incoming telemetry
    Runtime->>Runtime: Execute compiled OAL rules
    Runtime->>Runtime: Write to storage

Sources