Skip to content

开启配置地址命名后,Redisson 和 Lettuce 集群 span 仍回退到节点 IP #165

Description

@lrwh

问题描述

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 也可能缺失。

复现步骤

  1. 启动一个可用的 Redis cluster,公告节点 IP,不配置公告 hostname。
  2. Redisson 使用 useClusterServers().addNodeAddress("redis://localhost:<port>"),Lettuce 使用相同 seed 创建 RedisClusterClient
  3. 开启上述两个开关,执行 SET/GET、Redisson batch,以及 Lettuce 拓扑刷新和节点 CLUSTER 命令。
  4. 检查 Redis span 的 peer.hostname、service、peer.ipv4 / peer.ipv6peer.port
  5. 关闭配置地址开关,执行对照实验。

预期行为

  • 开关开启时,发现出来的节点继承其所属集群的配置 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 中的数值,不能通过仅处理 metacustomer_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)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    inst: redisRedis 客户端插桩,包括 Redisson 和 Lettucetag: ai generated由 AI 辅助生成的改动type: bug缺陷报告或修复

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions