Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion cmd/ongrid-edge/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -392,8 +392,18 @@ func main() {
cfg.Edge.AccessKey,
cfg.Edge.SecretKey,
)
var pluginFetcher edgeplugins.ConfigFetcher = tunnelFetcher
if k8sInfo.Role == "" {
for i, p := range registered {
if p.Name() == edgeplugintraces.Name {
bridges := edgeplugintraces.WithDockerBridges(pluginFetcher, p, pluginLog)
pluginFetcher, registered[i] = bridges, bridges
break
}
}
}
supervisor := edgeplugins.NewSupervisor(edgeplugins.SupervisorOpts{
Fetcher: tunnelFetcher,
Fetcher: pluginFetcher,
Log: pluginLog,
})
for _, p := range registered {
Expand Down
2 changes: 1 addition & 1 deletion docs/adr/ADR-033-application-performance-monitoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Status: Accepted — 用户确认方案并授权实现,2026-09-07。

应用复用官方 OTel SDK/Agent,HTTP 采用 `http.server.request.duration`(秒),RPC 采用 `rpc.server.call.duration`(秒)。兼容模式分别查询旧 `http.server.duration` / `rpc.server.duration`(毫秒;旧 RPC 错误口径限 gRPC),整次查询只选一个指标版本,避免双发重复计数。切换兼容模式是显式操作,不对不同桶边界或单位的直方图混合求分位数。错误使用 error.type,兼容 HTTP 5xx 和 gRPC 非 OK 状态码,原始序列先并集去重再聚合。要求资源属性进入 Prometheus 标签,接口使用路由模板或 RPC 完整方法名。

主机复用 traces 插件的 OTLP 接收器和本机 Prometheus exporter,再由现有 metrics 插件通过已鉴权 tunnel 上报;Kubernetes 复用现有 Telemetry Gateway 的 Metrics remote_write。保持默认监听 loopback,不新增公开写入口或向业务应用下发管理凭据。
主机复用 traces 插件的 OTLP 接收器和本机 Prometheus exporter,再由现有 metrics 插件通过已鉴权 tunnel 上报;Kubernetes 复用现有 Telemetry Gateway 的 Metrics remote_write。2026-10-09 修订:普通 Linux 设备默认监听 loopback 和本机 Docker bridge 地址,显式监听地址配置优先;不默认绑定全网卡,也不向业务应用下发管理凭据。

## 理由与影响

Expand Down
6 changes: 6 additions & 0 deletions docs/runbooks/apm-service-performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@

先启用本机 Edge 的 traces 和 metrics 插件,或在 Kubernetes 安装 Telemetry Gateway。主机的 Collector 在 `127.0.0.1:9464` 暴露应用指标,由 metrics 插件经认证隧道上报;显式关闭的插件不会被自动开启。OTLP 基础地址可用 `http://127.0.0.1:4318`;Docker 使用容器可达地址,K8s 使用网关 Service 的实际 DNS。不要向业务应用分发 Manager/Edge 管理密钥。

普通 Linux 设备的 traces 插件默认保留 localhost 监听,并通过本机 Docker Unix socket 的只读网络查询,为所有 Docker bridge 接口上的 IPv4/IPv6 单播地址增加 `4317/4318` 监听。容器填写所在网络的实际网关地址,例如 `http://172.17.0.1:4318`,不要填写容器自己的 localhost。网络增删随 Edge 的配置检查更新,通常不超过 60 秒;地址变化会重启 Collector,期间可能短暂中断上报。Docker 未安装或查询失败时只保留 localhost,失败会记录日志,不会退回全网卡监听;不自动增加 Docker socket 权限。支持 `DOCKER_HOST=unix:///path/to/docker.sock` 指定本机 socket。

显式设置 Spec 的 `grpc_endpoint` / `http_endpoint` 会覆盖对应协议的自动 bridge 监听;将两项设置为 `127.0.0.1:4317` / `127.0.0.1:4318` 可恢复原来的仅 localhost 行为。Kubernetes gateway 和 OBI 内部 Collector 不走此发现路径。bridge 监听不提供来源鉴权;有跨网段路由或不可信容器时,使用防火墙限制访问。Docker Desktop 的 bridge 位于 VM 内,不适用此宿主机发现方式。

新增 bridge 监听前会检查端口可用性。端口冲突时仅跳过该地址上的对应协议并记录告警,localhost 和其他可用监听继续接收;下一轮配置检查会重试被跳过的端口。如果检查后发生端口竞争导致 Collector 启动失败,会先退回保留显式配置的 localhost 默认接收器,再在后续检查中恢复可用的 bridge 监听。

在「接入管理」填写语言、目标地址、服务、业务命名空间和环境,复制配置。应用身份为 `(environment, service.namespace, service.name)`;service.namespace 不等同于 K8s namespace。缺失属性会进入“未设置”。接收端将旧 deployment.environment 补为 deployment.environment.name,已有规范属性优先。身份保持稳定,路由使用 `/orders/{id}`,不要使用带参数的原始 URL、用户 ID 或 SQL 作为指标标签。

多副本部署须在 `OTEL_RESOURCE_ATTRIBUTES` 中额外设置每个实例唯一的 `service.instance.id`,例如由部署系统注入 Pod UID。不要把同一个固定示例值复制到所有副本;仅有 `device_id` 只能关联设备,无法区分同机的多个应用实例。用实际部署清单与观测列表逐项核对接入覆盖。
Expand Down
Loading
Loading