SkyWalking是一款广受欢迎的国产应用性能监控APM(Application Performance Monitoring)产品,主要针对微服务、Cloud Native和容器化(Docker、Kubernetes、Mesos)架构的应用。SkyWalking的核心是一个分布式追踪系统,且目前是Apache基金会的顶级项目。
SkyWalking 是一个完整的 APM(Application Performance Management)系统,链路追踪只是其中的一部分。
SkyWalking 和 Zipkin 的定位不同,决定了它们不是相同类型的产品。SkyWalking 中提供的组件更加偏向业务应用层面,并没有涉及过多的组件级别的观测;Zipkin 提供了更多组件级别的链路观测,但并没有提供太多的链路分析能力。你可以根据两者的侧重点来选择合适的产品。
要通过SkyWalking将Java应用数据上报至链路追踪控制台,首先需要完成埋点工作。SkyWalking既支持自动埋点(Dubbo、gRPC、JDBC、OkHttp、Spring、Tomcat、Struts、Jedis等),也支持手动埋点(OpenTracing)
核心功能如下:
- 服务、服务实例、端点指标分析
- 根本原因分析
- 服务拓扑图分析
- 服务、服务实例和端点依赖性分析
- 慢服务和端点检测
- 性能优化
- 分布式跟踪和上下文传播
- 数据库访问指标,慢 SQL 检测(包括 SQL 语句)
- 报警
1. 系统架构
从中间往上看,首先是 Receiver Cluster,它代表接收器集群,是整个后端服务的接入入口,专门用来收集各个指标,链路信息,相当于我在上一节所讲的链路收集器。
再往后面走是 Aggregator Cluster,代表聚合服务器,它会汇总接收器集群收集到的所有数据,并且最终存储至数据库,并进行对应的告警通知。右侧标明了它支持的多种不同的存储方式,比如常见的 ElasticSearch、MySQL,我们可以根据需要来选择。
图的左上方表示,我们可以使用 CLI 和 GUI,通过 HTTP 的形式向集群服务器发送请求来读取数据。
图的下方,是数据接收的来源,分为 3 种:
- Metrics System:统计系统。目前支持从 Prometheus 中拉取数据到 SkyWalking,也支持程序通过 micrometer 推送数据。
- Agents: 业务探针。指在各个业务系统中集成探针服务来进行链路追踪,也就是链路追踪中的链路采集部分。SkyWalking 支持 Java、Go、.Net、PHP、NodeJS、Python、Nginx LUA 语言的探针,是目前市面上支持探针语言比较全的系统。同时,它还支持通过 gRPC 或者 HTTP 的方式来传递数据。
- Service Mesh:SkyWalking 还支持目前比较新的 Service Mesh 监控技术,通过观测这部分数据同样可以实现链路数据的观测。
2. 使用
2.1. 运行Skywalking
首先到官网上下载apache-skywalking-apm-es7-8.3.0.tar.gz,解压后运行bin
目录下的startup.sh
脚本即可启动skywalking服务(使用内存存储数据)
SkyWalking控制台服务默认监听8080端口,若有防火墙需要开放该端口。若希望允许远程传输,则还需要开放11800(gRPC)和12800(rest)端口,远程agent将通过该端口传输收集的数据:
正常启动成功后,使用浏览器访问主页如下:
2.2. 服务链路追踪
首先为每个服务创建一个agent目录/agent/student
、/agent/school
然后将skywalking里的agent目录下的所有文件拷贝出来,分别粘贴到新建的agent目录中:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
配置好agent之后,启动程序是需要指定skywalking-agent.jar
的目录路径:
java -javaagent:/agent/student/skywalking-agent.jar -jar student.java
java -javaagent:/agent/school/skywalking-agent.jar -jar school.java
如果不想为每个服务都单独拷贝一个agent目录,则可以通过添加JVM启动参数来覆写配置项
-javaagent:/agent/skywalking-agent.jar
-Dskywalking.agent.service_name=school
-Dskywalking.collector.backend_service=localhost:11800
请求接口后,到SkyWalking的“追踪”页面上,就可以查看到调用链路信息了
点击链路上的节点可以查看到对应的详情:
可以看到支持jdbc调用跟踪
点击拓扑图可以查看服务拓扑图
在仪表盘上可以监控端点、服务实例
可以看到支持redis调用跟踪
支持grpc调用跟踪
支持Kafka调用跟踪
spring-cloud-gateway需要将agent/optional-plugins下的两个插件 复制到 agent/plugins目录下
apm-spring-cloud-gateway-2.1.x-plugin-8.3.0.jar
# 下面这个包plugins中一般有,不需要复制了
apm-spring-webflux-5.x-plugin-8.3.0.jar