简介
skywaling:一款服务追踪工具,可以用来做性能分析等
官网地址:https://skywalking.apache.org/
github地址:https://github.com/apache/skywalking
lettuce:redis高级客户端的java驱动器,spring boot 2.0 后的spring-data-redis默认使用该版本;
这里为什么要提到这两个服务软件呢?(当然里面肯定是出问题了)
问题场景
公司原来是用的是skywalking6.x版本,正常使用,但是许多的中间件是无法看到的,例如mongo,es,上面提到的使用lettuce连接的redis等等,缺失了这么多,我们当然想要都 加进去,好做性能分析,查询官网发现,skywalking最新版本已经到V8.2.0了(最近几天看了下源代码已经到v8.3.0,我们折中选择了v8.1.0(用最新的怕出问题,老得又怕功能不全),部署完使用以后发现很多坑,同github上描述的issue一样,我们全部都遇到了,解决方案就是用最新版本的;但是这里有另外一个问题为什么有个系统的redis读取不到,查看链路发现那个项目用的是lettuce,那么是不是其他人也有这个问题呢?
查询资料
初步认为,这个问题可能是因为lettuce版本的问题,可能8.x的skywalking不兼容?查询官方github上面的资料,在它的支持中间件里面,我找到了lettuce,且版本为5.x,详细链接:https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/Supported-list.md
那么为什么我这边同样也是使用的lettuce 5.x版本的,却获取不到呢;我又找了github上面的skywalking交流群,去里面咨询了下,好在有个好心老哥理我了,一步步对比发现其余使用的版本大致差不多,除了redis使用的模式不一样,他们使用的是单机模式,然后我们使用的是哨兵模式,所以猜想是不是哨兵模式引起的,后面无法获取到redis的host;
实际调试
修改配置中心的config,使用lettuce的单机模式,然后重启服务,调用接口后,发现可以读取到对应的redis host,一切正常;具体问题定位到,由于lettuce哨兵模式引起的无法获取到redis具体host,但是使用其他链接框架的哨兵模式没有任何问题,且访问正常;
解决方案
1.修改redis的连接框架,使用jedis或者其余的(这个对我们来说不现实,很可能影响到原有业务,改动太大)
2.使用lettuce的单机模式(这个也不允许,单机挂掉,服务就瘫痪了)
3.继续寻找解决方案,或者等待官方修复这个问题,并且去群里找到老们解决;