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 d2dbf621aa9 Blog: Meet Horizon UI 12/17 — Inspect: Cross-Layer Query
Power-Tools (#879)
d2dbf621aa9 is described below
commit d2dbf621aa90d7594c7159b3c357a6a460624f21
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Mon Jun 29 20:56:25 2026 +0800
Blog: Meet Horizon UI 12/17 — Inspect: Cross-Layer Query Power-Tools (#879)
* Blog: Meet Horizon UI 12/17 — Inspect: Cross-Layer Query Power-Tools
Part 12 of the Meet Horizon UI series, continuing Act 3 (operate). The
Inspect family under Operate: Metrics inspect (a catalog of every metric
OAP computes, grouped by the OAL/MAL rule that defines it, plus an MQE
board), and the layer-less Trace inspect and Log inspect that query
across the whole deployment without picking a layer first (Log inspect
folds raw service logs, browser errors, and K8s pod logs into one tool).
All share inspect:read; Metrics inspect needs OAP 11's admin host + inspect
module, while Trace/Log inspect ride the always-on query protocol (10.x ok).
4 figures (WebP): metrics catalog, metrics board, trace inspect, log
sources.
* docs(blog): add Chinese Horizon UI inspect translation
* Fix mobile nav drawer always highlighting Blog
The mobile slide-out drawer (sidebar-skywalking.html) hardcoded the Blog
link with router-link-active, so on phone-width browsers (e.g. iOS Safari)
Blog showed selected on every page. Compute the active class per page
section instead, matching the desktop top navbar.
---
.../index.md | 51 ++++++++++++++++++++
.../index.md | 53 +++++++++++++++++++++
.../index.md | 2 +-
.../p12-inspect-01-metrics-catalog.webp | Bin 0 -> 183224 bytes
.../p12-inspect-02-metrics-board.webp | Bin 0 -> 108606 bytes
.../horizon-0.7.0/p12-inspect-03-trace.webp | Bin 0 -> 145164 bytes
.../horizon-0.7.0/p12-inspect-04-log-sources.webp | Bin 0 -> 194016 bytes
.../docsy/layouts/partials/sidebar-skywalking.html | 14 +++---
8 files changed, 112 insertions(+), 8 deletions(-)
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
new file mode 100644
index 00000000000..e46461ca9eb
--- /dev/null
+++ b/content/blog/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
@@ -0,0 +1,51 @@
+---
+title: "Meet Horizon UI · 12/17: Inspect — Cross-Layer Query Power-Tools"
+date: 2026-06-29
+author: Sheng Wu
+description: "Part 12 of the Meet Horizon UI series: the Inspect family under
Operate — a metric catalog and MQE board that shows which rule defines every
metric, plus layer-less trace and log finders that query across the whole
deployment without picking a layer first."
+tags:
+ - Engineering
+ - Metrics
+---
+
+This is the twelfth post in the [Meet Horizon
UI](/blog/2026-06-21-skywalking-horizon-ui-introduction/) series, still in
**Act 3 — operate it**. The [Trace
Explorer](/blog/2026-06-22-horizon-ui-trace-explorer/) and [Log
Explorer](/blog/2026-06-23-horizon-ui-log-explorer/) both start the same way:
you pick a layer, then a service, *then* you search. That's the right shape
when you're already looking at a service. But sometimes you aren't — you have a
trace id and no idea which layer owns [...]
+
+## Metrics inspect: the metric catalog, and the rule behind every number
+
+SkyWalking computes a *lot* of metrics, and until now there was no way to
simply *see them all*. **Metrics inspect** is that view. Its catalog drawer
lists every metric the connected OAP computes — and groups them by the **rule
that defines them**: the OAL files and MAL rule sets you met in the [previous
post](/blog/2026-06-29-horizon-ui-runtime-rules-and-live-debugging/). Filter by
source (OAL, MAL·OTel, MAL·Telegraf, LAL→MAL), search by name, and read each
metric's value type and scope [...]
+
+
+Figure 1: Metrics inspect's catalog — every metric the OAP computes, grouped
by the rule that defines it (the OAL files and MAL rule sets from DSL
management), filterable by source and scope. Pick metrics onto the board.</br>
+
+Pick metrics from the catalog and they land on a **board** of charts, where
you choose the entities to plot — a paginated top-N from OAP, or hand-entered
ones — and read the values back as a line, bar, or area chart. Each widget
carries its rule source and scope so you never lose the thread from "this
number" to "the rule that produces it." It's an MQE scratchpad: the time range
is browser-local but sent to OAP in server time, the board persists in your
browser, and metrics that live onl [...]
+
+
+Figure 2: The board — chart any metric across entities; each widget keeps its
rule source (OAL) and scope (Service), a per-widget entity paginator, and a
browser-local range sent to OAP in server time.</br>
+
+## Trace inspect: find a trace without picking a layer
+
+**Trace inspect** is the [Trace
Explorer](/blog/2026-06-22-horizon-ui-trace-explorer/) with the layer taken
off. The **Target** is optional: pick a service through the layer → service →
instance → endpoint cascade, *type* a name (with a real / conjectured flag), or
**leave it blank to query every service at once**. Set the usual conditions —
trace id, status, order, duration bounds, tags, window — and **Run query**. A
resolved-query line spells out the exact call sent to OAP, and the res [...]
+
+
+Figure 3: Trace inspect — layer-less: leave Target blank to query every
service (or pick/type one), then Run query. Here one trace crosses five
services (`agent::ui` → `frontend` → `app` → `gateway` → `songs`); the
resolved-query line shows the exact OAP call (`native · queryTraces`).</br>
+
+## Log inspect: one query, three log sources
+
+**Log inspect** does the same for logs — *"query any service across layers,
pick it, type its name, or leave it blank"* — and folds three different log
worlds into one place via a **Source** switch:
+
+- **Raw** — the stored service logs, streamed across services with tag and
trace-id conditions, each row opening the same payload popout as the per-layer
[Log Explorer](/blog/2026-06-23-horizon-ui-log-explorer/);
+- **Browser** — the BROWSER layer's JS errors by category, with the same
source-map de-obfuscation from the Browser Errors post;
+- **Kubernetes Pod logs** — an on-demand live tail of a pod's container logs,
with Start / Pause and Include/Exclude regex filters, never persisted.
+
+
+Figure 4: Log inspect — "query any service across layers, or leave it blank,"
across three sources (Raw stored logs, Browser JS errors, Kubernetes Pod logs).
Here raw logs stream from several services at once.</br>
+
+## Where it runs
+
+All three live under **Operate** and share one permission, `inspect:read`.
They split on the backend, though. **Trace inspect** and **Log inspect** ride
OAP's standard query protocol — the same one the dashboards and per-layer
explorers use — so they're always on and work on any OAP, including 10.x.
**Metrics inspect** is the exception: it reads OAP's metric catalog and entity
enumerator through the **admin host**'s `inspect` module, so it needs OAP 11;
when that module is absent it show [...]
+
+## Where to go next
+
+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.
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
new file mode 100644
index 00000000000..5c1a1096b6b
--- /dev/null
+++ b/content/zh/2026-06-29-horizon-ui-inspect-cross-layer-query/index.md
@@ -0,0 +1,53 @@
+---
+title: "认识 Horizon UI · 12/17:Inspect,跨 layer 查询工具"
+date: 2026-06-29
+author: 吴晟
+description: "Horizon UI 系列第十二篇:Operate 下的 Inspect 家族,包括能看到每个指标由哪条规则定义的指标目录和
MQE 看板,以及不必先选择 layer 就能在全局范围查询的 trace 和 log 入口。"
+tags:
+ - Engineering
+ - Metrics
+---
+
+*译自英文原文:[Meet Horizon UI · 12/17: Inspect — Cross-Layer Query
Power-Tools](/blog/2026-06-29-horizon-ui-inspect-cross-layer-query/)。*
+
+这是 [Meet Horizon UI](/zh/2026-06-21-skywalking-horizon-ui-introduction/)
系列的第十二篇,仍然属于第三幕 **operate it**。[Trace
Explorer](/zh/2026-06-22-horizon-ui-trace-explorer/) 和 [Log
Explorer](/zh/2026-06-23-horizon-ui-log-explorer/) 的入口方式很一致:先选 layer,再选
service,然后搜索。如果你已经知道要看哪个服务,这个流程很顺。但有些时候,你并不知道入口在哪:手里只有一个 trace id,却不知道它属于哪个
layer;告警里只有一个出问题的 service name;或者你只是想把某个指标拿出来,在所有实体上画一遍。**Operate** 下的
**Inspect** 家族就是为这些场景准备的:三个跨 layer 查询入口,去掉“先选 layer”这一步;其中一个甚至没有对应的单 layer 版本。
+
+## Metrics inspect:指标目录,以及每个指标背后的规则
+
+SkyWalking 会计算大量指标,但过去没有一个地方能把它们完整列出来。**Metrics inspect** 补上了这个视图。它的 catalog
drawer 会列出当前连接的 OAP 计算出的所有指标,并按**定义这些指标的规则**分组:也就是上一篇里讲过的 OAL 文件和 MAL
规则集。你可以按来源过滤(OAL、MAL·OTel、MAL·Telegraf、LAL→MAL),也可以按名称搜索,并直接看到每个指标的 value type
和 scope。
+
+
+图 1:Metrics inspect 的指标目录:OAP 计算的所有指标按定义规则分组,也就是 DSL management 里的 OAL 文件和 MAL
规则集;可以按 source 和 scope 过滤,再把指标选到看板上。</br>
+
+从目录里选中指标后,它们会进入一个图表 **board**。你可以选择要画哪些实体:从 OAP 返回的分页 top-N 里选,或者手动输入实体名;图表可以用
line、bar 或 area 展示。每个 widget 都会带上规则来源和
scope,所以你始终能从“这个数”追溯到“是哪条规则算出了这个数”。它也可以当作一个 MQE 临时看板:时间范围保存在浏览器本地,但发送给 OAP
时会转成服务端时间;board 本身也保存在浏览器里;那些只存在于共享存储、但不由当前连接的 OAP 定义的指标,也可以作为 *foreign*
metrics 加进来。
+
+
+图 2:Inspect board:任选一个指标,在多个实体上画图;每个 widget 保留规则来源(OAL)、scope(Service)、独立的
entity 分页器,以及一个浏览器本地保存、提交给 OAP 时转换成服务端时间的时间范围。</br>
+
+## Trace inspect:不用先选 layer,也能找 trace
+
+**Trace inspect** 可以理解成拿掉 layer 限制的 [Trace
Explorer](/zh/2026-06-22-horizon-ui-trace-explorer/)。**Target** 是可选的:你可以通过
layer → service → instance → endpoint
级联选择服务,也可以直接输入一个名字(并标记它是真实存在还是推测出来的),还可以**留空 Target,一次查询所有
service**。之后照常设置查询条件:trace id、status、排序、duration 范围、tags 和时间窗口,然后点击 **Run
query**。界面会显示一行解析后的查询,写清楚实际发给 OAP 的调用;结果仍然是你熟悉的分布散点图、trace 列表和三视角
waterfall,只是不再绑在某个 layer 上。
+
+
+图 3:Trace inspect 不需要先选 layer:Target 留空即可查询所有 service,也可以选择或输入某个 service。这里一条
trace 跨过五个服务(`agent::ui` → `frontend` → `app` → `gateway` →
`songs`);解析后的查询行展示了实际 OAP 调用(`native · queryTraces`)。</br>
+
+## Log inspect:一次入口,三类日志
+
+**Log inspect** 对 log 做同样的事:可以跨 layer 查询任意 service,选择它、输入它的名字,或者直接留空。它还通过
**Source** 切换,把三类日志放到同一个入口里:
+
+- **Raw**:存储下来的 service logs,可以跨 service 流式查询,支持 tag 和 trace id 条件;每一行都能打开和单
layer [Log Explorer](/zh/2026-06-23-horizon-ui-log-explorer/) 相同的 payload 弹窗;
+- **Browser**:来自 BROWSER layer 的 JS errors,按 category 查询,并使用 Browser Errors
那篇里讲过的 source map 反混淆;
+- **Kubernetes Pod logs**:按需 live tail 某个 pod 的 container logs,支持 Start /
Pause 和 Include/Exclude 正则过滤,不会持久化。
+
+
+图 4:Log inspect 可以跨 layer 查询任意 service,也可以留空 target;三种 source 分别对应 Raw
存储日志、Browser JS errors 和 Kubernetes Pod logs。这里展示的是多个 service 同时输出的 raw
logs。</br>
+
+## 它在哪里运行
+
+这三个入口都在 **Operate** 下,共用一个权限:`inspect:read`。但它们访问后端的方式不同。**Trace inspect** 和
**Log inspect** 走 OAP 标准 query protocol,也就是 dashboard 和单 layer explorer
使用的同一套接口;所以它们始终可用,也兼容 10.x OAP。**Metrics inspect** 是例外:它通过 **admin host** 的
`inspect` 模块读取 OAP 的指标目录和实体枚举,因此需要 OAP 11。如果模块不存在,页面会给出明确的 *"set
`SW_INSPECT=default`"* 提示,而不是只显示一个不可用的页面;另外两个入口仍然可以正常使用。可以把这组三个入口看成 Trace 和 Log
explorer 在 Operate 侧的跨 layer 版本,再加上一个终于能回答“这个后端到底在算哪些指标、这些指标由哪条规则定义”的指标目录。
+
+## 后续阅读
+
+字段参考,包括指标目录、实体枚举、foreign metrics 和 MQE 执行,可以看 [Inspect
文档](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/inspect/)。
+
+下一篇是 **Platform & Cluster 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 5036f1f1ee9..347eba424c6 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
@@ -66,4 +66,4 @@ Live Debugger 按分析语言分成三个标签页,因为三种规则处理的
字段参考,包括每个 apply state、dump 格式和各标签页的采集控制,可以看 [Runtime
Rules](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/runtime-rules/)
和 [Live
Debugger](https://skywalking.apache.org/docs/skywalking-horizon-ui/next/operate/live-debugger/)
文档。
-下一篇进入 **Inspect — Cross-Layer Query Power-Tools**:在 Operate 界面里跨 layer 直接运行
metric、trace 和 log 查询。
+下一篇:[Inspect,跨 layer
查询工具](/zh/2026-06-29-horizon-ui-inspect-cross-layer-query/):在 Operate 界面里跨
layer 直接运行 metric、trace 和 log 查询。
diff --git
a/static/screenshots/horizon-0.7.0/p12-inspect-01-metrics-catalog.webp
b/static/screenshots/horizon-0.7.0/p12-inspect-01-metrics-catalog.webp
new file mode 100644
index 00000000000..79ef5679828
Binary files /dev/null and
b/static/screenshots/horizon-0.7.0/p12-inspect-01-metrics-catalog.webp differ
diff --git a/static/screenshots/horizon-0.7.0/p12-inspect-02-metrics-board.webp
b/static/screenshots/horizon-0.7.0/p12-inspect-02-metrics-board.webp
new file mode 100644
index 00000000000..a73ce41bd16
Binary files /dev/null and
b/static/screenshots/horizon-0.7.0/p12-inspect-02-metrics-board.webp differ
diff --git a/static/screenshots/horizon-0.7.0/p12-inspect-03-trace.webp
b/static/screenshots/horizon-0.7.0/p12-inspect-03-trace.webp
new file mode 100644
index 00000000000..27ea82c1795
Binary files /dev/null and
b/static/screenshots/horizon-0.7.0/p12-inspect-03-trace.webp differ
diff --git a/static/screenshots/horizon-0.7.0/p12-inspect-04-log-sources.webp
b/static/screenshots/horizon-0.7.0/p12-inspect-04-log-sources.webp
new file mode 100644
index 00000000000..26a09d5ec54
Binary files /dev/null and
b/static/screenshots/horizon-0.7.0/p12-inspect-04-log-sources.webp differ
diff --git a/themes/docsy/layouts/partials/sidebar-skywalking.html
b/themes/docsy/layouts/partials/sidebar-skywalking.html
index fe354cd03f1..dcdd5dbb187 100644
--- a/themes/docsy/layouts/partials/sidebar-skywalking.html
+++ b/themes/docsy/layouts/partials/sidebar-skywalking.html
@@ -1,13 +1,13 @@
<div class="sidebar-mask"></div>
<div class="sidebar">
<nav class="nav-links">
- <div class="nav-item"><a href="/docs/" class="nav-link">Projects and
Documentation</a></div>
- <div class="nav-item"><a href="/events/"
class="nav-link">Events</a></div>
- <div class="nav-item"><a href="/blog/" class="nav-link
router-link-exact-active router-link-active">Blog</a>
- </div>
- <div class="nav-item"><a href="/downloads/"
class="nav-link">Downloads</a></div>
- <div class="nav-item"><a href="/team/" class="nav-link">Team</a></div>
- <div class="nav-item"><a href="/users/"
class="nav-link">Users</a></div>
+ {{ $sec := .Section }}
+ <div class="nav-item"><a href="/docs/" class="nav-link{{ if eq $sec
"docs" }} router-link-active{{ end }}">Projects and Documentation</a></div>
+ <div class="nav-item"><a href="/events/" class="nav-link{{ if eq $sec
"events" }} router-link-active{{ end }}">Events</a></div>
+ <div class="nav-item"><a href="/blog/" class="nav-link{{ if eq $sec
"blog" }} router-link-active{{ end }}">Blog</a></div>
+ <div class="nav-item"><a href="/downloads/" class="nav-link{{ if eq
$sec "downloads" }} router-link-active{{ end }}">Downloads</a></div>
+ <div class="nav-item"><a href="/team/" class="nav-link{{ if eq $sec
"team" }} router-link-active{{ end }}">Team</a></div>
+ <div class="nav-item"><a href="/users/" class="nav-link{{ if eq $sec
"users" }} router-link-active{{ end }}">Users</a></div>
<div class="nav-item">
<div class="dropdown-wrapper open">
<a class="dropdown-title"><span>中文资料</span>