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