This is an automated email from the ASF dual-hosted git repository.
wu-sheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-horizon-ui.git
The following commit(s) were added to refs/heads/main by this push:
new cf2b970 Add Node.js runtime dashboard panels for
meter_instance_nodejs_* (#87)
cf2b970 is described below
commit cf2b97032af2ae7637f55eb761603cde449802a2
Author: songzhendong <[email protected]>
AuthorDate: Tue Jun 30 10:18:53 2026 +0800
Add Node.js runtime dashboard panels for meter_instance_nodejs_* (#87)
---
CHANGELOG.md | 4 ++
.../bundled_templates/layers/general.i18n.de.json | 42 ++++++++++++++
.../bundled_templates/layers/general.i18n.es.json | 42 ++++++++++++++
.../bundled_templates/layers/general.i18n.fr.json | 42 ++++++++++++++
.../bundled_templates/layers/general.i18n.ja.json | 42 ++++++++++++++
.../bundled_templates/layers/general.i18n.ko.json | 42 ++++++++++++++
.../bundled_templates/layers/general.i18n.pt.json | 42 ++++++++++++++
.../layers/general.i18n.zh-CN.json | 42 ++++++++++++++
apps/bff/src/bundled_templates/layers/general.json | 66 ++++++++++++++++++++++
9 files changed, 364 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6c7b6d8..dd8d027 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,10 @@ The version line is shared by every package in the monorepo
(apps + shared packa
- **Six instance dashboard line widgets for PHP Health Metrics** — process CPU
utilization, memory used/peak, virtual memory, thread count, and open file
descriptors (`meter_instance_php_*`). Each line widget uses `visibleWhen` so
widgets render only when the PHP agent reports PHM data (Linux `/proc` sampling
of the parent PHP process via `getppid()`).
+### General Service — Node.js runtime
+
+- **Six instance dashboard line widgets for Node.js runtime metrics** —
process CPU, V8 heap used/total/limit, RSS, and external memory
(`meter_instance_nodejs_*`). Each line widget uses `visibleWhen` so widgets
render only when the Node.js agent reports runtime data.
+
### Profiling
- **Profiling task creation is consistent and tells you upfront what it
needs.** Across all five task types (Trace / eBPF / Network / pprof / Async)
the **New Task** button enables as soon as the basic entity is chosen and
always carries a tooltip, and inside the create box a missing target — no
profilable processes, or no instances on the service — is shown as a clear
message next to a disabled **Create** rather than a silently greyed-out button.
diff --git a/apps/bff/src/bundled_templates/layers/general.i18n.de.json
b/apps/bff/src/bundled_templates/layers/general.i18n.de.json
index 12584a0..b6ffaa0 100644
--- a/apps/bff/src/bundled_templates/layers/general.i18n.de.json
+++ b/apps/bff/src/bundled_templates/layers/general.i18n.de.json
@@ -135,6 +135,48 @@
null
]
},
+ {
+ "title": "Prozess-CPU",
+ "tip": "Node.js-Agent: Prozess-CPU (User + System) im Sammelintervall
(%).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 Heap genutzt",
+ "tip": "Node.js-Agent: Genutzter V8-Heap in MB
(process.memoryUsage().heapUsed).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 Heap gesamt",
+ "tip": "Node.js-Agent: V8-Heap gesamt in MB
(process.memoryUsage().heapTotal).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 Heap-Limit",
+ "tip": "Node.js-Agent: Maximale V8-Heapgröße in MB
(v8.getHeapStatistics().heap_size_limit).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Prozess-RSS",
+ "tip": "Node.js-Agent: Resident-Set-Größe in MB
(process.memoryUsage().rss).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Externer Speicher",
+ "tip": "Node.js-Agent: An V8 gebundene C++-Objekte in MB
(process.memoryUsage().external).",
+ "expressions": [
+ null
+ ]
+ },
{
"title": "JVM-CPU",
"tip": "JVM-CPU, gemeldet vom Agenten. Wird nur angezeigt, wenn die
Instanz eine JVM ist.",
diff --git a/apps/bff/src/bundled_templates/layers/general.i18n.es.json
b/apps/bff/src/bundled_templates/layers/general.i18n.es.json
index bf68500..84496ff 100644
--- a/apps/bff/src/bundled_templates/layers/general.i18n.es.json
+++ b/apps/bff/src/bundled_templates/layers/general.i18n.es.json
@@ -94,6 +94,48 @@
{
"title": "Tasa de éxito de instancia de servicio"
},
+ {
+ "title": "CPU del proceso",
+ "tip": "Agente Node.js: CPU del proceso (user + system) en el
intervalo de recolección (%).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Heap V8 usado",
+ "tip": "Agente Node.js: heap V8 usado en MB
(process.memoryUsage().heapUsed).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Heap V8 total",
+ "tip": "Agente Node.js: heap V8 total en MB
(process.memoryUsage().heapTotal).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Límite heap V8",
+ "tip": "Agente Node.js: tamaño máximo del heap V8 en MB
(v8.getHeapStatistics().heap_size_limit).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "RSS del proceso",
+ "tip": "Agente Node.js: tamaño del conjunto residente en MB
(process.memoryUsage().rss).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Memoria externa",
+ "tip": "Agente Node.js: objetos C++ vinculados a V8 en MB
(process.memoryUsage().external).",
+ "expressions": [
+ null
+ ]
+ },
{
"title": "CPU JVM",
"tip": "CPU JVM según reporta el agente. Solo se muestra cuando la
instancia es una JVM."
diff --git a/apps/bff/src/bundled_templates/layers/general.i18n.fr.json
b/apps/bff/src/bundled_templates/layers/general.i18n.fr.json
index aa95f0d..dfb6d1e 100644
--- a/apps/bff/src/bundled_templates/layers/general.i18n.fr.json
+++ b/apps/bff/src/bundled_templates/layers/general.i18n.fr.json
@@ -77,6 +77,48 @@
{
"title": "Taux de succès de l'instance de service"
},
+ {
+ "title": "CPU processus",
+ "tip": "Agent Node.js : CPU du processus (user + system) sur
l'intervalle de collecte (%).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Heap V8 utilisé",
+ "tip": "Agent Node.js : heap V8 utilisé en MB
(process.memoryUsage().heapUsed).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Heap V8 total",
+ "tip": "Agent Node.js : heap V8 total en MB
(process.memoryUsage().heapTotal).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Limite heap V8",
+ "tip": "Agent Node.js : taille max du heap V8 en MB
(v8.getHeapStatistics().heap_size_limit).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "RSS processus",
+ "tip": "Agent Node.js : taille de l'ensemble resident en MB
(process.memoryUsage().rss).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Mémoire externe",
+ "tip": "Agent Node.js : objets C++ liés à V8 en MB
(process.memoryUsage().external).",
+ "expressions": [
+ null
+ ]
+ },
{
"title": "CPU JVM",
"tip": "CPU JVM tel que remonté par l'agent. Ne s'affiche que lorsque
l'instance est une JVM."
diff --git a/apps/bff/src/bundled_templates/layers/general.i18n.ja.json
b/apps/bff/src/bundled_templates/layers/general.i18n.ja.json
index a8de4b0..2d5fd25 100644
--- a/apps/bff/src/bundled_templates/layers/general.i18n.ja.json
+++ b/apps/bff/src/bundled_templates/layers/general.i18n.ja.json
@@ -77,6 +77,48 @@
{
"title": "サービスインスタンス成功率"
},
+ {
+ "title": "プロセス CPU",
+ "tip": "Node.js エージェント:プロセス CPU(user + system)、収集間隔内(%)。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 ヒープ使用量",
+ "tip": "Node.js エージェント:V8 ヒープ使用量(process.memoryUsage().heapUsed)、MB。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 ヒープ合計",
+ "tip": "Node.js エージェント:V8 ヒープ合計(process.memoryUsage().heapTotal)、MB。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 ヒープ上限",
+ "tip": "Node.js エージェント:V8
最大ヒープサイズ(v8.getHeapStatistics().heap_size_limit)、MB。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "プロセス RSS",
+ "tip": "Node.js エージェント:常駐メモリセット(process.memoryUsage().rss)、MB。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "外部メモリ",
+ "tip": "Node.js エージェント:V8 にバインドされた C++
オブジェクト(process.memoryUsage().external)、MB。",
+ "expressions": [
+ null
+ ]
+ },
{
"title": "JVM CPU",
"tip": "エージェントが報告する JVM CPU。インスタンスが JVM の場合のみ描画。"
diff --git a/apps/bff/src/bundled_templates/layers/general.i18n.ko.json
b/apps/bff/src/bundled_templates/layers/general.i18n.ko.json
index 2c39a8f..9830dbb 100644
--- a/apps/bff/src/bundled_templates/layers/general.i18n.ko.json
+++ b/apps/bff/src/bundled_templates/layers/general.i18n.ko.json
@@ -77,6 +77,48 @@
{
"title": "서비스 인스턴스 성공률"
},
+ {
+ "title": "프로세스 CPU",
+ "tip": "Node.js 에이전트: 프로세스 CPU(user + system), 수집 간격 기준 (%).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 힙 사용량",
+ "tip": "Node.js 에이전트: V8 힙 사용량(process.memoryUsage().heapUsed), MB.",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 힙 총량",
+ "tip": "Node.js 에이전트: V8 힙 총량(process.memoryUsage().heapTotal), MB.",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 힙 한도",
+ "tip": "Node.js 에이전트: V8 최대 힙
크기(v8.getHeapStatistics().heap_size_limit), MB.",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "프로세스 RSS",
+ "tip": "Node.js 에이전트: 상주 메모리 집합(process.memoryUsage().rss), MB.",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "외부 메모리",
+ "tip": "Node.js 에이전트: V8에 바인딩된 C++ 객체(process.memoryUsage().external),
MB.",
+ "expressions": [
+ null
+ ]
+ },
{
"title": "JVM CPU",
"tip": "에이전트가 보고하는 JVM CPU입니다. 인스턴스가 JVM일 때만 표시됩니다."
diff --git a/apps/bff/src/bundled_templates/layers/general.i18n.pt.json
b/apps/bff/src/bundled_templates/layers/general.i18n.pt.json
index deaf6dd..ee63cf0 100644
--- a/apps/bff/src/bundled_templates/layers/general.i18n.pt.json
+++ b/apps/bff/src/bundled_templates/layers/general.i18n.pt.json
@@ -83,6 +83,48 @@
{
"title": "Taxa de sucesso da instância de serviço"
},
+ {
+ "title": "CPU do processo",
+ "tip": "Agente Node.js: CPU do processo (user + system) no intervalo
de coleta (%).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Heap V8 usado",
+ "tip": "Agente Node.js: heap V8 usado em MB
(process.memoryUsage().heapUsed).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Heap V8 total",
+ "tip": "Agente Node.js: heap V8 total em MB
(process.memoryUsage().heapTotal).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Limite heap V8",
+ "tip": "Agente Node.js: tamanho máximo do heap V8 em MB
(v8.getHeapStatistics().heap_size_limit).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "RSS do processo",
+ "tip": "Agente Node.js: tamanho do conjunto residente em MB
(process.memoryUsage().rss).",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "Memória externa",
+ "tip": "Agente Node.js: objetos C++ vinculados ao V8 em MB
(process.memoryUsage().external).",
+ "expressions": [
+ null
+ ]
+ },
{
"title": "CPU da JVM",
"tip": "CPU da JVM conforme reportado pelo agente. Só aparece quando a
instância é uma JVM."
diff --git a/apps/bff/src/bundled_templates/layers/general.i18n.zh-CN.json
b/apps/bff/src/bundled_templates/layers/general.i18n.zh-CN.json
index bcac4af..0393ff3 100644
--- a/apps/bff/src/bundled_templates/layers/general.i18n.zh-CN.json
+++ b/apps/bff/src/bundled_templates/layers/general.i18n.zh-CN.json
@@ -48,6 +48,48 @@
{ "title": "服务实例负载", "tip": "针对所选实例每分钟的调用次数。" },
{ "title": "服务实例延迟" },
{ "title": "服务实例成功率" },
+ {
+ "title": "进程 CPU",
+ "tip": "Node.js agent:进程 CPU(用户态 + 内核态),按采集间隔统计(%)。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 堆已用",
+ "tip": "Node.js agent:V8 堆已用内存(process.memoryUsage().heapUsed),单位 MB。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 堆总量",
+ "tip": "Node.js agent:V8 堆已分配总量(process.memoryUsage().heapTotal),单位
MB。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "V8 堆上限",
+ "tip": "Node.js agent:V8
最大堆大小(v8.getHeapStatistics().heap_size_limit),单位 MB。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "进程 RSS",
+ "tip": "Node.js agent:常驻内存集(process.memoryUsage().rss),单位 MB。",
+ "expressions": [
+ null
+ ]
+ },
+ {
+ "title": "外部内存",
+ "tip": "Node.js agent:绑定到 V8 的 C++
对象(process.memoryUsage().external),单位 MB。",
+ "expressions": [
+ null
+ ]
+ },
{
"title": "JVM CPU",
"tip": "由 agent 上报的 JVM CPU。仅当实例为 JVM 时显示。"
diff --git a/apps/bff/src/bundled_templates/layers/general.json
b/apps/bff/src/bundled_templates/layers/general.json
index f1dfabe..698af60 100644
--- a/apps/bff/src/bundled_templates/layers/general.json
+++ b/apps/bff/src/bundled_templates/layers/general.json
@@ -181,6 +181,72 @@
"span": 4,
"rowSpan": 2
},
+ {
+ "id": "nodejs_process_cpu",
+ "title": "Process CPU",
+ "tip": "Node.js agent: process CPU (user + system) over the collect
interval (%).",
+ "type": "line",
+ "unit": "%",
+ "expressions": ["meter_instance_nodejs_process_cpu"],
+ "visibleWhen": { "kind": "mqe", "expression":
"meter_instance_nodejs_process_cpu", "op": "exists" },
+ "span": 3,
+ "rowSpan": 2
+ },
+ {
+ "id": "nodejs_heap_used",
+ "title": "V8 Heap Used",
+ "tip": "Node.js agent: V8 heap used in MB
(process.memoryUsage().heapUsed).",
+ "type": "line",
+ "unit": "MB",
+ "expressions": ["meter_instance_nodejs_heap_used/1048576"],
+ "visibleWhen": { "kind": "mqe", "expression":
"meter_instance_nodejs_heap_used", "op": "exists" },
+ "span": 3,
+ "rowSpan": 2
+ },
+ {
+ "id": "nodejs_heap_total",
+ "title": "V8 Heap Total",
+ "tip": "Node.js agent: V8 heap total allocated in MB
(process.memoryUsage().heapTotal).",
+ "type": "line",
+ "unit": "MB",
+ "expressions": ["meter_instance_nodejs_heap_total/1048576"],
+ "visibleWhen": { "kind": "mqe", "expression":
"meter_instance_nodejs_heap_total", "op": "exists" },
+ "span": 3,
+ "rowSpan": 2
+ },
+ {
+ "id": "nodejs_heap_limit",
+ "title": "V8 Heap Limit",
+ "tip": "Node.js agent: V8 max heap size in MB
(v8.getHeapStatistics().heap_size_limit).",
+ "type": "line",
+ "unit": "MB",
+ "expressions": ["meter_instance_nodejs_heap_limit/1048576"],
+ "visibleWhen": { "kind": "mqe", "expression":
"meter_instance_nodejs_heap_limit", "op": "exists" },
+ "span": 3,
+ "rowSpan": 2
+ },
+ {
+ "id": "nodejs_rss",
+ "title": "Process RSS",
+ "tip": "Node.js agent: resident set size in MB
(process.memoryUsage().rss).",
+ "type": "line",
+ "unit": "MB",
+ "expressions": ["meter_instance_nodejs_rss/1048576"],
+ "visibleWhen": { "kind": "mqe", "expression":
"meter_instance_nodejs_rss", "op": "exists" },
+ "span": 3,
+ "rowSpan": 2
+ },
+ {
+ "id": "nodejs_external_memory",
+ "title": "External Memory",
+ "tip": "Node.js agent: C++ objects bound to V8 in MB
(process.memoryUsage().external).",
+ "type": "line",
+ "unit": "MB",
+ "expressions": ["meter_instance_nodejs_external_memory/1048576"],
+ "visibleWhen": { "kind": "mqe", "expression":
"meter_instance_nodejs_external_memory", "op": "exists" },
+ "span": 3,
+ "rowSpan": 2
+ },
{
"id": "jvm_cpu",
"title": "JVM CPU",