This is an automated email from the ASF dual-hosted git repository.
wu-sheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-website.git
The following commit(s) were added to refs/heads/master by this push:
new fa38d0b7c7a docs(blog): polish the Meet Horizon UI series — navigation
links, P4 docs, phrasing (#884)
fa38d0b7c7a is described below
commit fa38d0b7c7ac98b6c924068a1cc92e07a70925f2
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Tue Jun 30 14:59:16 2026 +0800
docs(blog): polish the Meet Horizon UI series — navigation links, P4 docs,
phrasing (#884)
Post-publication consistency pass over all 17 posts (EN + CN):
- Navigation: hyperlink the 'Next up' teaser to the next post across the
whole series in both languages (it was applied inconsistently — never in EN,
partially in CN); P17 is the finale with no next link. Also link the one
previous-post reference in P16 CN.
- P4 (Deployment & BanyanDB): add the doc handoff to the BanyanDB
dashboards doc — it was the only post missing one.
- P1: drop the 'releasing soon' time-pin on the OAP 11.0 reference (EN +
CN) so it doesn't age.
- Minor phrasing: P11 CN (按带→按), P17 EN (read-only fallback clause).
---
content/blog/2026-06-21-horizon-ui-dashboards-and-mqe/index.md | 2 +-
content/blog/2026-06-21-horizon-ui-deployment-and-banyandb/index.md | 4 +++-
content/blog/2026-06-21-horizon-ui-topology-and-dependency/index.md | 2 +-
content/blog/2026-06-21-skywalking-horizon-ui-introduction/index.md | 6 +++---
content/blog/2026-06-22-horizon-ui-3d-infrastructure-map/index.md | 2 +-
content/blog/2026-06-22-horizon-ui-trace-explorer/index.md | 2 +-
.../2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md | 2 +-
content/blog/2026-06-23-horizon-ui-log-explorer/index.md | 2 +-
content/blog/2026-06-26-horizon-ui-profiling/index.md | 2 +-
.../blog/2026-06-29-horizon-ui-alarms-and-incident-triage/index.md | 2 +-
.../blog/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md | 2 +-
.../2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md | 2 +-
.../blog/2026-06-30-horizon-ui-access-control-and-security/index.md | 2 +-
.../blog/2026-06-30-horizon-ui-customization-and-templates/index.md | 2 +-
.../2026-06-30-horizon-ui-getting-started-and-migration/index.md | 2 +-
content/blog/2026-06-30-horizon-ui-localization-i18n/index.md | 2 +-
content/blog/2026-06-30-horizon-ui-platform-introspection/index.md | 2 +-
content/zh/2026-06-21-horizon-ui-dashboards-and-mqe/index.md | 2 +-
content/zh/2026-06-21-horizon-ui-deployment-and-banyandb/index.md | 4 +++-
content/zh/2026-06-21-horizon-ui-topology-and-dependency/index.md | 2 +-
content/zh/2026-06-21-skywalking-horizon-ui-introduction/index.md | 6 +++---
content/zh/2026-06-22-horizon-ui-3d-infrastructure-map/index.md | 2 +-
content/zh/2026-06-22-horizon-ui-trace-explorer/index.md | 2 +-
.../2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md | 2 +-
content/zh/2026-06-23-horizon-ui-log-explorer/index.md | 2 +-
content/zh/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md | 2 +-
.../2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md | 2 +-
.../zh/2026-06-30-horizon-ui-access-control-and-security/index.md | 2 +-
content/zh/2026-06-30-horizon-ui-localization-i18n/index.md | 2 +-
content/zh/2026-06-30-horizon-ui-platform-introspection/index.md | 2 +-
30 files changed, 38 insertions(+), 34 deletions(-)
diff --git a/content/blog/2026-06-21-horizon-ui-dashboards-and-mqe/index.md
b/content/blog/2026-06-21-horizon-ui-dashboards-and-mqe/index.md
index ef7dfae1e9b..1b8e3660025 100644
--- a/content/blog/2026-06-21-horizon-ui-dashboards-and-mqe/index.md
+++ b/content/blog/2026-06-21-horizon-ui-dashboards-and-mqe/index.md
@@ -86,4 +86,4 @@ It's worth stressing that this is *one* system. The same five
widgets, the same
Everything above is the *reading* experience. Each widget's MQE, its
`visibleWhen` gate, its format, and the per-scope grids are all editable from
the **Layer dashboards** admin — but that authoring story (draft → preview →
publish, with the inline-and-expand MQE editor) is its own post later in the
series. For the field-level reference, see the docs on [dashboard
widgets](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/components/dashboard-widgets/)
and [charts](https://sk [...]
-Next up: **topology and service dependency** — the same data Horizon charts
here, drawn as a map you can walk.
+Next up: [**topology and service
dependency**](/blog/2026-06-21-horizon-ui-topology-and-dependency/) — the same
data Horizon charts here, drawn as a map you can walk.
diff --git
a/content/blog/2026-06-21-horizon-ui-deployment-and-banyandb/index.md
b/content/blog/2026-06-21-horizon-ui-deployment-and-banyandb/index.md
index d88f831bebd..70e8a3800cd 100644
--- a/content/blog/2026-06-21-horizon-ui-deployment-and-banyandb/index.md
+++ b/content/blog/2026-06-21-horizon-ui-deployment-and-banyandb/index.md
@@ -80,4 +80,6 @@ Figure 6: Flows — the same role-pair edges as a sortable
table, one block per
None of the above is a hand-built "BanyanDB screen." The clustering rules, the
per-role node metrics, and the role-pair edge metrics are all a self-contained
block on the layer template, edited from the **Layer dashboards admin →
Deployment scope** and carried with the template's export/import — the same
config-driven model behind every other layer, which a later post covers end to
end.
-Next up: **the 3D Infrastructure Map** — where this same deployment, and every
other layer, lifts off the page into a WebGL view of your whole estate.
+For the BanyanDB layer's own fields — the Cluster, Container, Group, and
Deployment views — see the [BanyanDB
dashboards](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/dashboards/banyandb/)
doc.
+
+Next up: [**the 3D Infrastructure
Map**](/blog/2026-06-22-horizon-ui-3d-infrastructure-map/) — where this same
deployment, and every other layer, lifts off the page into a WebGL view of your
whole estate.
diff --git
a/content/blog/2026-06-21-horizon-ui-topology-and-dependency/index.md
b/content/blog/2026-06-21-horizon-ui-topology-and-dependency/index.md
index 98128fcc3ec..63e7cb8a8d5 100644
--- a/content/blog/2026-06-21-horizon-ui-topology-and-dependency/index.md
+++ b/content/blog/2026-06-21-horizon-ui-topology-and-dependency/index.md
@@ -69,4 +69,4 @@ Figure 7: One service, every layer it reports through — the
cross-layer hierar
Every metric, threshold, and edge weight on these maps lives in the layer
template's `topology` block — which means you tune them the same config-driven
way you tune dashboards, the subject of a later post in this series. For the
field reference, see the
[layer-template](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/customization/layer-templates/)
topology docs.
-Next up: **the Deployment tab and BanyanDB self-observability** — where the
same map technique turns *inward* to show how one clustered service's own
instances are deployed and talk to each other.
+Next up: [**the Deployment tab and BanyanDB
self-observability**](/blog/2026-06-21-horizon-ui-deployment-and-banyandb/) —
where the same map technique turns *inward* to show how one clustered service's
own instances are deployed and talk to each other.
diff --git
a/content/blog/2026-06-21-skywalking-horizon-ui-introduction/index.md
b/content/blog/2026-06-21-skywalking-horizon-ui-introduction/index.md
index e129873819f..ed780bb9242 100644
--- a/content/blog/2026-06-21-skywalking-horizon-ui-introduction/index.md
+++ b/content/blog/2026-06-21-skywalking-horizon-ui-introduction/index.md
@@ -109,7 +109,7 @@ Fifteen posts follow this one, each a standalone tour of
one corner of Horizon
## Try it against your OAP today
-Horizon runs against the OAP you already have — and on today's **OAP 10.x**
nearly all of it works. Every dashboard, the topology, traces (native and
**Zipkin**), logs, alarms, and all five profilers render off OAP's query host
(`:12800`), and Horizon's access control, audit, and themes run in the BFF,
independent of the OAP version. What waits for **OAP 11.0** — the admin host
(`:17128`), releasing soon — is the *operate* layer: runtime-rule (DSL)
management, the Live Debugger, Metrics [...]
+Horizon runs against the OAP you already have — and on today's **OAP 10.x**
nearly all of it works. Every dashboard, the topology, traces (native and
**Zipkin**), logs, alarms, and all five profilers render off OAP's query host
(`:12800`), and Horizon's access control, audit, and themes run in the BFF,
independent of the OAP version. What waits for **OAP 11.0** — the admin host
(`:17128`) — is the *operate* layer: runtime-rule (DSL) management, the Live
Debugger, Metrics Inspect, the ala [...]
Point Horizon at your existing cluster and bring it up — no backend changes,
the same OAP your deployment already talks to:
@@ -142,9 +142,9 @@ For the full setup path — binary tarball, Kubernetes, LDAP,
TLS, and the produ
## Other notable points
-- **Drop-in against your existing OAP.** Horizon is a greenfield rewrite that
keeps every backend contract — the same GraphQL query protocol, admin REST
surface, MQE language, and `Layer` concept — so you point it at a running
cluster with no backend change. On today's **OAP 10.x** the whole observability
console works (dashboards, topology, traces including **Zipkin**, logs, alarms,
profiling) along with Horizon's BFF-side access control, audit, and themes;
only the *operate* tooling — [...]
+- **Drop-in against your existing OAP.** Horizon is a greenfield rewrite that
keeps every backend contract — the same GraphQL query protocol, admin REST
surface, MQE language, and `Layer` concept — so you point it at a running
cluster with no backend change. On today's **OAP 10.x** the whole observability
console works (dashboards, topology, traces including **Zipkin**, logs, alarms,
profiling) along with Horizon's BFF-side access control, audit, and themes;
only the *operate* tooling — [...]
- **Dark-first and dense.** A 12-column grid built for incident scanning —
more signal above the fold, less whitespace.
- **Built on a modern stack.** Vue 3 + TypeScript on Vite, Pinia, Apache
ECharts, D3, and Monaco on the front end; Fastify on Node.js for the BFF.
- **It's Apache-licensed and community-built.** Horizon UI lives at
[apache/skywalking-horizon-ui](https://github.com/apache/skywalking-horizon-ui).
Try it against your cluster, and tell us what's missing — issues and pull
requests are welcome.
-Next up in the series: the dashboards — and why a widget can decide, on the
server, that it shouldn't even run its query for the entity you're looking at.
+Next up in the series: [the
dashboards](/blog/2026-06-21-horizon-ui-dashboards-and-mqe/) — and why a widget
can decide, on the server, that it shouldn't even run its query for the entity
you're looking at.
diff --git a/content/blog/2026-06-22-horizon-ui-3d-infrastructure-map/index.md
b/content/blog/2026-06-22-horizon-ui-3d-infrastructure-map/index.md
index c671b1badc7..cef018397f4 100644
--- a/content/blog/2026-06-22-horizon-ui-3d-infrastructure-map/index.md
+++ b/content/blog/2026-06-22-horizon-ui-3d-infrastructure-map/index.md
@@ -86,4 +86,4 @@ Figure 4: The map is configuration, not code — tiers, colors,
and per-layer tr
The 3D map is the bird's-eye summary; the 2D per-layer pages stay the
authoritative service maps. Viewing it needs only read access (`infra-3d:read`,
held by the built-in viewer role and up); shaping it needs the same write
permission as the dashboards. For the field reference — tiers, the config
shape, the loading stages — see the [3D Infrastructure Map
docs](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/infra-3d-map/).
-Next up: **the Trace Explorer** — from the bird's-eye view of the whole
deployment back down to a single request, drawn three different ways.
+Next up: [**the Trace Explorer**](/blog/2026-06-22-horizon-ui-trace-explorer/)
— from the bird's-eye view of the whole deployment back down to a single
request, drawn three different ways.
diff --git a/content/blog/2026-06-22-horizon-ui-trace-explorer/index.md
b/content/blog/2026-06-22-horizon-ui-trace-explorer/index.md
index 9e2bd43f5d2..26d68f9ab9b 100644
--- a/content/blog/2026-06-22-horizon-ui-trace-explorer/index.md
+++ b/content/blog/2026-06-22-horizon-ui-trace-explorer/index.md
@@ -87,4 +87,4 @@ There's a second way into a trace that doesn't go through the
explorer at all. A
The Traces tab is one request in full detail; the dashboards and maps from the
earlier posts are where you notice something's wrong in the first place. For
the field reference — every condition, the native-vs-Zipkin split, the span
detail panel — see the [Traces
docs](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/traces/).
-Next up: **the Log Explorer** — the same triage instincts, applied to log
streams instead of spans.
+Next up: [**the Log Explorer**](/blog/2026-06-23-horizon-ui-log-explorer/) —
the same triage instincts, applied to log streams instead of spans.
diff --git
a/content/blog/2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md
b/content/blog/2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md
index 840a77ce3db..0bb58b388b3 100644
--- a/content/blog/2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md
+++ b/content/blog/2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md
@@ -64,4 +64,4 @@ That manual-by-design choice also draws a clean
**permission** line. Viewing the
For the field reference — the categories, the two provisioning paths, the
budgets and the matching-maps-to-builds guidance — see the [Browser Logs &
Source Maps
docs](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/browser-source-maps/).
-Next up: **Profiling** — five profilers (trace, async, eBPF, Go pprof,
network) rendered through one flame graph.
+Next up: [**Profiling**](/blog/2026-06-26-horizon-ui-profiling/) — five
profilers (trace, async, eBPF, Go pprof, network) rendered through one flame
graph.
diff --git a/content/blog/2026-06-23-horizon-ui-log-explorer/index.md
b/content/blog/2026-06-23-horizon-ui-log-explorer/index.md
index 80783bb1d14..c5c8be98845 100644
--- a/content/blog/2026-06-23-horizon-ui-log-explorer/index.md
+++ b/content/blog/2026-06-23-horizon-ui-log-explorer/index.md
@@ -62,4 +62,4 @@ Figure 3: A live tail of one pod's container — windowed,
interval-polled, rege
Both tabs — the stored queries, the tag and container autocomplete, and the
live tail — are gated by a single `logs:read` permission, so granting "can read
logs" is one switch. For the field reference — every condition, the histogram,
the Pod Logs windows and filters — see the [Logs
docs](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/logs/).
-Next up: **Browser & RUM monitoring** — the browser agent's own error stream,
and de-obfuscating a minified stack with source maps.
+Next up: [**Browser & RUM
monitoring**](/blog/2026-06-23-horizon-ui-browser-errors-and-source-maps/) —
the browser agent's own error stream, and de-obfuscating a minified stack with
source maps.
diff --git a/content/blog/2026-06-26-horizon-ui-profiling/index.md
b/content/blog/2026-06-26-horizon-ui-profiling/index.md
index 6c2ea29cd57..8e895183b07 100644
--- a/content/blog/2026-06-26-horizon-ui-profiling/index.md
+++ b/content/blog/2026-06-26-horizon-ui-profiling/index.md
@@ -59,4 +59,4 @@ Which tabs you even see depends on the service: a tab appears
only when OAP repo
For the field reference — every task field, the eBPF aggregate modes, the
network sampling rules — see the [Profiling
docs](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/profiling/).
-Next up: **Alarms & Incident Triage** — the incident-centric alarm surface,
and replaying the MQE snapshot that fired a rule.
+Next up: [**Alarms & Incident
Triage**](/blog/2026-06-29-horizon-ui-alarms-and-incident-triage/) — the
incident-centric alarm surface, and replaying the MQE snapshot that fired a
rule.
diff --git
a/content/blog/2026-06-29-horizon-ui-alarms-and-incident-triage/index.md
b/content/blog/2026-06-29-horizon-ui-alarms-and-incident-triage/index.md
index d852b13a5af..e88505189b8 100644
--- a/content/blog/2026-06-29-horizon-ui-alarms-and-incident-triage/index.md
+++ b/content/blog/2026-06-29-horizon-ui-alarms-and-incident-triage/index.md
@@ -68,4 +68,4 @@ Two deliberate non-features are worth calling out. Horizon
alarms are a **read-o
For the field reference — the window cap, the snapshot internals, and the
pinned-layer setup — see the [Alarms
docs](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/alarms/).
-Next up: **Runtime Rules & Live Debugging** — editing OAL / MAL / LAL against
live samples through OAP's admin host, the part of "operate" the open-source
backend only just made possible.
+Next up: [**Runtime Rules & Live
Debugging**](/blog/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/) —
editing OAL / MAL / LAL against live samples through OAP's admin host, the part
of "operate" the open-source backend only just made possible.
diff --git
a/content/blog/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
b/content/blog/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
index e46461ca9eb..5c597f74a97 100644
--- a/content/blog/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
+++ b/content/blog/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
@@ -48,4 +48,4 @@ All three live under **Operate** and share one permission,
`inspect:read`. They
For the field reference — the metric catalog, entity enumeration, foreign
metrics, and MQE execution — see the [Inspect
docs](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/inspect/).
-Next up: **Platform & Cluster Introspection** — Cluster Status, OAP
configuration, and data-retention, the last stop in Act 3 before we turn to
governing and securing the console.
+Next up: [**Platform & Cluster
Introspection**](/blog/2026-06-30-horizon-ui-platform-introspection/) — Cluster
Status, OAP configuration, and data-retention, the last stop in Act 3 before we
turn to governing and securing the console.
diff --git
a/content/blog/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
b/content/blog/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
index d5716587f32..9211c8598bd 100644
---
a/content/blog/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
+++
b/content/blog/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
@@ -63,4 +63,4 @@ Both surfaces are **operate** features: they talk to OAP's
**admin host**, not t
For the field reference — every apply state, the dump format, the per-tab
capture controls — see the [Runtime
Rules](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/runtime-rules/)
and [Live
Debugger](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/live-debugger/)
docs.
-Next up: **Inspect — Cross-Layer Query Power-Tools** — the Operate-side
surfaces for running metric, trace, and log queries straight across every layer.
+Next up: [**Inspect — Cross-Layer Query
Power-Tools**](/blog/2026-06-29-horizon-ui-inspect-cross-layer-query/) — the
Operate-side surfaces for running metric, trace, and log queries straight
across every layer.
diff --git
a/content/blog/2026-06-30-horizon-ui-access-control-and-security/index.md
b/content/blog/2026-06-30-horizon-ui-access-control-and-security/index.md
index 27462b77674..8a90d2f45f5 100644
--- a/content/blog/2026-06-30-horizon-ui-access-control-and-security/index.md
+++ b/content/blog/2026-06-30-horizon-ui-access-control-and-security/index.md
@@ -57,4 +57,4 @@ Figure 5: Five bundled themes — Horizon (default), Meridian,
Obsidian, Daybrea
All five surfaces here are Horizon's own BFF-side governance — they never
touch the OAP admin host, so they behave identically across OAP versions. (RBAC
can also be turned off entirely for local dev, in which case the Roles board
flags it in red.) For the field reference — the verb list, the LDAP group
mapping, the audit schema, and arming break-glass — see the
[RBAC](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/access-control/rbac/),
[LDAP backend](https://skywalking.a [...]
-Next up, **Act 5 — make it yours & adopt**, starting with **Customization:
Config-Driven Layer Templates** — how the whole console is shaped by templates
you can edit, preview, and publish.
+Next up, **Act 5 — make it yours & adopt**, starting with [**Customization:
Config-Driven Layer
Templates**](/blog/2026-06-30-horizon-ui-customization-and-templates/) — how
the whole console is shaped by templates you can edit, preview, and publish.
diff --git
a/content/blog/2026-06-30-horizon-ui-customization-and-templates/index.md
b/content/blog/2026-06-30-horizon-ui-customization-and-templates/index.md
index 55fb761736c..b96ebd2b2d7 100644
--- a/content/blog/2026-06-30-horizon-ui-customization-and-templates/index.md
+++ b/content/blog/2026-06-30-horizon-ui-customization-and-templates/index.md
@@ -46,4 +46,4 @@ Figure 4: Overview templates are the same model — a 12-column
canvas with mock
Editing and previewing are entirely **browser-local** — no OAP call happens
until you publish. Publishing writes the template to OAP's **ui-template
store** through the admin host, which arrives with OAP 11; the bundled JSON is
a seed and read-only fallback, and the OAP-published version always wins at
render time. Access is role-gated: publishing layer dashboards needs
`dashboard:write`, overviews need `overview:write`. For the field reference —
the template shapes, the widget types, an [...]
-Next up: **Localization** — how those same templates speak eight languages.
+Next up: [**Localization**](/blog/2026-06-30-horizon-ui-localization-i18n/) —
how those same templates speak eight languages.
diff --git
a/content/blog/2026-06-30-horizon-ui-getting-started-and-migration/index.md
b/content/blog/2026-06-30-horizon-ui-getting-started-and-migration/index.md
index 3842061bdfc..b1aef7e93ee 100644
--- a/content/blog/2026-06-30-horizon-ui-getting-started-and-migration/index.md
+++ b/content/blog/2026-06-30-horizon-ui-getting-started-and-migration/index.md
@@ -60,7 +60,7 @@ Horizon is built **natively against OAP 11.x**, and it
**partially supports OAP
| Inspect, DSL Management, Live Debugger, Alarm-rule editor | — | ✓ | admin
`:17128` |
| Cluster Status → Admin pane, template & translation publishing | — | ✓ |
admin `:17128` |
-Crucially, Horizon **never reads the OAP version number** — it detects each
capability by probing for the module and GraphQL fields it needs, hides the
sidebar entries it can't back, and falls admin pages back to read-only when the
admin port is dark. So if you only need triage (dashboards, alarms, traces,
logs), a 10.x backend is enough; anything in the operate half needs 11.x with
its admin modules (`admin-server`, `receiver-runtime-rule`, `dsl-debugging`,
`inspect`) enabled.
+Crucially, Horizon **never reads the OAP version number** — it detects each
capability by probing for the module and GraphQL fields it needs, hides the
sidebar entries it can't back, and falls back to read-only for admin pages when
the admin port is dark. So if you only need triage (dashboards, alarms, traces,
logs), a 10.x backend is enough; anything in the operate half needs 11.x with
its admin modules (`admin-server`, `receiver-runtime-rule`, `dsl-debugging`,
`inspect`) enabled.
## Swapping in for an existing UI
diff --git a/content/blog/2026-06-30-horizon-ui-localization-i18n/index.md
b/content/blog/2026-06-30-horizon-ui-localization-i18n/index.md
index 26830d6f7fc..42d6b83b253 100644
--- a/content/blog/2026-06-30-horizon-ui-localization-i18n/index.md
+++ b/content/blog/2026-06-30-horizon-ui-localization-i18n/index.md
@@ -39,4 +39,4 @@ Figure 3: The same General Service dashboard in Chinese —
sidebar, tabs, and w
Locale resolution happens **BFF-side**, so it works on any OAP. Publishing a
translation writes a sibling overlay to OAP's template store through the admin
host (OAP 11), gated on `overview:write`; the eight UI-chrome message catalogs
are bundled and switch synchronously with no network fetch. A CI gate
(`i18n:validate`) keeps every source template paired with an overlay per locale
so nothing drifts. For the field reference — the translatable-field rules and
the add-a-language recipe — s [...]
-Next, the series closes with **Getting Started & Migration** — installing
Horizon and swapping it in for an existing UI.
+Next, the series closes with [**Getting Started &
Migration**](/blog/2026-06-30-horizon-ui-getting-started-and-migration/) —
installing Horizon and swapping it in for an existing UI.
diff --git a/content/blog/2026-06-30-horizon-ui-platform-introspection/index.md
b/content/blog/2026-06-30-horizon-ui-platform-introspection/index.md
index d3706eabd17..999e696320f 100644
--- a/content/blog/2026-06-30-horizon-ui-platform-introspection/index.md
+++ b/content/blog/2026-06-30-horizon-ui-platform-introspection/index.md
@@ -47,4 +47,4 @@ All three live under **Platform monitoring**, each gated by
its own read permiss
For the field reference — every pane, the config-dump shape, and the BanyanDB
lifecycle details — see the [Cluster
Status](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/cluster-metadata/),
[OAP
Configuration](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/oap-configuration/),
and [Data
Retention](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/data-retention/)
docs.
-That closes **Act 3 — operate it**. Next up, **Act 4 — govern & secure it**,
starting with **Access Control & Security**: server-enforced RBAC, LDAP/AD, the
audit log, and break-glass.
+That closes **Act 3 — operate it**. Next up, **Act 4 — govern & secure it**,
starting with [**Access Control &
Security**](/blog/2026-06-30-horizon-ui-access-control-and-security/):
server-enforced RBAC, LDAP/AD, the audit log, and break-glass.
diff --git a/content/zh/2026-06-21-horizon-ui-dashboards-and-mqe/index.md
b/content/zh/2026-06-21-horizon-ui-dashboards-and-mqe/index.md
index 6bfc381463b..5507238d130 100644
--- a/content/zh/2026-06-21-horizon-ui-dashboards-and-mqe/index.md
+++ b/content/zh/2026-06-21-horizon-ui-dashboards-and-mqe/index.md
@@ -88,4 +88,4 @@ Layer 仪表盘是一个紧凑的 **12 列网格**:行高 120px,空隙会自
上面讲的是 *查看* 体验。每个组件的 MQE、`visibleWhen` 条件、格式,以及各作用域的网格,都可以从 **Layer
dashboards** 管理界面编辑。但这个创作流程(draft → preview → publish,以及可内联/展开的 MQE
编辑器)会在后续文章里单独展开。字段级参考可以看文档里的 [dashboard
widgets](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/components/dashboard-widgets/)
和
[charts](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/components/charts/)。
-下一篇讲拓扑与服务依赖:同一批观测数据,如何从图表变成服务关系图,并继续下钻到实例和 endpoint。
+下一篇讲[拓扑与服务依赖](/zh/2026-06-21-horizon-ui-topology-and-dependency/):同一批观测数据,如何从图表变成服务关系图,并继续下钻到实例和
endpoint。
diff --git a/content/zh/2026-06-21-horizon-ui-deployment-and-banyandb/index.md
b/content/zh/2026-06-21-horizon-ui-deployment-and-banyandb/index.md
index 52dd8c81a9c..cebf05426e4 100644
--- a/content/zh/2026-06-21-horizon-ui-deployment-and-banyandb/index.md
+++ b/content/zh/2026-06-21-horizon-ui-deployment-and-banyandb/index.md
@@ -82,4 +82,6 @@ Deployment 标签页中,容器之间的调用边会从 SWIP-15 instance-relati
上面这些不是一张手工写死的 "BanyanDB 页面"。聚类规则、每个 role 的节点指标、role-pair 边指标,都在 Layer template
中作为一个自包含块存在,可以从 **Layer dashboards admin → Deployment** 作用域编辑,并随模板
export/import 一起携带。它和其他 Layer 背后的配置驱动模型一样,后续文章会完整展开。
-下一篇看 3D Infrastructure Map:把所有 Layer 的服务放进一张 WebGL 地图,从全局看部署状态。
+BanyanDB Layer 自身的字段——Cluster、Container、Group 和 Deployment 视图——可以参考 [BanyanDB
dashboards](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/dashboards/banyandb/)
文档。
+
+下一篇看 [3D Infrastructure
Map](/zh/2026-06-22-horizon-ui-3d-infrastructure-map/):把所有 Layer 的服务放进一张 WebGL
地图,从全局看部署状态。
diff --git a/content/zh/2026-06-21-horizon-ui-topology-and-dependency/index.md
b/content/zh/2026-06-21-horizon-ui-topology-and-dependency/index.md
index a3760fcfc76..98e496441ac 100644
--- a/content/zh/2026-06-21-horizon-ui-topology-and-dependency/index.md
+++ b/content/zh/2026-06-21-horizon-ui-topology-and-dependency/index.md
@@ -71,4 +71,4 @@ SkyWalking 拓扑背后的调用数据只有一份,但 Horizon 不只画一种
这些地图上的每个指标、阈值和边权重,都位于 Layer template 的 `topology`
块里。换句话说,你会用和仪表盘一样的配置驱动方式调整它们,这也是后续文章的主题。字段参考可以看
[layer-template](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/customization/layer-templates/)
里的 topology 文档。
-下一篇转向服务内部:Deployment 标签页如何展示集群服务的实例关系,以及 BanyanDB 如何接入 SkyWalking 自观测。
+下一篇转向服务内部:[Deployment
标签页](/zh/2026-06-21-horizon-ui-deployment-and-banyandb/)如何展示集群服务的实例关系,以及
BanyanDB 如何接入 SkyWalking 自观测。
diff --git a/content/zh/2026-06-21-skywalking-horizon-ui-introduction/index.md
b/content/zh/2026-06-21-skywalking-horizon-ui-introduction/index.md
index 4a9d0ec0a3f..49b9447d7b3 100644
--- a/content/zh/2026-06-21-skywalking-horizon-ui-introduction/index.md
+++ b/content/zh/2026-06-21-skywalking-horizon-ui-introduction/index.md
@@ -111,7 +111,7 @@ OAP 短暂不可达时,Horizon 也遵循同样思路。如果后端短时间
## 连接现有 OAP 即可试用
-Horizon 可以运行在你已有的 OAP 之上。在今天的 **OAP 10.x** 上,绝大多数功能已经可用:所有仪表盘、拓扑、Trace(原生和
**Zipkin**)、日志、告警,以及五类性能剖析,都通过 OAP 的 query host(`:12800`)渲染。Horizon
的访问控制、审计和主题运行在 BFF 里,不依赖 OAP 版本。需要等待 **OAP 11.0** 的是 *operate*
层:runtime-rule(DSL)管理、Live Debugger、Metrics Inspect、告警规则编辑器、Cluster Status
管理面板,以及把模板编辑发布回 OAP。这些依赖 admin host(`:17128`),即将随 OAP 11.0 发布。Horizon 会按 admin
module 是否存在来探测能力,10.x 不能提供的页面会直接隐藏;完整观测控制台今天就能跑在 10.x 上,迁移到 11.0 后运维工具会自动亮起来。
+Horizon 可以运行在你已有的 OAP 之上。在今天的 **OAP 10.x** 上,绝大多数功能已经可用:所有仪表盘、拓扑、Trace(原生和
**Zipkin**)、日志、告警,以及五类性能剖析,都通过 OAP 的 query host(`:12800`)渲染。Horizon
的访问控制、审计和主题运行在 BFF 里,不依赖 OAP 版本。需要等待 **OAP 11.0** 的是 *operate*
层:runtime-rule(DSL)管理、Live Debugger、Metrics Inspect、告警规则编辑器、Cluster Status
管理面板,以及把模板编辑发布回 OAP。这些依赖 admin host(`:17128`),由 OAP 11.0 提供。Horizon 会按 admin
module 是否存在来探测能力,10.x 不能提供的页面会直接隐藏;完整观测控制台今天就能跑在 10.x 上,迁移到 11.0 后运维工具会自动亮起来。
把 Horizon 指向已有集群即可启动,不需要改后端。仍然是你的部署已经在使用的那个 OAP:
@@ -144,9 +144,9 @@ auth:
## 其他要点
-- **可以直接接入现有 OAP。** Horizon 是一次从零开始的重写,但保留了所有后端契约:同样的 GraphQL 查询协议、admin REST
接口、MQE 语言和 `Layer` 概念。所以你可以把它指向一个正在运行的集群,不改后端。今天的 **OAP 10.x**
已经能运行完整观测控制台(仪表盘、拓扑、包括 **Zipkin** 在内的 Trace、日志、告警、性能剖析),以及 Horizon BFF
侧的访问控制、审计和主题。只有 *operate* 工具链需要等待 OAP 的 **admin host**(`:17128`),也就是随 **OAP
11.0,即将发布** 的 runtime rules、Live Debugger、Inspect、Cluster Status admin pane
和模板编辑发布。
+- **可以直接接入现有 OAP。** Horizon 是一次从零开始的重写,但保留了所有后端契约:同样的 GraphQL 查询协议、admin REST
接口、MQE 语言和 `Layer` 概念。所以你可以把它指向一个正在运行的集群,不改后端。今天的 **OAP 10.x**
已经能运行完整观测控制台(仪表盘、拓扑、包括 **Zipkin** 在内的 Trace、日志、告警、性能剖析),以及 Horizon BFF
侧的访问控制、审计和主题。只有 *operate* 工具链需要等待 OAP 的 **admin host**(`:17128`),也就是随 **OAP
11.0** 提供的 runtime rules、Live Debugger、Inspect、Cluster Status admin pane
和模板编辑发布。
- **暗色优先,高密度。** 12 列网格面向 incident 扫描设计,首屏承载更多信号,减少不必要留白。
- **基于现代技术栈。** 前端是 Vue 3 + TypeScript on Vite、Pinia、Apache ECharts、D3 和
Monaco;BFF 使用 Node.js 上的 Fastify。
- **Apache 许可证,社区共建。** Horizon UI 位于
[apache/skywalking-horizon-ui](https://github.com/apache/skywalking-horizon-ui)。欢迎接到你的集群上试用,也欢迎告诉我们缺什么,issue
和 pull request 都可以。
-下一篇讲仪表盘:MQE 如何驱动组件,BFF 又如何在服务端判断哪些组件该显示、哪些查询可以直接省掉。
+下一篇讲[仪表盘](/zh/2026-06-21-horizon-ui-dashboards-and-mqe/):MQE 如何驱动组件,BFF
又如何在服务端判断哪些组件该显示、哪些查询可以直接省掉。
diff --git a/content/zh/2026-06-22-horizon-ui-3d-infrastructure-map/index.md
b/content/zh/2026-06-22-horizon-ui-3d-infrastructure-map/index.md
index 5e5544b35dd..3bd6f1a94b3 100644
--- a/content/zh/2026-06-22-horizon-ui-3d-infrastructure-map/index.md
+++ b/content/zh/2026-06-22-horizon-ui-3d-infrastructure-map/index.md
@@ -88,4 +88,4 @@ Horizon 自带一份默认配置,所以地图开箱就有用。你的修改会
3D 地图是全局入口;2D 的按 Layer 页面仍然是最完整的服务地图。查看它只需要读权限(`infra-3d:read`,内置 viewer
角色及以上持有);调整它需要和仪表盘相同的写权限。字段参考,包括 tier、配置结构和加载阶段,可以看 [3D Infrastructure Map
文档](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/infra-3d-map/)。
-下一篇回到单个请求:Trace Explorer 会用分布图、瀑布图和调用树帮你定位慢调用。
+下一篇回到单个请求:[Trace Explorer](/zh/2026-06-22-horizon-ui-trace-explorer/)
会用分布图、瀑布图和调用树帮你定位慢调用。
diff --git a/content/zh/2026-06-22-horizon-ui-trace-explorer/index.md
b/content/zh/2026-06-22-horizon-ui-trace-explorer/index.md
index b590867d45e..7bb1cbfe79b 100644
--- a/content/zh/2026-06-22-horizon-ui-trace-explorer/index.md
+++ b/content/zh/2026-06-22-horizon-ui-trace-explorer/index.md
@@ -89,4 +89,4 @@ Zipkin 标签页通过 **OAP 的 Zipkin query API** 查询上游 Zipkin store。
Traces 标签页把一个请求完整展开;前面几篇的仪表盘和地图,是你最初发现异常的地方。字段参考,包括每个条件、native-vs-Zipkin 拆分和
span 详情面板,可以看 [Traces
文档](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/traces/)。
-下一篇看日志探索器:从 Trace 切到相关日志流,沿着同一条排查路径继续定位问题。
+下一篇看[日志探索器](/zh/2026-06-23-horizon-ui-log-explorer/):从 Trace
切到相关日志流,沿着同一条排查路径继续定位问题。
diff --git
a/content/zh/2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md
b/content/zh/2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md
index c2ad8d0ee6b..235827173b3 100644
--- a/content/zh/2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md
+++ b/content/zh/2026-06-23-horizon-ui-browser-errors-and-source-maps/index.md
@@ -66,4 +66,4 @@ Horizon 刻意 **不猜测**。浏览器端 agent 会上报 app **version**,
字段参考,包括 categories、两种提供路径、预算,以及如何按构建版本匹配 map,可以看 [Browser Logs & Source Maps
文档](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/browser-source-maps/)。
-下一篇进入 Profiling:五种 profiler(trace、async、eBPF、Go
pprof、network)如何共用一套火焰图视图,以及为什么 network profiling 是例外。
+下一篇进入 [Profiling](/zh/2026-06-26-horizon-ui-profiling/):五种
profiler(trace、async、eBPF、Go pprof、network)如何共用一套火焰图视图,以及为什么 network profiling
是例外。
diff --git a/content/zh/2026-06-23-horizon-ui-log-explorer/index.md
b/content/zh/2026-06-23-horizon-ui-log-explorer/index.md
index e615ebcf728..576749dfb66 100644
--- a/content/zh/2026-06-23-horizon-ui-log-explorer/index.md
+++ b/content/zh/2026-06-23-horizon-ui-log-explorer/index.md
@@ -64,4 +64,4 @@ tags:
两个标签页,包括存储查询、tag/container 自动补全和 live tail,都由同一个 `logs:read`
权限控制。所以授予“可以读日志”就是一个开关。字段参考,包括每个条件、histogram、Pod Logs 的窗口和过滤器,可以看 [Logs
文档](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/logs/)。
-下一篇看 Browser/RUM:浏览器端错误如何上报,又如何用 source map 把压缩后的 stack 还原到源码位置。
+下一篇看
[Browser/RUM](/zh/2026-06-23-horizon-ui-browser-errors-and-source-maps/):浏览器端错误如何上报,又如何用
source map 把压缩后的 stack 还原到源码位置。
diff --git
a/content/zh/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
b/content/zh/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
index 5c1a1096b6b..64535aa9ae6 100644
--- a/content/zh/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
+++ b/content/zh/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
@@ -50,4 +50,4 @@ SkyWalking 会计算大量指标,但过去没有一个地方能把它们完整
字段参考,包括指标目录、实体枚举、foreign metrics 和 MQE 执行,可以看 [Inspect
文档](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/inspect/)。
-下一篇是 **Platform & Cluster Introspection**:Cluster Status、OAP configuration 和
data-retention。它是第三幕的最后一站,之后这个系列会转向控制台的治理和安全。
+下一篇是 [**Platform & Cluster
Introspection**](/zh/2026-06-30-horizon-ui-platform-introspection/):Cluster
Status、OAP configuration 和 data-retention。它是第三幕的最后一站,之后这个系列会转向控制台的治理和安全。
diff --git
a/content/zh/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
b/content/zh/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
index 6fd3a2f493b..61625026bb8 100644
--- a/content/zh/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
+++ b/content/zh/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
@@ -28,7 +28,7 @@ OAP 里的大多数分析都经过一组小型 DSL:**OAL** 把 trace 转成 se

图 2:用 Monaco YAML 编辑规则:语法高亮、对比线上版本和 bundled 版本,并可通过代码左侧的绿色 ▶ 直接进入 Live
Debugger。</br>
-保存时,Horizon 会区分修改的风险。只改规则主体或 filter,可以立即生效。但如果是**结构性变更**,比如改了指标的
scope、downsampling 或存储形态,就会影响集群存储结构。Horizon 会按带集群确认的流程执行,并在界面上展示进度:**Compiled →
Confirming across the cluster → Committing → Done**;只有变更在集群里确认持久化后才算成功。
+保存时,Horizon 会区分修改的风险。只改规则主体或 filter,可以立即生效。但如果是**结构性变更**,比如改了指标的
scope、downsampling 或存储形态,就会影响集群存储结构。Horizon 会按集群确认流程执行,并在界面上展示进度:**Compiled →
Confirming across the cluster → Committing → Done**;只有变更在集群里确认持久化后才算成功。
如果某个节点没有及时通过确认,应用结果会变成 **DEGRADED**。界面会列出落后的节点,这些节点会在下次扫描时自行追上,而不是让整次应用直接失败。如果
commit 前出错,变更会 **rolled back**,原因显示在界面里,你的编辑内容仍保留在 buffer 中。编译错误则会作为 inline
diagnostic 展示。对于卡住的发布,可以点一次 **Force
re-apply**,用完全相同的内容重新跑一遍应用流程,让落后的节点恢复同步;这会短暂暂停那条规则的采集。把规则恢复到 bundled
默认版本也走同一套确认流程;此外也可以 inactivate、delete,或者把整个目录导出成 tarball。
diff --git
a/content/zh/2026-06-30-horizon-ui-access-control-and-security/index.md
b/content/zh/2026-06-30-horizon-ui-access-control-and-security/index.md
index b4fc74e60bb..65c5d782820 100644
--- a/content/zh/2026-06-30-horizon-ui-access-control-and-security/index.md
+++ b/content/zh/2026-06-30-horizon-ui-access-control-and-security/index.md
@@ -59,4 +59,4 @@ tags:
这篇里的五个入口都属于 Horizon 自己的 BFF 侧治理,不访问 OAP admin host,因此在不同 OAP
版本上行为一致。(本地开发时也可以完全关闭 RBAC;这时 Roles board 会用红色标出来。)字段参考,包括 verb 列表、LDAP group
mapping、audit schema 和 break-glass 启用方式,可以看
[RBAC](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/access-control/rbac/)、[LDAP
backend](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/access-control/ldap-backend/)、[Audit
log](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/access-control/audit-log/)
和 [Break-g [...]
-下一篇进入 **Act 5 — make it yours & adopt**,从 **Customization: Config-Driven Layer
Templates** 开始:整个控制台如何由可编辑、可预览、可发布的模板塑造。
+下一篇进入 **Act 5 — make it yours & adopt**,从
[用模板定制控制台](/zh/2026-06-30-horizon-ui-customization-and-templates/)
开始:整个控制台如何由可编辑、可预览、可发布的模板塑造。
diff --git a/content/zh/2026-06-30-horizon-ui-localization-i18n/index.md
b/content/zh/2026-06-30-horizon-ui-localization-i18n/index.md
index 5305dad9f8e..d510a18a3a7 100644
--- a/content/zh/2026-06-30-horizon-ui-localization-i18n/index.md
+++ b/content/zh/2026-06-30-horizon-ui-localization-i18n/index.md
@@ -10,7 +10,7 @@ tags:
*译自英文原文:[Meet Horizon UI · 16/17: Localization in Eight
Languages](/blog/2026-06-30-horizon-ui-localization-i18n/)。*
-这是 [Meet Horizon UI](/zh/2026-06-21-skywalking-horizon-ui-introduction/)
系列的第十六篇,仍然属于第五幕 **make it yours & adopt**。上一篇讲到,整个控制台都由 template
驱动。本地化也建立在这个基础上:Horizon 支持**八种语言**,每种翻译都是覆盖在同一套 template 上的一层 **overlay**。它不是
fork 出一份 dashboard,也不是每次渲染图表时重新翻译。
+这是 [Meet Horizon UI](/zh/2026-06-21-skywalking-horizon-ui-introduction/)
系列的第十六篇,仍然属于第五幕 **make it yours &
adopt**。[上一篇](/zh/2026-06-30-horizon-ui-customization-and-templates/)讲到,整个控制台都由
template 驱动。本地化也建立在这个基础上:Horizon 支持**八种语言**,每种翻译都是覆盖在同一套 template 上的一层
**overlay**。它不是 fork 出一份 dashboard,也不是每次渲染图表时重新翻译。
## 翻译是 overlay,在服务端合并一次
diff --git a/content/zh/2026-06-30-horizon-ui-platform-introspection/index.md
b/content/zh/2026-06-30-horizon-ui-platform-introspection/index.md
index 64cef4ee7c0..4d31f80b7aa 100644
--- a/content/zh/2026-06-30-horizon-ui-platform-introspection/index.md
+++ b/content/zh/2026-06-30-horizon-ui-platform-introspection/index.md
@@ -49,4 +49,4 @@ Horizon 和 OAP 通信不只走一个通道,**Cluster Status** 会把每个通
字段参考,包括每个面板、config dump 结构和 BanyanDB 生命周期细节,可以看 [Cluster
Status](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/cluster-metadata/)、[OAP
Configuration](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/oap-configuration/)
和 [Data
Retention](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/data-retention/)
文档。
-到这里,**Act 3 — operate it** 结束。下一篇进入 **Act 4 — govern & secure it**,从 **Access
Control & Security** 开始:服务端强制执行的 RBAC、LDAP/AD、audit log,以及 break-glass。
+到这里,**Act 3 — operate it**
结束。下一篇:[访问控制与安全](/zh/2026-06-30-horizon-ui-access-control-and-security/),进入
**Act 4 — govern & secure it**:服务端强制执行的 RBAC、LDAP/AD、audit log,以及 break-glass。