You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2026/06/29 09:59:49 UTC

(skywalking-website) branch master updated: Blog: Meet Horizon UI 11/17 — Runtime Rules & Live Debugging (#877)

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 5e233ea5062 Blog: Meet Horizon UI 11/17 — Runtime Rules & Live Debugging (#877)
5e233ea5062 is described below

commit 5e233ea506209c85ee7602146177bbfbd8e5d0cc
Author: 吴晟 Wu Sheng <wu...@foxmail.com>
AuthorDate: Mon Jun 29 17:59:44 2026 +0800

    Blog: Meet Horizon UI 11/17 — Runtime Rules & Live Debugging (#877)
---
 .../index.md                                       |  63 +++++++++++++++++++++
 .../horizon-0.7.0/p11-runtime-01-rule-catalog.webp | Bin 0 -> 144964 bytes
 .../horizon-0.7.0/p11-runtime-02-rule-editor.webp  | Bin 0 -> 249010 bytes
 .../p11-runtime-03-livedebug-session.webp          | Bin 0 -> 136242 bytes
 .../horizon-0.7.0/p11-runtime-04-oal-trace.webp    | Bin 0 -> 92284 bytes
 .../horizon-0.7.0/p11-runtime-05-mal-diff.webp     | Bin 0 -> 152224 bytes
 .../horizon-0.7.0/p11-runtime-06-lal-matrix.webp   | Bin 0 -> 88814 bytes
 7 files changed, 63 insertions(+)

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
new file mode 100644
index 00000000000..5df91ef8ffe
--- /dev/null
+++ b/content/blog/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/index.md
@@ -0,0 +1,63 @@
+---
+title: "Meet Horizon UI · 11/17: Runtime Rules & Live Debugging"
+date: 2026-06-29
+author: Sheng Wu
+description: "Part 11 of the Meet Horizon UI series: edit SkyWalking's OAL/MAL/LAL analysis rules in the browser and hot-apply them to the running cluster with a fenced, recoverable rollout — then step those same rules against live data in the three-tab Live Debugger to see exactly what they compute."
+tags:
+  - Engineering
+  - Metrics
+---
+
+This is the eleventh post in the [Meet Horizon UI](/blog/2026-06-21-skywalking-horizon-ui-introduction/) series, and it stays in **Act 3 — operate it**. The [previous post](/blog/2026-06-29-horizon-ui-alarms-and-incident-triage/) was about reading what the backend already decided; this one is about changing *how* it decides — and then proving the change does what you meant.
+
+Almost everything OAP computes runs through a small family of DSLs: **OAL** turns traces into service and endpoint metrics, **MAL** turns meters (OpenTelemetry, Telegraf) into metrics, **LAL** turns logs into tags and metrics. Traditionally you edit those as YAML on the server and restart. Horizon brings both halves into the console — **edit and hot-apply the rules**, and **debug them against live data** — two capabilities new to the SkyWalking UI that ride OAP's admin host.
+
+## Your rules, live in the console
+
+**Operate → DSL management** lists every analysis rule the cluster is running, grouped by source. Four catalogs are editable — **MAL · OTel**, **MAL · Telegraf**, **LAL**, and **LAL → MAL** (log-to-metric) — plus a read-only **OAL** browser. Rules group by prefix (ActiveMQ, BanyanDB, Elasticsearch, Flink…), each tagged by status, and you can filter by **active / inactive / bundled / modified** to see at a glance what an operator has changed versus what shipped.
+
+![Figure 1: The DSL management catalog — analysis rules grouped by source, each with a status chip, and status-filter facets across the top.](/screenshots/horizon-0.7.0/p11-runtime-01-rule-catalog.webp)
+Figure 1: DSL management — every OAL/MAL/LAL rule the cluster runs, grouped by source and filterable by status (active / inactive / bundled / modified). Here, the OpenTelemetry MAL catalog: 37 bundled rules.</br>
+
+## Edit, and hot-apply safely
+
+Open a rule and it's a Monaco YAML editor with syntax highlighting and two diff modes — **vs. server** (what's live) and **vs. bundled** (what shipped) — so you always see what you're about to change. The green ▶ in the gutter beside each `- name:` jumps that rule straight into the Live Debugger.
+
+![Figure 2: A MAL rule open in the Monaco YAML editor, with edit / diff-vs-server / diff-vs-bundled tabs and green play glyphs in the gutter.](/screenshots/horizon-0.7.0/p11-runtime-02-rule-editor.webp)
+Figure 2: Edit a rule as Monaco YAML — syntax-highlighted, with diffs against the live (server) and bundled versions, and a green ▶ in the gutter that jumps the rule into the Live Debugger.</br>
+
+Saving is where the care shows. A body- or filter-only edit applies instantly. But a **structural** change — one that moves a metric's scope, downsampling, or storage shape — reshapes the cluster's storage, so Horizon runs it as a fenced rollout and tracks it on screen: **Compiled → Confirming across the cluster → Committing → Done**, reporting success only once the change is durable. If a node lags the fence, the apply ends **DEGRADED** — it names the laggard nodes (they self-converge o [...]
+
+## The Live Debugger: see what a rule actually does
+
+Editing a rule is the easy part. The hard part — the part that used to mean reading code and squinting at output — is knowing what a rule *computes* against your real data. **Operate → Live debugger** answers that directly: pick a rule, click **start sampling**, and Horizon installs a bounded capture on **every reachable OAP node**, grabs a handful of real records, and shows each one stepped through the rule.
+
+![Figure 3: The Live Debugger MAL tab capturing — rule and metric pickers, record-cap and retention controls, and a node-coverage strip reading installed 2 of 2.](/screenshots/horizon-0.7.0/p11-runtime-03-livedebug-session.webp)
+Figure 3: Start a capture and it installs on every reachable OAP node (here 2/2), grabs real records, and bounds itself with a record cap and a retention window — the same shell serves all three analysis languages.</br>
+
+It has one tab per analysis language, because each works on a different kind of data.
+
+**OAL → traces.** A captured source row — a real trace segment — flows clause by clause: `from(Service.*)` reads the segment (you see its latency, status, endpoint), `build_metrics` shapes it, `cpm()` aggregates it. You watch a trace become a metric.
+
+![Figure 4: The OAL tab showing a trace segment stepped through input, function, and aggregation stages with its full payload.](/screenshots/horizon-0.7.0/p11-runtime-04-oal-trace.webp)
+Figure 4: OAL → traces — a real segment from `agent::gateway` (latency 38, status 200, `/rcmd`) stepped clause by clause, `from(Service.*)` → `build_metrics` → `cpm()`, into the service-CPM metric it feeds.</br>
+
+**MAL → metrics.** A meter sample flows input → filter → function → output. Because one metric fans out into many label-sets, the samples are grouped by metric, and a **diff** dims the labels every sample shares and highlights only the ones that differ.
+
+![Figure 5: A MAL sample group expanded into a diff view, with a dimmed COMMON block of shared labels and only two labels highlighted per sample.](/screenshots/horizon-0.7.0/p11-runtime-05-mal-diff.webp)
+Figure 5: MAL → metrics — samples grouped by metric, with a diff that dims the 16 labels every sample shares and lights only the two that differ (`group`, `pod_name`), so four near-identical series read apart at a glance.</br>
+
+**LAL → logs.** Each captured log record becomes a column and each DSL block (or statement) a row, so the whole capture reads as a matrix: you can see which records the `filter` **aborted** and what the `extractor` pulled out of the ones that passed.
+
+![Figure 6: The LAL tab showing the captured rule on the left and a matrix of records by block on the right, with aborted cells where the filter dropped records.](/screenshots/horizon-0.7.0/p11-runtime-06-lal-matrix.webp)
+Figure 6: LAL → logs — every captured record a column, every DSL block a row. This filter aborts the normal logs (only abnormal ones pass) before the extractor pulls out `status.code` and `response.flag`.</br>
+
+## Where it runs
+
+Both surfaces are **operate** features: they talk to OAP's **admin host**, not the query port — DSL management through the `receiver-runtime-rule` module, the Live Debugger through `dsl-debugging`. That admin host ships with OAP 11, so on today's backend these two pages surface a clear "needs the admin host / module" banner and stay read-only, while every observe surface — dashboards, traces, logs, alarms, profiling — keeps working untouched. Access is role-gated: browsing rules and view [...]
+
+## Where to go next
+
+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.
diff --git a/static/screenshots/horizon-0.7.0/p11-runtime-01-rule-catalog.webp b/static/screenshots/horizon-0.7.0/p11-runtime-01-rule-catalog.webp
new file mode 100644
index 00000000000..989fa73e700
Binary files /dev/null and b/static/screenshots/horizon-0.7.0/p11-runtime-01-rule-catalog.webp differ
diff --git a/static/screenshots/horizon-0.7.0/p11-runtime-02-rule-editor.webp b/static/screenshots/horizon-0.7.0/p11-runtime-02-rule-editor.webp
new file mode 100644
index 00000000000..757aebc13df
Binary files /dev/null and b/static/screenshots/horizon-0.7.0/p11-runtime-02-rule-editor.webp differ
diff --git a/static/screenshots/horizon-0.7.0/p11-runtime-03-livedebug-session.webp b/static/screenshots/horizon-0.7.0/p11-runtime-03-livedebug-session.webp
new file mode 100644
index 00000000000..8fbb4dc0de1
Binary files /dev/null and b/static/screenshots/horizon-0.7.0/p11-runtime-03-livedebug-session.webp differ
diff --git a/static/screenshots/horizon-0.7.0/p11-runtime-04-oal-trace.webp b/static/screenshots/horizon-0.7.0/p11-runtime-04-oal-trace.webp
new file mode 100644
index 00000000000..c65563ea3c8
Binary files /dev/null and b/static/screenshots/horizon-0.7.0/p11-runtime-04-oal-trace.webp differ
diff --git a/static/screenshots/horizon-0.7.0/p11-runtime-05-mal-diff.webp b/static/screenshots/horizon-0.7.0/p11-runtime-05-mal-diff.webp
new file mode 100644
index 00000000000..a1cf4e7391a
Binary files /dev/null and b/static/screenshots/horizon-0.7.0/p11-runtime-05-mal-diff.webp differ
diff --git a/static/screenshots/horizon-0.7.0/p11-runtime-06-lal-matrix.webp b/static/screenshots/horizon-0.7.0/p11-runtime-06-lal-matrix.webp
new file mode 100644
index 00000000000..36e557e1142
Binary files /dev/null and b/static/screenshots/horizon-0.7.0/p11-runtime-06-lal-matrix.webp differ