基于 Skywalking 部署应用性能监控
今天我们就着重讲一讲如何基于 Skywalking 来快速搭建一套应用性能监控平台
walkingfunny.com.png一、Skywaling 介绍
Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目, 2017年12月SkyWalking成为Apache国内首个个人孵化项目, 2019年4月17日SkyWalking从Apache基金会的孵化器毕业成为顶级项目, 目前SkyWalking支持Java、 .Net、 Node.js、 go、 python等探针, 数据存储支持MySQL、 ElasticSearch等, SkyWalking与Pinpoint相同, 对业务代码无侵入, 不过探针采集数据粒度相较于Pinpoint来说略粗, 但性能表现优秀, 目前SkyWalking增长势头强劲, 社区活跃, 中文文档齐全, 没有语言障碍, 支持多语言探针, 这些都是 SkyWalking的优势所在, 还有就是SkyWalking支持很多框架, 包括很多国产框架, 例如, Dubbo、 gRPC、 SOFARPC 等等, 同时也有很多开发者正在不断向社区提供更多插件以支持更多组件无缝接入SkyWalking。
官网地址:https://skywalking.apache.org/
二、Skywalking 同类产品比较
1. Skywalking 的特点介绍:
-
可以实现从前端到后端(多种语言)请求追踪,指标数据采集,日志记录等多项功能。
-
多语言自动探针, 支持Java、 GO、 Python、 PHP、 NodeJS、 LUA、 Rust等客户端。
-
内置服务网格可观察性, 支持从Istio+Envoy Service Mesh收集和分析数据。
-
模块化架构, 存储、 集群管理、 使用插件集合都可以进行自由选择。
-
支持自定义告警配置,目前是通过配置文件的形式。
-
可视化效果丰富,可以自定义多种图表进行拖拽组合展现。
整体架构图大致如下:
image
数据通过push/pull方式,从不同的应用侧上报到Transport Layer,然后经过接收层汇聚到聚合服务降采样计算,最终落库展现,整个过程可以在单独的一个 Java 进程中部署,也可以采用分布式架构(混合模式)来部署,根据接入的数量来选择。
简化架构如下:
image2. Skywalking 较同类其他产品比较:
image参照对比结果,其实我们不难发现,不管是在语言支持的丰富度还是性能上,Skywalking都具有一定的优势,并且就国内的行业背景来看,绝大部分的应用都是基于Java开发的,Skywalking本身OAP服务就是基于Java开发的,这一点具有非常天然的优势。
三、IDEA开发环境的运行与配置:
1. IDEA 导入 Skywalking 源码,mvn编译成功
image不要去 github 直接 clone ,下载地址:https://dlcdn.apache.org/skywalking/9.3.0/apache-skywalking-apm-9.3.0-src.tgz
启动模块就是 server-starter OAPServerStartUp 类,注意配置文件:application.yml 的相关配置,如果只是运行,可以按照默认的配置来直接 main 方法启动,如果首次体验也可以修改 storage 模块的存储类型,修改对应的数据库地址就可以,启动成功后,会全部自动创建完所有的数据库表
注启动完成后,会看到对应的数据上报端点日志显示创建成功:
image注意配置文件的设置:
storage:
selector: mysql # the mysql storage will actually be activated, while the h2 storage takes no effect
h2:
properties:
jdbcUrl: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db;DB_CLOSE_DELAY=-1}
dataSource.user: ${SW_STORAGE_H2_USER:sa}
metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
dataSource.user: ${SW_DATA_SOURCE_USER:root}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}
dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
# other configurations
2. 前端编译:
上述步骤下载的源码包直接就已经包含了前端的源码,在 skywalking-ui 目录下,访问端口:8080
首先安装依赖包:
// 第一步
npm install
安装成功后,直接运行:
// 第二步
npm run serve
实际访问地址:http://localhost:8080
3. 探针安装:以 Java 探针为例:
Java探针的包结构如下
+-- 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
.....
+-- optional-plugins
apm-gson-2.x-plugin.jar
.....
+-- bootstrap-plugins
jdk-http-plugin.jar
.....
+-- logs
skywalking-agent.jar
- Linux Tomcat 7, Tomcat 8, Tomcat 9 配置:修改配置文件 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 9 配置:修改配置文件 tomcat/bin/catalina.bat 第一行
set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
- Jar 文件,比如 SpringBoot 打成的FatJar 形式,需要启动时添加启动参数
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar
- Jetty 容器,修改 jetty.sh 文件,增加 -javaagent 参数到启动命令
export JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
四、最终展现效果
非常直观的链路拓扑,可以快速定位问题的根源
image简洁的概览全局页
image五、写在最后
如果大家有任何关于Skywalking不管是部署,试用,甚至生产环境遇到的各种问题,都可以添加小观纵的公众号进入群聊,汇聚行业大咖一起交流。