Re-distribution of the official Apache SkyWalking OAP server, targeting GraalVM native image JDK 25
10K+
GraalVM native-image distribution of the Apache SkyWalking OAP server.
A self-contained native binary for distributed tracing, metrics, logging, and profiling, with faster startup and lower memory usage. No JVM installation is required.
This distribution is experimental. See the release notes for the upstream SkyWalking version and changes in each release.
| Tag | Description |
|---|---|
latest | Latest release image |
x.y.z | A specific distro release |
Pull the latest release:
docker pull apache/skywalking-graalvm-distro:latest
The examples below use latest. Pin a specific release tag or image digest for reproducible deployments.
Release images are also available at ghcr.io/apache/skywalking-graalvm-distro. Development images on GHCR use the full Git commit SHA as the tag.
linux/amd64linux/arm64Docker selects the matching architecture automatically. On macOS, Docker runs the Linux image. Separate native binaries are available from GitHub Releases.
For local evaluation, download and extract the latest release's Source code archive from GitHub Releases, then open a terminal in its root directory. This provides the Compose configuration and BanyanDB image pin for that release.
Create an override that selects the published OAP image and adds the admin port used by Horizon UI:
cat > docker/compose.release.yml <<'YAML'
services:
oap:
image: apache/skywalking-graalvm-distro:latest
ports:
- "17128:17128"
YAML
docker compose \
-f docker/docker-compose.yml \
-f docker/compose.release.yml \
up -d --pull always
When pinning an image version, use the source archive from the same release.
Once OAP has initialized, verify its health from the host:
curl -fsS http://localhost:12800/healthcheck
Point SkyWalking agents at localhost:11800 when running them on the same host. Applications on other hosts should use the OAP host's address.
Replace banyandb.example.com:17912 with a compatible BanyanDB endpoint reachable from the container:
docker run -d --pull always --name skywalking-oap \
-p 12800:12800 \
-p 11800:11800 \
-p 17128:17128 \
-e SW_STORAGE_BANYANDB_TARGETS=banyandb.example.com:17912 \
-e SW_CLUSTER=standalone \
-e SW_CONFIGURATION=none \
apache/skywalking-graalvm-distro:latest
Use the BanyanDB build pinned in your selected release's docker/docker-compose.yml as the compatibility reference.
Run SkyWalking Horizon UI separately to visualize and manage OAP data.
Configure both OAP endpoints in Horizon's horizon.yaml:
oap:
queryUrl: http://oap:12800
adminUrl: http://oap:17128
Here, oap must resolve from the Horizon container or server. It is the OAP service name when Horizon joins the same Compose network; otherwise, use the reachable OAP hostname.
This is the OAP connection section only. Follow the Horizon UI setup documentation to configure deployment and authentication. Horizon releases independently of OAP.
| Port | Protocol | Service |
|---|---|---|
12800 | HTTP | GraphQL queries, health check, and HTTP receivers |
11800 | gRPC | Agent data collection and OTLP traces, metrics, and logs |
17128 | HTTP | Admin APIs: status, inspection, UI management, rule catalogs, and DSL debugging |
17129 | gRPC | Internal admin communication between OAP nodes |
1234 | HTTP | Prometheus self-monitoring metrics |
9090 | HTTP | PromQL query API |
9411 | HTTP | Zipkin receiver, when enabled |
9412 | HTTP | Zipkin query API, when enabled |
The examples publish 12800, 11800, and 17128. Publish additional ports as required by your deployment.
| Variable | Default | Description |
|---|---|---|
SW_STORAGE_BANYANDB_TARGETS | 127.0.0.1:17912 | BanyanDB endpoint |
SW_CLUSTER | standalone | Cluster provider: standalone or kubernetes |
SW_CONFIGURATION | k8s-configmap | Dynamic configuration provider; use none for the standalone examples |
SW_CORE_REST_PORT | 12800 | Core HTTP port |
SW_CORE_GRPC_PORT | 11800 | Core gRPC port |
SW_ADMIN_SERVER_PORT | 17128 | Admin HTTP port |
SW_TELEMETRY_PROMETHEUS_PORT | 1234 | Prometheus self-monitoring port |
SW_LOG_LEVEL | INFO | Log level |
SW_RECEIVER_ZIPKIN | Disabled | Set to default to enable the Zipkin receiver |
SW_QUERY_ZIPKIN | Disabled | Set to default to enable the Zipkin query API |
JAVA_OPTS | Empty | Arguments passed to the native binary, such as -Dmode=init |
JAVA_OPTS supports native-image arguments such as Java system properties; it is not a JVM launcher.
See the configuration reference for the current development configuration. For a specific image release, use the documentation at the matching release tag.
SkyWalking agents and compatible ecosystem clients send data to the normal OAP receiver endpoints. OpenTelemetry traces, metrics, and logs use OTLP gRPC on port 11800. Zipkin ingestion and querying are available when enabled.
Use apache/skywalking-graalvm-distro with your selected image tag as the OAP container image. For a standalone OAP instance, these environment variables and probes can be used in the container specification:
env:
- name: SW_STORAGE_BANYANDB_TARGETS
value: "banyandb:17912"
- name: SW_CLUSTER
value: "standalone"
- name: SW_CONFIGURATION
value: "none"
startupProbe:
httpGet:
path: /healthcheck
port: 12800
periodSeconds: 5
failureThreshold: 120
readinessProbe:
httpGet:
path: /healthcheck
port: 12800
For Kubernetes cluster discovery, use SW_CLUSTER=kubernetes and configure the namespace, pod label selector, and pod UID settings listed in the configuration reference. The OAP service account also needs permission to discover cluster pods.
Content type
Image
Digest
sha256:e9736f24d…
Size
235 MB
Last updated
27 days ago
docker pull apache/skywalking-graalvm-distroPulls:
124
Last week