写这篇文章出发点是因为,我尝试了Pinpoint
这样的APM
发现,我部署后根本拿不到相关的数据,而且网上的参考资料,基本上没有价值,都是抄袭官网的,我也查看了Pinpoint
官方文档也不知道怎么样解决,我的问题是Pinpoint agent(1.8.0)
添加到了tomcat
中,在web
界面就只识别了tomcat
,至于里面的数据就没有获取到。(据说是从1.6版本后,改了相关通讯交互方式,直到现在我还是没有找到解决方案。)
因为遇到这样的困难,所以转而选取同类型的APM-Skywalking
来进行研究。
目标
其实换过来思考,无论采用什么样的APM来做应用性能监控主要都是想解决以下问题:
- 主动分布式链路追踪
- 应用级别性能监控(jvm等)
- 低侵入
- 容易二次开发相关插件
- 对相关服务器性能占比较小
选型
方案 | cat | zipkin | Pinpoint | SkyWalking |
---|---|---|---|---|
依赖 | Java 6 7 8、Maven 3+ MySQL 5.6 5.7、Linux 2.6+ Hadoop可选 | Java 6,7,8 Maven3.2+ RabbitMQ | Java 6,7,8 Maven3+ Hbase0.94+ | Java 6,7,8 Maven3.0+ Nodejs Zookeeper Elasticsearch |
实现方 式 | 代码埋点(拦截器,注解,过滤器等) | 拦截请求,发送(HTTP,mq)数据至zipkin服务 | Java探针,字节码增强 | Java探针,字节码增强 |
存储 | Mysql , Hdfs | in-memory , Mysql , Cassandra , Elasticsearch | HBase | Elasticsearch , H2 |
jvm监控 | 不支持 | 不支持 | 支持 | 支持 |
trace查询 | 支持 | 支持 | 需要二次开发 | 支持 |
侵入 | 高,需要埋点 | 高,需要开发 | 低 | 低 |
部署成本 | 中 | 中 | 较高 | 低 |
针对业务情况,主要重点关注Pinpoint
和SkyWalking
,由于Pinpoint
我没有调通,进而研究SkyWalking
。
APM-Skywalking
Skywalking是国人-吴晟大佬个人开源的项目,并且被搜录到了Apache基金会当中持续开源。
官方github地址:https://github.com/apache/incubator-skywalking
希望看到文章觉得不错帮大佬点亮下小星星呀
官方体验地址:http://106.75.237.45:8080/
借用官方的原理图
SkyWalking是一个开源的APM系统,包括监控,跟踪,诊断Cloud Native架构中分布式系统的功能。核心功能如下。
- 服务,服务实例,端点指标分析
- 根本原因分析
- 服务拓扑图分析
- 服务,服务实例和端点依赖性分析
- 检测到缓慢的服务和端点
- 性能优化
- 分布式跟踪和上下文传播
- 报警
截至到目前,Skywalking已经发布了6.0.0-α版本,从这个版本开始已经内置了H2数据,并且先比5.0重构了后端内核,应该算是比较大的改变。
下载页面:http://skywalking.apache.org/downloads/
简单搭建
根据情况选择适合的解压包,进行解压。(我下载的是windows的zip)
解压后
其中agent文件夹是探针,包含整个目录,请不要改变目录结构
+-- agent
+-- activations
apm-toolkit-log4j-1.x-activation.jar
apm-toolkit-log4j-2.x-activation.jar
apm-toolkit-logback-1.x-activation.jar
...
+-- config
agent.config
+-- plugins
apm-dubbo-plugin.jar
apm-feign-default-http-9.x.jar
apm-httpClient-4.x-plugin.jar
.....
skywalking-agent.jar
- 所有插件都在/plugins文件夹中。当插件jar在那里时它是活动的。删除插件jar,它被禁用。
- 默认日志输出文件夹是/logs。
- 配置文件在/config文件夹中。
Java代理安装
Linux Tomcat 7, Tomcat 8
在 tomcat/bin/catalina.sh.
第一行中添加
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
Windows Tomcat 7, Tomcat 8
在tomcat/bin/catalina.bat.
第一行添加
set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
JAR
运行jar包,需要添加-javaagent
参数来进行启动
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar
当然更多java代理请参考官方文档
我本地的示例
配置agent/config
配置agent.application_code=xxl-job
为自己的应用名
后端和UI
SkyWalking后端分发包包括以下部分
-
bin / cmd
脚本,在/bin
文件夹中。包括用于后端服务器和UI启动的启动linux shell
和Windows cmd
的启动脚本。 - 后端配置,在
/config
文件夹中。包括后台的设置文件,这些文件application.yml
,log4j.xml
和alarm-settings.yml
。大多数打开的设置都在这些文件中。 - 后端库,在
/oap-libs
文件夹中。后端的所有jar
文件都在其中。
Webapp env
,在webapp
文件夹中。UI前端jar文件位于此处及其webapp.yml
设置文件中。
快速开始
要求:JDK8
使用bin/startup.sh
(或cmd)在默认设置中启动后端和UI
存储,默认使用H2,为了确保,不需要进一步部署。
后端侦听
0.0.0.0/11800
gRPC API和0.0.0.0/12800
http rest API。在Java,.NetCore,Node.js,Istio代理/探测器中,将gRPC服务地址设置为ip/host:11800
。(ip / host是后端所在的位置)UI侦听
8080
端口并请求127.0.0.1/12800
执行GraphQL查询。
分布式部署后端和UI
所有本机代理和探测器(基于语言或网状探测器)都使用gRPC服务(core/default/gRPC*in application.yml)将数据报告给后端。此外,支持JSON格式的jetty服务。
UI使用GraphQL(HTTP)查询来访问Jetty服务(core/default/rest*in application.yml)中的后端。
后端设置文档参考
UI设置
启动脚本也在/bin/webappService.sh(.bat)
中
UI的设置文件 webapp/webapp.yml
中。它由三部分组成。
1、服务启动端口
2、连接后端的配置
3、设置用户名,密码
server:
port: 8080
collector:
path: /graphql
ribbon:
ReadTimeout: 10000
# Point to all backend's restHost:restPort, split by ,
listOfServers: 10.2.34.1:12800,10.2.34.2:12800
security:
user:
# username
admin:
# password
password: admin
常见问题解答
https://github.com/apache/incubator-skywalking/tree/master/docs/en/FAQ