环境搭建
到官网下载skywalking压缩包
http://skywalking.apache.org/downloads/

由于我测试服务器上的ES版本是6.X,最新版本建议使用ES7了,这里选了一个稍旧的版本


下载到压缩包后上传到服务器,解压后的目录

agent就是增强我们应用的探针,后续需要拷贝到我们应用所在服务器
bin目录下有一些启动脚本
conf下是一些配置,包括告警配置、skywalking数据存储的配置等
这里先修改conf下的application.yml,修改数据存储方式为es,并指定es服务的地址

保存后,进入bin目录,执行./startup.sh,会同时启动OAP服务和UI页面,jps查看已经启动成功

主页面端口默认8080

服务接入
先进入skywalking的安装目录,修改agent/conf/agent.conf,设置skywalking服务所在地址,然后将agent目录拷贝到应用所在服务器

这里准备两个demo服务,order和product,order会调用product,采用jenkins发布,docker部署
docker插件配置,指定了agent包的位置是/app/skywalking,需要启动容器时和本地目录做映射
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>registry.cn-hangzhou.aliyuncs.com/yiyuankafei/zhulu-product:latest</imageName>
<baseImage>registry.cn-hangzhou.aliyuncs.com/yiyuankafei/jdk8:20210601</baseImage>
<entryPoint>["java", "-javaagent:/app/skywalking/agent/skywalking-agent.jar", "-Dskywalking.agent.service_name=zhulu-product", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<comPress>true</comPress>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
jenkins脚本
mvn package docker:build
container_id=`docker ps -a | grep zhulu-product | awk '{print $1}'`
if [ -n "$container_id" ];then
docker stop $container_id
docker rm $container_id
docker rmi `docker images | grep '<none>' | awk '{print $3}'`
fi
docker run -d -i --name=zhulu-product -v /home/skywalking:/app/skywalking -p 7111:7001 registry.cn-hangzhou.aliyuncs.com/yiyuankafei/zhulu-product:latest
发布后发现容器没有启动,日志里抛如下异常


原因是JDK版本太低,基础镜像中的JDK版本是jdk1.8_11,下载一个jdk1.8_291重新打一个JDK镜像,替换掉基础镜像
再次发布,项目可以正常启动,但访问数据库抛异常
errorCode 0 , state 08S01
......
......
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate

原因是升级jdk版本后,与mysql版本出现了不兼容
网上找了几种方案,有两种可以解决问题
- 修改jdk的/jre/lib/security下的java.security文件,将下图中的TLS和SSL删掉

我这里修改后重新打一个jdk镜像,是解决了问题的,但是这种方式修改了JDK的安全校验机制,不推荐使用 - 数据库连接参数增加useSSL=false

网上还看到了其它方案,如数据库连接参数增加enabledTLSProtocols=TLSv1.2等等,这些方案都有额外的异常,这里选择了上面的方案二
服务启动后,访问skywalking主页,可以看到已经识别到了服务实例

调用order服务接口/order/findById,内部通过feign调用product的接口findByIds,正常返回




查看服务拓扑图

查看trace,包含接口的执行链路,以及各个节点的耗时

对于异常服务也会记录错误原因

1645

被折叠的 条评论
为什么被折叠?



