写点什么

如何基于 Skywalking 来快速搭建一套应用性能监控平台

作者:观纵科技
  • 2023-03-09
    江苏
  • 本文字数:2436 字

    阅读完需:约 8 分钟

如何基于 Skywalking 来快速搭建一套应用性能监控平台

一、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 收集和分析数据。

  • 模块化架构, 存储、 集群管理、 使用插件集合都可以进行自由选择。

  • 支持自定义告警配置,目前是通过配置文件的形式。

  • 可视化效果丰富,可以自定义多种图表进行拖拽组合展现。

整体架构图大致如下:



数据通过 push/pull 方式,从不同的应用侧上报到 Transport Layer,然后经过接收层汇聚到聚合服务降采样计算,最终落库展现,整个过程可以在单独的一个 Java 进程中部署,也可以采用分布式架构(混合模式)来部署,根据接入的数量来选择。

简化架构如下:



2. Skywalking 较同类其他产品比较:



参照对比结果,其实我们不难发现,不管是在语言支持的丰富度还是性能上,Skywalking 都具有一定的优势,并且就国内的行业背景来看,绝大部分的应用都是基于 Java 开发的,Skywalking 本身 OAP 服务就是基于 Java 开发的,这一点具有非常天然的优势。


三、IDEA 开发环境的运行与配置:

1. IDEA 导入 Skywalking 源码,mvn 编译成功

不要去 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 模块的存储类型,修改对应的数据库地址就可以,启动成功后,会全部自动创建完所有的数据库表

注启动完成后,会看到对应的数据上报端点日志显示创建成功:



注意配置文件的设置:

storage:selector: mysql # the mysql storage will actually be activated, while the h2 storage takes no effecth2:  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 探针为例:

探针下载地址:https://skywalking.apache.org/downloads/

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"
复制代码



四、最终展现效果

非常直观的链路拓扑,可以快速定位问题的根源


简洁的概览全局页


五、写在最后

如果大家有任何关于 Skywalking 不管是部署,试用,甚至生产环境遇到的各种问题,都可以添加观纵科技的公众号进入群聊,汇聚行业大咖一起交流。

用户头像

观纵科技

关注

构建可观测性、一体化的综合运维观测平台 2023-02-03 加入

还未添加个人简介

评论

发布
暂无评论
如何基于 Skywalking 来快速搭建一套应用性能监控平台_APM_观纵科技_InfoQ写作社区