dodjdnh commented on issue #3562:
URL: https://github.com/apache/dubbo-go/issues/3562#issuecomment-5598910584
---
@AsperforMias Hi,关于 Dubbo Admin 和 dubbo-go #3562 的可观测性对齐,以下是目前需要确认的契约。
目标不是要求 dubbo-go 照搬 Dubbo Java 实现,而是以 **Dubbo Java 当前已被 Admin 使用的字段为兼容基线**,让
Java / Go 的 Metric、Trace、Log 能被 Admin 用统一逻辑消费。以不阻碍于dubbo-java的原则,现只做 **Trace →
Metric、Trace → Log、Log → Trace**。
清单状态说明:
- [x] 已实现,当前不需要修改
- [ ] 尚未实现、需要修改或需要补充材料
- [/] 第一期暂不修改或不属于 dubbo-go 的修改范围
### 1. 第一阶段希望对齐的核心字段
- [x] **应用名**
- Dubbo Java:Metric 使用 `application_name`,Trace 使用 `service.name`。
- dubbo-go:当前同样已有 `application_name` 和 `service.name`。
- 最终保证:`service.name == application_name`,值都为 Dubbo application name。
- [ ] **服务接口**
- Dubbo Java:Metric 使用 `interface`;Trace 的 `rpc.service` 为接口全限定名。
- dubbo-go:Metric 已有 `interface`;Trace 的 `rpc.service` 当前使用
`ServiceKey()`,可能是 `group/interface:version`。
- 需要修改:**`rpc.service` 改为纯接口全限定名,与 `interface` 一致。**
- [x] **方法**
- Dubbo Java:Metric 使用 `method`;Trace 使用 `rpc.method`。
- dubbo-go:当前同样已有 `method` 和 `rpc.method`。
- 最终保证:两者值可以直接匹配。
- [x] **调用侧**
- Dubbo Java:Metric 使用 `dubbo_provider_*` / `dubbo_consumer_*`;Trace 使用
`SERVER` / `CLIENT`。
- dubbo-go:当前已经一致。
- 最终保证:`SERVER → provider`,`CLIENT → consumer`。
- [x] **实例**
- Dubbo Java:Metric 使用 `ip`、`hostname`。
- dubbo-go:Metric 当前已有 `ip`、`hostname`。
- 最终保证:保持现有字段;Admin 实例查询优先使用 Metric 的 `ip`。
- [ ] **Group / Version 不再混入 `rpc.service`**
- Dubbo Java:Metric 使用 `group`、`version`;但Java Trace 不保证一定能找到 group 和
version 这两个字段。
- dubbo-go:Metric 已有 `group`、`version`;但 Trace 目前可能通过 ServiceKey() 把它们一起塞进
rpc.service。
- 需要修改:rpc.service 只保留接口全限定名,group/version 不再混进去;第一阶段不要求 Trace 单独新增这两个字段。
- [/] **Trace 单独增加 Group / Version 属性**
- 第一期不强制 dubbo-go 新增独立 Trace 属性。
- 当前由 Admin 从应用、实例或服务页面上下文补充。
- [x] **Trace ID / Span ID 日志字段**
- Dubbo Java:日志 MDC 常见字段为 `traceId`、`spanId`。
- dubbo-go:Zap/Logrus Context Logger 已注入
`trace_id`、`span_id`、`trace_flags`。
- 最终保证:Go 保持现有字段;Admin 同时兼容 Java/Go 两种写法。
- [x] **RPC system**
- Dubbo Java:`rpc.system=apache_dubbo`。
- dubbo-go:当前同样为 `rpc.system=apache_dubbo`。
- 最终保证:保持标准值 `apache_dubbo`。
其中目前**最明确需要 dubbo-go 修改的点只有一个核心问题**:
```text
当前可能:
rpc.service = gray/org.apache.dubbo.samples.OrderService:1.0.0
希望:
rpc.service = org.apache.dubbo.samples.OrderService
```
因为 Admin 要直接做:
```text
Trace rpc.service
↓
Metric interface
```
如果 `group/version` 混在 `rpc.service` 里,就无法稳定匹配。
- [/] **Span 名称改为 `接口全限定名/方法名`**
- dubbo-go 当前主要使用单独的方法名。
- 改名主要用于提升 Jaeger/Tempo 的阅读体验,不影响 Admin 依据 `rpc.service`、`rpc.method`
做字段映射,因此第一期暂不强制修改。
```
请参考 Dubbo Java 的 AbstractDefaultDubboObservationConvention 对齐 Trace 中
rpc.service 的语义。
Dubbo Java 最终写入 rpc.service 的是纯接口全限定名;Dubbo-go 当前在 Server 和 Client Trace
Filter 中使用 invoker.GetURL().ServiceKey(),可能产生 group/interface:version,无法直接匹配
Dubbo Metric 的 interface Label。
建议只修改 filter/otel/trace/filter.go 中 rpc.service 的取值逻辑,从 URL 的 interface
参数获取接口全限定名,并保留 Path fallback。请不要修改公共的 URL.ServiceKey(),因为注册和路由仍然需要组合服务键。
同时请补充 Provider/Consumer 测试,验证带 group/version 时,最终 Span 仍满足:
rpc.service == Metric interface。
Span 名称本期不要求修改。
```
PR #3551 (draft) 已提出独立的 dubbo.group / dubbo.version;Admin P0 不依赖它们,但
group/version 不应继续混入 rpc.service
### 2. 希望 dubbo-go 侧提供的交付材料
如果当前代码已经满足,不需要重新实现,只需要给出真实可复现证据。以下是尚待提供的材料:
- [ ] **字段契约确认**:确认上述 Metric Label、Trace 属性、SpanKind、Log Trace 字段是否作为稳定契约。
- [ ] **Metric 样本**:提供一份真实 `/metrics` 输出,例如 `metrics.prom`。
- [ ] **Trace 样本**:提供同一次 RPC 的 Provider / Consumer Span,各一份。
- [ ] **Log 样本**:提供一份带 `trace_id` 的日志,以及一份正常无 Trace ID 的普通日志。
- [ ] **可运行配置**:提供开启 Prometheus Metric、OTel Trace、JSON Log / Context Logger
的配置。
- [ ] **对齐测试**:至少覆盖 Provider、Consumer、带 `group/version` 的服务,确保 group/version
不会再串入 `rpc.service`。
- [ ] **README**:写明启动服务 → 发起 RPC → 查 `/metrics` → 查 Trace → 用 Trace ID
查日志的完整步骤。
建议最终提供以下文件:
- [ ] `README.md`
- [ ] `config.yaml`
- [ ] `metrics.prom`
- [ ] `trace-provider.json`
- [ ] `trace-consumer.json`
- [ ] `logs-with-trace.jsonl`
- [ ] `logs-without-trace.jsonl`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]