docker部署spring boot并接入skywalking

一、问题引入

  最近忙标书的事,或者是一些技术含量不高的,写下来恐贻笑大方,难登大雅之堂。。。

  这个课题是最近闲起来自己找事做的,因为写的标书里面有提到什么灰度发布呀,docker镜像恢复呀,各种监控呀。首先我一开始并不知道skywalking是什么来的,是某强告诉我的,我只知道ELK 7版本有个APM的东西,然后我经理叫我点进去,有空研究下。

  然后研究不下去,倒是部署下来了,如下图:docker部署spring boot并接入skywalking_.net

 

   当我想搞清楚页面每个指标代表啥意思的时候(老实说,即使知道中文意思也不挺懵逼,估计开发才了解),发现并没有很多参考文档,而且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包时有些参数是不支持的,譬如在我测试中,这两个参数就报错

-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC

docker部署spring boot并接入skywalking_jar包_02

 

3、诸如这种127.0.0.1的报错,要检查相关配置文件

(1)skywalking报错:连接拒绝

Caused by: org.apache.skywalking.apm.dependencies.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: /127.0.0.1:11800
Caused by: java.net.ConnectException: Connection refused
 
(2)服务中心nacos报错:微服务无法注册

docker部署spring boot并接入skywalking_docker_03

 

 

要检查下配置文件,或者启动脚本

  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

docker部署spring boot并接入skywalking_微服务_04

 

成品图是这样的,指标还没出来,因为还需要一个服务,明天再搞

docker部署spring boot并接入skywalking_微服务_05

docker部署spring boot并接入skywalking_.net_06

 

 待续。。。。。