← Back to blog
Xinchuang 4 min read 炬鲸团队

Deploying JJHub OBSERVE on the Xinchuang Stack: Kylin V10 on ARM

A complete walkthrough for deploying OBSERVE on Kylin V10 (Phytium/Kunpeng aarch64) with Dameng DM8 or KingbaseES, covering DB init, compatibility gotchas, and benchmark numbers.

Environment checklist

  • OS: Kylin V10 SP1 / SP2 (server edition)
  • CPU: Phytium FT-2000+ or Kunpeng 920 (aarch64)
  • Database: Dameng DM8 or KingbaseES V8
  • OBSERVE server and collection Agent (both ship as arm64 binaries)

Why ARM and Kylin deserve their own guide

The hard part of a Xinchuang deployment is not "will it run," it's the dependency chain. glibc versions, system libraries, database drivers, and the build toolchain can all differ from x86. The OBSERVE server is compiled in Go and ships as an aarch64 static binary with no runtime dependencies — copy it over and it runs. The Agent also has an arm64 build, so there's no compiling on site. That also means you don't need GCC or a Go toolchain on the target machine; a shell that can extract a tarball is enough. Most Xinchuang projects stall not on the application itself but on getting a working build environment on a locked-down host, so shipping static binaries removes that entire class of problem.

Deployment steps

  1. Extract the package, place the binaries in /usr/local/jjhub/, and create a run user with useradd -r -s /sbin/nologin jjhub;
  2. Initialize the database: both Dameng and Kingbase provide JDBC drivers, and OBSERVE's init-dm.sql / init-kingbase.sql scripts import directly;
  3. Edit config.yaml to point at the database:
database:
  type: dm8
  host: 127.0.0.1
  port: 5236
  user: jjhub
  password: "******"
  1. Register a systemd unit and start: systemctl daemon-reload && systemctl start jjhub, then check journalctl -u jjhub -f for errors.

Compatibility gotchas

  • Dameng: it's case-sensitive by default. Choose "case-insensitive" when creating the database, or your table and column names must match the init scripts exactly;
  • Kingbase: runs in Oracle-compatible mode — don't drop the schema parameter in the connection string;
  • Time zone: ARM server BIOS clocks are often UTC. Make sure timedatectl output matches your business timezone, or log timestamps will shift by 8 hours;
  • GLIBC: some Kylin V10 SP1 systems ship older glibc. If you've manually upgraded the kernel, confirm the static binaries still load;
  • Firewall/SELinux: Kylin enables the firewall by default. Open the Agent ports (4317/4318 by default) via firewall-cmd, or collected data won't get through.

High availability and capacity planning

For production, plan on at least three nodes: the OBSERVE server in active-standby or cluster mode, and the database on Dameng or Kingbase's built-in replication. Collection Agents are distributed to each business host and report to the nearest gateway. A single 4-core/16 GB node handles millions of log lines per day; as volume grows, move storage to dedicated nodes and archive cold data to object storage. Keep the Agent count in mind too — hundreds of hosts each pushing logs will saturate a single gateway before the server does, so size the gateway tier separately.

Benchmarks and takeaways

On two 4-core/16 GB Phytium servers (one running OBSERVE, one running Dameng), single-node log ingest reached roughly 30,000 lines per second, and aggregate queries over a billion-log dataset returned with a P95 under 3 seconds. An observability platform runs fine on the Xinchuang stack — the key is picking the right architecture: aarch64 binaries plus domestic database adapters, not brute-force compiling x86 source on ARM. If your vendor only offers x86 packages, treat that as a red flag for how much pain the rest of the rollout will bring.

Networking and support considerations

Two practical items often get missed in Xinchuang rollouts. First, network topology: domestic data centers frequently segment the management plane from the business plane, so decide early whether the OBSERVE server and its gateways sit in the same VLAN as the database. The database is usually the bottleneck, not the application, so co-locate them and keep the Agent-to-gateway path short. Second, make sure your vendor ships arm64 artifacts as a first-class product, not a one-off build. Ask for the exact glibc baseline their binaries target, and a statement on which Kylin/UOS patch levels they test against. A vendor that can't answer those two questions is one that will cost you a week of integration time the first time the OS pushes a security update.

One last note on verification: after the smoke test, run the exact same jjhub reindex and systemctl status jjhub sequence on one spare host before touching production, so the first real cutover is a repeat of a known-good procedure rather than a first attempt.