With dozens of components and dense dependencies, observability stacks are among the hardest systems to port. This post documents OBSERVE's migration to Kunpeng, Phytium, and Hygon CPUs, covering image builds, dependency fixes, benchmarks, and rollback plans.
Replacing business apps on domestic CPUs usually only touches the application layer. An observability platform, by contrast, reaches down into the kernel and container runtime: collectors run on every node, agents must match glibc and kernel versions, and storage engines lean on CPU instruction sets. It has many components, dense dependencies, and when it goes down, the whole company's alerting and triage goes down with it.
We migrated OBSERVE end-to-end onto three domestic chips: Kunpeng 920 (ARM), Phytium S2500 (ARM), and Hygon C86 (x86-compatible). Below is a reusable checklist.
Collectors and service components all move to multi-arch images. buildx produces three variants with one command:
docker buildx build --platform linux/amd64,linux/arm64 -t registry.local/observe/agent:3.2.1 --push .
Key points:
debian:bookworm-slim instead of hand-assembling arch tags.-target bpfel and bpfeb.Three classes of issues came up most:
bpftool feature probe on the target first; if kprobe and tracepoint are unavailable, fall back to /proc-based collection instead of eBPF.Migration isn't done when it "runs." You must redo capacity planning. Our collector benchmark (single node, 10k logs/s):
| Metric | x86 baseline | Kunpeng 920 | Phytium S2500 |
| --- | --- | --- | --- |
| Ingest throughput | 100% | 92% | 87% |
| CPU usage | 100% | 108% | 115% |
| Memory usage | 100% | 96% | 99% |
ARM cores are weaker individually but more numerous. After benchmarking, raise collector replica counts by 10–20% based on real throughput. Keep storage shard count unchanged, but reset the rebalance threshold used when migrating shards.
Don't do the swap in one shot. Our canary order:
Every step keeps an "x86 switch-back" lever: change weights at the DNS or LB layer to roll back instantly, with no data-layer restore required.
bpftool feature probe and degrade collection by capability.Run this checklist cleanly and the Xinchuang swap for observability is controlled. The real work is benchmarking and parameter tuning, not compilation.