feat(infra): p6 hardening - metrics collection and registry mirror

- 4 services add collectDefaultMetrics for process metrics
- docker-compose.yml images prefixed with docker.m.daocloud.io
- Prometheus v0.51.0 (nonexistent) fixed to v2.51.0
- Grafana port remapped 3000 to 3030 to avoid teacher-portal conflict
- ClickHouse edu_analytics database initialized
- known-issues.md documents 7 new P6 scenario-to-rule mappings
This commit is contained in:
SpecialX
2026-07-09 12:29:36 +08:00
parent 566060fade
commit 958b17c9d8
6 changed files with 81 additions and 57 deletions

View File

@@ -1,24 +1,28 @@
import promClient from 'prom-client';
import promClient from "prom-client";
const registry = new promClient.Registry();
// 修复:在本地 registry 上设置默认标签(原代码误用全局 register
registry.setDefaultLabels({ service: 'classes' });
registry.setDefaultLabels({ service: "classes" });
registry.registerMetric(
new promClient.Counter({
name: 'classes_requests_total',
help: 'Total number of class requests',
labelNames: ['method', 'endpoint', 'status'],
name: "classes_requests_total",
help: "Total number of class requests",
labelNames: ["method", "endpoint", "status"],
}),
);
registry.registerMetric(
new promClient.Histogram({
name: 'classes_request_duration_seconds',
help: 'Class request duration in seconds',
labelNames: ['method', 'endpoint'],
name: "classes_request_duration_seconds",
help: "Class request duration in seconds",
labelNames: ["method", "endpoint"],
buckets: [0.01, 0.05, 0.1, 0.3, 0.5, 1, 3, 5],
}),
);
// 自动收集 Node.js 进程级指标CPU/内存/事件循环/GC等
// 这些指标无需业务代码埋点prom-client 自动采集
promClient.collectDefaultMetrics({ register: registry });
export { registry as metricsRegistry };

View File

@@ -1,24 +1,28 @@
import promClient from 'prom-client';
import promClient from "prom-client";
const registry = new promClient.Registry();
// 修复:在本地 registry 上设置默认标签(原代码误用全局 register
registry.setDefaultLabels({ service: 'content' });
registry.setDefaultLabels({ service: "content" });
registry.registerMetric(
new promClient.Counter({
name: 'content_requests_total',
help: 'Total number of content requests',
labelNames: ['method', 'endpoint', 'status'],
name: "content_requests_total",
help: "Total number of content requests",
labelNames: ["method", "endpoint", "status"],
}),
);
registry.registerMetric(
new promClient.Histogram({
name: 'content_request_duration_seconds',
help: 'Content request duration in seconds',
labelNames: ['method', 'endpoint'],
name: "content_request_duration_seconds",
help: "Content request duration in seconds",
labelNames: ["method", "endpoint"],
buckets: [0.01, 0.05, 0.1, 0.3, 0.5, 1, 3, 5],
}),
);
// 自动收集 Node.js 进程级指标CPU/内存/事件循环/GC等
// 这些指标无需业务代码埋点prom-client 自动采集
promClient.collectDefaultMetrics({ register: registry });
export { registry as metricsRegistry };

View File

@@ -1,23 +1,27 @@
import promClient from 'prom-client';
import promClient from "prom-client";
const registry = new promClient.Registry();
registry.setDefaultLabels({ service: 'iam' });
registry.setDefaultLabels({ service: "iam" });
registry.registerMetric(
new promClient.Counter({
name: 'iam_requests_total',
help: 'Total number of iam requests',
labelNames: ['method', 'endpoint', 'status'],
name: "iam_requests_total",
help: "Total number of iam requests",
labelNames: ["method", "endpoint", "status"],
}),
);
registry.registerMetric(
new promClient.Histogram({
name: 'iam_request_duration_seconds',
help: 'Iam request duration in seconds',
labelNames: ['method', 'endpoint'],
name: "iam_request_duration_seconds",
help: "Iam request duration in seconds",
labelNames: ["method", "endpoint"],
buckets: [0.01, 0.05, 0.1, 0.3, 0.5, 1, 3, 5],
}),
);
// 自动收集 Node.js 进程级指标CPU/内存/事件循环/GC等
// 这些指标无需业务代码埋点prom-client 自动采集
promClient.collectDefaultMetrics({ register: registry });
export { registry as metricsRegistry };

View File

@@ -1,24 +1,28 @@
import promClient from 'prom-client';
import promClient from "prom-client";
const registry = new promClient.Registry();
// 修复:在本地 registry 上设置默认标签(原代码误用全局 register
registry.setDefaultLabels({ service: 'msg' });
registry.setDefaultLabels({ service: "msg" });
registry.registerMetric(
new promClient.Counter({
name: 'msg_requests_total',
help: 'Total number of msg requests',
labelNames: ['method', 'endpoint', 'status'],
name: "msg_requests_total",
help: "Total number of msg requests",
labelNames: ["method", "endpoint", "status"],
}),
);
registry.registerMetric(
new promClient.Histogram({
name: 'msg_request_duration_seconds',
help: 'Msg request duration in seconds',
labelNames: ['method', 'endpoint'],
name: "msg_request_duration_seconds",
help: "Msg request duration in seconds",
labelNames: ["method", "endpoint"],
buckets: [0.01, 0.05, 0.1, 0.3, 0.5, 1, 3, 5],
}),
);
// 自动收集 Node.js 进程级指标CPU/内存/事件循环/GC等
// 这些指标无需业务代码埋点prom-client 自动采集
promClient.collectDefaultMetrics({ register: registry });
export { registry as metricsRegistry };