docker部署spring boot并接入skywalking
一、问题引入
最近忙标书的事,或者是一些技术含量不高的,写下来恐贻笑大方,难登大雅之堂。。。
这个课题是最近闲起来自己找事做的,因为写的标书里面有提到什么灰度发布呀,docker镜像恢复呀,各种监控呀。首先我一开始并不知道skywalking是什么来的,是某强告诉我的,我只知道ELK 7版本有个APM的东西,然后我经理叫我点进去,有空研究下。
然后研究不下去,倒是部署下来了,如下图:
当我想搞清楚页面每个指标代表啥意思的时候(老实说,即使知道中文意思也不挺懵逼,估计开发才了解),发现并没有很多参考文档,而且elk官网对这个APM都是全英解释,关键的是,做报警监控的时候还有短板,说是内测阶段。看着研究价值不高,而且感觉会死很多脑细胞,干脆放弃了,问某强公司用的APM工具是什么,然后这个skywalking出场了,是针对微服务用得非常普遍的APM工具。
单纯单机版在操作系统运行,指定下agent收集器跑jar包(目前我们线上业务就是操作系统跑的jar微服务),完事~
但上面说到标书是要用docker,也就是标如果中了,这个是趋势,docker下跑jar包,方便回滚操作,然后什么高大上的灰度发布,滚动升级,用户无感知。。。k8s应该以后也是会用到的,从简单入手,我就先研究这个了。
二、问题解决
昨天搞的时候一点进度都木有,可能过急了,就是跳跃式,越快越好,不仅jar包无法注册到nacos服务中心,而且skywalking也监控不到跑起来的jar包服务。我直接改以前docker版pipeline的jenkins发布任务,因为我以为很简单 = =,无非就是把jar包打到skywalking基础镜像上,然后指定agent跑起来就好。才发现,出问题很难定位问题原因。
参考文档:https://www.jb51.net/article/210119.htm
记录下解决问题的几个关键点
1、dockerfile构建镜像的时候,记得用skywalking-base 这个基础镜像,这个镜像已经有java环境,不用担心跑不了jar
FROM apache/skywalking-base:8.4.0-es6
2、以这个基础镜像打进去的jar包,或者运行脚本,启动jar包时有些参数是不支持的,譬如在我测试中,这两个参数就报错
3、诸如这种127.0.0.1的报错,要检查相关配置文件
(1)skywalking报错:连接拒绝
要检查下配置文件,或者启动脚本
nacos报错,叫开发修改BOOT-INF/classes/bootstrap-test.properties 的配置,写成127.0.0.1是无法注册上去的,因为是容器内,要写成操作系统ip,因为已经映射出来,注意docker下的容器之间的网络是隔离的。
spring.cloud.nacos.config.server-addr=http://127.0.0.1:8848 #127.0.0.1需要改成操作系统ip
这个文件改了之后,还要确保application-test.yml也要修改,改成当前服务器的ip,我这里是192.168.0.170,原来写的是127.0.0.1
成品图是这样的,指标还没出来,因为还需要一个服务,明天再搞
待续。。。。。