SkyWalking整体上分为探针、后台、UI界面三大部分,探针使用字节码注入技术实现对服务数据的采集,然后将采集到的数据格式化后发送给后台,后台会把这些数据存储,目前支持的存储介质为Mysql,H2,ElasticSearch,最后UI界面访问后台接口,从而可以看到追踪的数据,大致如下:
下面介绍安装部署:
注:本次安装只有一台机器,ip为192.168.1.252,微服务、elasticsearch、skywalking都部署在本台机器,使用的是root用户。
一、下载安装包并解压
skywalking:
https://www.apache.org/dyn/closer.cgi/skywalking/6.1.0/apache-skywalking-apm-6.1.0.tar.gz
tar -zxvf apache-skywalking-apm-6.1.0.tar.gz
elasticserch:
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz
tar -zxvf elasticsearch-6.3.0.tar.gz
二、启动elasticsearch
- elasticsearch默认不允许使用root启动服务,如果当前用户是root,则需要新建一个用户,我这里新建一个用户es:
adduser es
chown -R es elasticsearch-6.3.0
su es
cd elasticsearch-6.3.0
- 配置除了localhost之外的其他机器访问elasticsearch,在config/elasticsearch.yml文件中追加如下内容:
network.host: 0.0.0.0
生产环境建议将0.0.0.0调整为具体的ip
- 启动:
cd elasticsearch-6.3.0/bin
./elasticsearch
启动的时候可能会报一些错误例如:每个进程最大同时打开文件数太小、最大线程个数太低等,我这里做了如下修改:
在/etc/security/limits.conf
文件中追加如下内容:
* soft nproc 4096
* hard nproc 4096
在/etc/sysctl.conf
文件中追加如下内容:
vm.max_map_count=262144
然后执行sysctl -p
命令使配置生效,然后重新启动elasticsearch,当然,也可以选择后台启动:./elasticsearch -d
- 打开浏览器访问:http://192.168.1.252:9200/ ,如果可以看到有elasticsearch的字符串信息返回,则代表启动成功。
三、启动skywalking
进入skywalking根目录,执行ls
命令,结果如下:
agent bin config LICENSE licenses NOTICE oap-libs README.txt webapp
agent:可以理解为文章开头的探针
config:配置skywalking后台的一些参数
bin:一些常见的脚本
oap-libs:后台需要的一些包
webapp:应该是UI界面的一些东西
- 配置探针:为了实现端点过滤功能,将apm-trace-ignore-plugin-6.1.0.jar从agent/optional-plugins目录下复制到agent/plugins下:
cp agent/optional-plugins/apm-trace-ignore-plugin-6.1.0.jar agent/plugins/
- 配置后台:将后台默认的H2存储介质修改为elasticsearch,编辑config/application.yml文件,将H2部分注释掉,打开elasticsearch的配置:
Esc进入命令行模式
显示行号:
:set number
注释掉H2:
:72,76s/^/#/g
打开elasticsearch的配置
:58,71s/^#//g
实际行号要看具体文件,另外由于这里skywalking和elasticsearch部署在同一台机器,所以elasticsearch采用的是默认ip和端口,具体怎么配置要以实际情况考量
- 启动后台和UI界面:
cd bin
./startup.sh
此时打开elasticsearch的日志文件:logs/elasticsearch.log
,可以看到skywalking在创建一些元数据文件
- 打开浏览器访问:http://192.168.1.252:8080/ ,如果看到skywalking的界面,则启动成功,如果需要输入用户名密码,默认都是admin
四、启动自己的服务
nohup java -javaagent:/&&&/agent/skywalking-agent.jar -Dskywalking.agent.service_name=servicea -Dskywalking.trace.ignore_path=/eureka/** -jar servicea.jar servicea.log 1>log/servicea.log 2>&1 &
说明:
- -javaagent:指明了要在自己的服务中使用哪个文件进行字节码注入,&&&表示skywalking的根目录
- -Dskywalking.agent.service_name=指明了当前服务的名称为servicea,用以在skywalking的UI界面的服务中展示
- -Dskywalking.trace.ignore_path=使用Ant风格指明了不需要追踪的endPoint,如果有多个,可以使用英文逗号隔开
五、存在的问题
- UI界面有时会卡死,原因是后台报了ID can`t be null的异常,可能是由于浏览器缓存导致的,这是目前版本存在的一个问题,但是整体上不影响服务的运行,重新打开一个页面即可
- 目前是多个自己的服务启动时执行了同一个skywalking-agent.jar,尚不清楚这样是否是最佳实践或者是否存在某些问题。