问题描述
在 1.65.4-ext 中,同时开启以下配置后,Redisson 集群业务 span 仍可能按拓扑发现的节点 IP 命名,无法稳定通过 DD_SERVICE_MAPPING 映射为集群别名。Lettuce 的节点连接、拓扑命令和延迟写入路径也可能回退到节点 IP。
DD_TRACE_PEER_HOSTNAME_FROM_CONFIG_ENABLED=true
DD_TRACE_DB_CLIENT_SPLIT_BY_HOST=true
DD_SERVICE_MAPPING=redis.example.com:redis-cluster
应用配置的是 seed 域名,Redis 集群公告的是节点 IP。默认关闭开关的行为应保持不变。
环境与已确认原因
- 受影响探针:
1.65.4-ext。
- 本地复现与回归 JVM:Eclipse Adoptium / Temurin JDK 25;原反馈环境的 Java 版本尚未确认。
- Redis:6.2.6 cluster,seed 使用
localhost,节点公告地址使用 127.0.0.1。
- Redisson:
RedisClientConfig.getAddress() 在 3.10.3 返回 URI,3.11.6 已返回 RedisURI。直接链接旧返回类型会导致相关 instrumentation 被 muzzle 排除。
- 即使适配上述签名,拓扑节点 client 自己的配置地址仍是 IP,必须从所属连接管理器获取原始配置域名。
- Lettuce:节点连接参数中的 RedisURI 可能是 IP;
DefaultEndpoint.write 还会覆盖已设置的 hostname/service。ConnectionFuture 的地址未解析时,实际节点 IP 也可能缺失。
复现步骤
- 启动一个可用的 Redis cluster,公告节点 IP,不配置公告 hostname。
- Redisson 使用
useClusterServers().addNodeAddress("redis://localhost:<port>"),Lettuce 使用相同 seed 创建 RedisClusterClient。
- 开启上述两个开关,执行 SET/GET、Redisson batch,以及 Lettuce 拓扑刷新和节点 CLUSTER 命令。
- 检查 Redis span 的
peer.hostname、service、peer.ipv4 / peer.ipv6 和 peer.port。
- 关闭配置地址开关,执行对照实验。
预期行为
- 开关开启时,发现出来的节点继承其所属集群的配置 host;同一 JVM 中不同 client 实例不能串用配置。
- split-by-host 使用上述 host,已有 service mapping 可以继续生效。
- 保留真实节点 IP 和端口;只提取 host,不把认证信息或完整 URI 写入 span 标签。
- 开关关闭、或缺少可用配置 host 时,保留现有连接地址命名行为。
DataKit 查询字段
本地 DataKit 源码的默认映射不包含 peer.ipv4 / peer.ipv6,可将其追加到 ddtrace input 的 customer_tags,得到 peer_ipv4 / peer_ipv6 一级字段。peer.port 是协议 metrics 中的数值,不能通过仅处理 meta 的 customer_tags 提取。
验收范围
覆盖 Redisson 3.10.3、3.11.6、3.27.2、3.52.0,以及 Lettuce 5.0.0.RELEASE、6.2.0.RELEASE、7.6.0.RELEASE;验证开关对照、节点/批量/拓扑命令、实例隔离、真实 IP/端口和关键版本 muzzle 兼容性。
关联修复
草稿 PR:#166(目标分支 guance)。
问题描述
在
1.65.4-ext中,同时开启以下配置后,Redisson 集群业务 span 仍可能按拓扑发现的节点 IP 命名,无法稳定通过DD_SERVICE_MAPPING映射为集群别名。Lettuce 的节点连接、拓扑命令和延迟写入路径也可能回退到节点 IP。应用配置的是 seed 域名,Redis 集群公告的是节点 IP。默认关闭开关的行为应保持不变。
环境与已确认原因
1.65.4-ext。localhost,节点公告地址使用127.0.0.1。RedisClientConfig.getAddress()在 3.10.3 返回URI,3.11.6 已返回RedisURI。直接链接旧返回类型会导致相关 instrumentation 被 muzzle 排除。DefaultEndpoint.write还会覆盖已设置的 hostname/service。ConnectionFuture的地址未解析时,实际节点 IP 也可能缺失。复现步骤
useClusterServers().addNodeAddress("redis://localhost:<port>"),Lettuce 使用相同 seed 创建RedisClusterClient。peer.hostname、service、peer.ipv4/peer.ipv6和peer.port。预期行为
DataKit 查询字段
本地 DataKit 源码的默认映射不包含
peer.ipv4/peer.ipv6,可将其追加到 ddtrace input 的customer_tags,得到peer_ipv4/peer_ipv6一级字段。peer.port是协议metrics中的数值,不能通过仅处理meta的customer_tags提取。验收范围
覆盖 Redisson 3.10.3、3.11.6、3.27.2、3.52.0,以及 Lettuce 5.0.0.RELEASE、6.2.0.RELEASE、7.6.0.RELEASE;验证开关对照、节点/批量/拓扑命令、实例隔离、真实 IP/端口和关键版本 muzzle 兼容性。
关联修复
草稿 PR:#166(目标分支
guance)。