1.1. 基础概念
1.1.1. 概述
SkyWalking是 apache基金会下面的一个开源 APM项目,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。Skywalking支持链路追踪和监控应用组件基本涵盖主流框架和容器,如国产 RPC Dubbo和 motan等,国际化的 spring boot,spring cloud。
下面是 Skywalking的几大特点:多语言自动探针,Java,.NET Core和 Node.JS。多种监控手段,语言探针和 service mesh。轻量高效。不需要额外搭建大数据平台。模块化架构。UI、存储、集群管理多种机制可选。支持告警。优秀的可视化效果。
Skywalking 提供 Tracing(跟踪)和 Metrics(指标)数据的获取和聚合。Metric的特点是,它是可累加的:他们具有原子性,每个都是一个逻辑计量单元,或者一个时间段内的柱状图。例如:队列的当前深度可以被定义为一个计量单元,在写入或读取时被更新统计;输入 HTTP请求的数量可以被定义为一个计数器,用于简单累加;请求的执行时间可以被定义为一个柱状图,在指定时间片上更新和统计汇总。Tracing的大特点就是,它在单次请求的范围内,处理信息。任何的数据、元数据信息都被绑定到系统中的单个事务上。例如:一次调用远程服务的 RPC执行过程;一次实际的 SQL查询语句;一次 HTTP请求的业务性 ID。总结,Metric主要用来进行数据的统计,比如 HTTP请求数的计算。Tracing主要包含了某一次请求的链路数据。
1.1.2. 优势
Skywalking相比较其他的分布式链路监控工具,具有以下特点:社区相当活跃。Skywalking已经进入 apache孵化,目前的 start数已经超过 11K,新版本6.5.0已经发布。开发者是国人,可以直接和项目发起人交流进行问题的解决。Skywalking支持 Java,.NET Core和 Node.JS语言。相对于其他平台:比如 Pinpoint支持Java和PHP,具有较大的优势。探针无倾入性。对比 CAT具有倾入性的探针,优势较大。不修改原有项目一行代码就可以进行集成。探针性能优秀。有网友对 Pinpoint和 Skywalking进行过测试,由于 Pinpoint收集的数据过多,所以对性能损耗较大,而 Skywalking探针性能十分出色。支持组件较多。特别是对 Rpc框架的支持,这是其他框架所不具备的。Skywalking对 Dubbo、gRpc等有原生的支持,甚至连小众的 motan和 sofarpc都支持。
1.1.3. 主要概念
使用如下案例来进行 Skywalking主要概念的介绍,Skywalking主要概念包含:
- 服务(service)
- 端点(endpoint)
- 实例(instance)
上图中,我们编写了用户服务,这是一个 web项目,在生产中部署了两个节点:192.168.1.100和192.168.1.101。用户服务就是 Skywalking的服务(Service),用户服务其实就是一个独立的应用(Application),在 6.0之后的 Skywalking将应用更名为服务(Service)。用户服务对外提供的 HTTP接口/usr/queryAll就是一个端点,端点就是对外提供的接口。192.168.1.100和 192.168.1.101这两个相同服务部署的节点就是实例,实例指同一服务可以部署多个。
1.1.4. 开发需要注意的问题
框架支持接入skywalking 作为链路监控,同时对于服务器资源不足的客户,也可以生成自定义的traceId(当然这种自定义的模块除了 能把日志串联起来,其他功能是没有的)
1、使用skywalking
增加配置luna.framework.starter.apm.skywalking.enable=true
2、使用自定义traceid
增加配置luna.framework.starter.apm.luna-trace.enable=true
skywalking和自定义的traceId只能使用一个,默认开启的是skywalking,且两个只能有一个enable为true。一旦开启了自定义的traceId,skywalking的功能将失效。
1.2. 管理页面使用
Skywalking的管理页面主要用于监控整个系统的状态,当出现问题时,可以快速的了解系统当前的情况,问题可能的原因。
1.2.1. 服务监控
Skywalking可以监控服务的状态,当系统出现问题时,可以从一些关键参数,如延迟、请求成功率来快速定位问题出现的服务。
服务监控管理页面可以看到服务请求的整体状态:
1.2.2. 链路监控
链路监控处可以看到请求的具体耗时,请求的整体链路,可以快速帮助我们定位问题。
关于请求的链路有四种视图,列表、树结构、表格和 统计,可以清晰的看到整个请求链路的状态
1.2.3. 实例监控
实例监控可以监控到具体的实例,也可以看到JVM占用的情况,当请求变慢等特殊情况出现时,可以通过分析实例JVM数据,辅助定位问题原因。
1.2.4. 端点监控
端点监控和上面的监控情况一致,可以帮助我们定位系统变慢等问题的原因。
如下,可以看到各个端点的一些数据: