一、简介
在我维护的平台中,检索一个用户的请求,是一件比较痛苦的事情。第一在耗时方面:从slb-->nginx-->java-dubbo,在nginx中虽然可以配置在日志中显示一个请求的耗时,但是这个耗时是总耗时,是一个请求在我的平台中各应用接口功能中耗时的总和,如果耗时过长无法排查到底是在哪一步产生的耗时;第二,一个请求的失败究竟是在哪一步,也需要通过翻阅日志来查找,并不能准确快速达定位到。
综上,就想找一个能协助我们准确定位的请求追踪的工具,目前发现有三款:cat、zepkin,skywalking。这三款链路监控的产品,最先是要尝试使用zepkin,后因为有侵入,需要各个应用修改应用,所以慢慢搁置了。
最近发现一个skywalking,发现这个对比下来不需要修改代码,只是在启动程序是添加一个--javaagent,所以就想尝试一下。
Skywalking的文档地址:
Skywalking的官网:http://skywalking.apache.org/
Skywalking的发布包下载路径:在这个地方选“Distribution”选项中的tar包。
借鉴简书某位小伙伴(作者:海涛_meteor,链接:https://www.jianshu.com/p/8b9aad4210c5)的对比图:
项目 | Cat | Zipkin | Skywalking |
---|---|---|---|
调用链可视化 | 有 | 有 | 有 |
聚合报表 | 非常丰富 | 少 | 较丰富 |
服务依赖图 | 简单 | 简单 | 好 |
埋点方式 | 侵入式 | 侵入式 | 非侵入,字节码增强 |
VM监控指标 | 好 | 无 | 有 |
支持语言 | java/.net | 丰富 | java/.net/Nodejs/php/go |
存储机制 | mysql(报表)、本地文件/HDFS(调用链) | 内存、es、mysql等 | H2、es |
社区支持 | 主要在国内 | 国外主流 | Apache支持 |
使用案例 | 美团、携程、陆金所 | 京东、阿里定制后不开源 | 华为、小米、当当、微众银行 |
APM | 是 | 否 | 是 |
开发基础 | eBay cal | Google Dapper | Google Dapper |
是否支持webflux | 否 | 是 | 是 |
Github stars(2019.12) | 12.3K | 12.2K | 11.8K |
二、安装Skywalking的server端
Skywalking的server端(习惯这么叫),其实包含两个部分:oap和webapp,其中oap进行数据收集,webapp用于展示。
1、安装
# 下载apache-skywalking-apm-es7 下载链接可以从下面三个找一个下载:
wget https://mirror-hk.koddos.net/apache/skywalking/8.5.0/apache-skywalking-apm-es7-8.5.0.tar.gz
wget https://apache.website-solution.net/skywalking/8.5.0/apache-skywalking-apm-es7-8.5.0.tar.gz
wget https://downloads.apache.org/skywalking/8.5.0/apache-skywalking-apm-es7-8.5.0.tar.gz
# 解压
tar xzf apache-skywalking-apm-es7-8.5.0.tar.gz -C /usr/local/
mv /usr/local/apache-skywalking-apm-es7 /usr/local/apache-skywalking-apm-es7-8.5.0
ln -s /usr/local/apache-skywalking-apm-es7-8.5.0 /usr/local/apache-skywalking-apm-es7
Skywalking的配置文件在目录中的config中,运行二进制文件在bin目录,agent是客户端,需要放到被监控的客户端的,webapp是展示页面的目录
2、修改配置
配置文件是config/application.yml,由于我是做测试展示,所以没有进行任何的配置文件修改。
正式使用的饿时候,是需要修改比如使用es存储数据、h2、mysql、tidb等,修改为集群比如zookeeper、nacos、etcd。
因为本次只是单机安装测试,所以暂不修改配置文件。
3、启动
application.yml和webapp.yaml中如果没有和其他应用端口的冲突,就可以启动了。如果有端口冲突,修改吧,尽量不要修改aop配置文件application.yml的端口。
# bin目录下
./startup.sh
# 或者
./oapService.sh
./webappService.sh
启动完成后,可以通过ps或lsof命令来检测是否启动成功。
三、安装Skywalking的agent端
以java 应用为例来说明agent端的使用
agent需要将上面加压的目录中的agent目录全部copy到被监控主机上。
# copy agent目录
rsync -aP /usr/local/apache-skywalking-apm-es7/agent root@xx.xx.xx.xx:/usr/local/agent
# 或者
rsync -aP root@xx.xx.xx.xx:/usr/local/apache-skywalking-apm-es7/agent /usr/local/agent
# 被监控主机
cd /usr/local/agent
]# vim config/agent.config
# namespace 命名空间的隔离,如果都是同一个命名空间此处应填写一致
agent.namespace=${SW_AGENT_NAMESPACE:xxxxxx}
# service_name,应用名称,必须要写上,以区分是
agent.service_name=${SW_AGENT_NAME:xxxxxx}
# 调用数据要传输个server端,oap端,所以一下配置是oap的地址
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:xx.xx.xx.xx:11800}
上述agent配置之后,在java启动中添加如下参数
#java -jar 启动时添加方式
java -javaagent:/usr/local/agent/skywalking-agent.jar -jar xxxxx.jar
# war 包启动 以linux平台为例,windows也是修改同名不同后缀文件,在首行添加如下内容
]# vim tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/agent/skywalking-agent.jar";export CATALINA_OPTS
# war添加好之后,重启tomcat即可。
四、检测监控数据
在启动java程序之后,就可以在Skywalking的server端webapp,去查看监控的数据了
比如 进入链接http://xx.xx.xx.xx:8080
可以查看到如下图: