1、简介

Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持,H2、Mysql、Elasticsearch、TiDB等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。

2、同款产品对比

分布式链路监控 分布式链路追踪工具_java

3、架构介绍

分布式链路监控 分布式链路追踪工具_java_02

  • Skywalking agent和业务端绑定在一起,负责收集各种监控数据
  • Skywalking oapservice是负责处理监控数据,接受agent的数据并存储在数据库中,接受来自UI的请求,查询监控数据。
  • Skywalking UI提供给用户,展现各种监控数据和告警。

默认配置:

分布式链路监控 分布式链路追踪工具_skywalking_03

4、环境搭建
4.1 资源下载

分布式链路监控 分布式链路追踪工具_数据_04

老版本中 amp和agent是在一个包下,新版本中需要分别下载。

4.2 apm结构

分布式链路监控 分布式链路追踪工具_分布式链路监控_05

4.3 agent结构

分布式链路监控 分布式链路追踪工具_java_06

5、修改配置,启动skywalking
5.1 修改配置

分布式链路监控 分布式链路追踪工具_分布式链路追踪_07


编辑application.yml


分布式链路监控 分布式链路追踪工具_分布式链路追踪_08

5.2 启动

分布式链路监控 分布式链路追踪工具_分布式链路监控_09


注意:由于使用mysql存储,所以需要引入mysql驱动到libs中。

分布式链路监控 分布式链路追踪工具_分布式链路追踪_10


启动结果查看:

分布式链路监控 分布式链路追踪工具_分布式链路监控_11


UI服务启动:

分布式链路监控 分布式链路追踪工具_java_12

5.3 自动创建数据库


分布式链路监控 分布式链路追踪工具_数据_13

总共创建476张表。

5.4 UI访问

分布式链路监控 分布式链路追踪工具_分布式链路监控_14

6、接入业务代码
6.1 启动参数配置
-javaagent:D:\JAVA_SPACE\JAVA_TOOL\apache-skywalking-apm-bin\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=simonking-server
-Dskywalking.collector.backend_service=127.0.0.1:11800

-javaagent: 指定探针(代理)的绝对路径
-Dskywalking.agent.service_name:覆盖agent.config中的配置文件,指定服务(应用)的名称
-Dskywalking.collector.backend_service :覆盖agent.config中的配置文件,指定收集信息的地址

6.2 官方文档说明

分布式链路监控 分布式链路追踪工具_数据_15

参数也可以在配置文件中配置,但是配置文件是硬编码,建议配置在启动参数中:

分布式链路监控 分布式链路追踪工具_分布式链路监控_16


分布式链路监控 分布式链路追踪工具_分布式链路监控_17


覆盖原有配置的说明文档:

分布式链路监控 分布式链路追踪工具_java_18

7、业务访问
7.1 服务的注册

分布式链路监控 分布式链路追踪工具_分布式链路追踪_19

启动三个服务:euraka,skywalking-service、skywalking-admin

7.2 请求访问

链接:http://127.0.0.1/foo/15/getUser拓扑图:

分布式链路监控 分布式链路追踪工具_java_20


追踪:

分布式链路监控 分布式链路追踪工具_分布式链路追踪_21


监控信息:

分布式链路监控 分布式链路追踪工具_分布式链路监控_22

8、其他

Skywalking还可以提供报警、日志的统一链路等,需要引入对应的依赖并开发。

9、统计

统计应用/服务调用的具体信息,需要了解关键的库表。

service_traffic:服务流量(服务的记录去重)

分布式链路监控 分布式链路追踪工具_skywalking_23

endpoint_traffic: 端点流量(请求的记录去重)

分布式链路监控 分布式链路追踪工具_java_24



segment:分段表(记录每一次请求的信息)

分布式链路监控 分布式链路追踪工具_java_25



endpoint_sidecar_internal_req_latency_nanos:端点分段统计请求,分别根据分钟和小时统计请求量,其中entity_id就是endpoint_traffic.id

分布式链路监控 分布式链路追踪工具_分布式链路监控_26


统计的sql样例:

SELECT
  e.`name` '请求路径/方法名',
	c.`name` '应用/服务',
  s.latency '耗时ms',
  s.time_bucket '请求时间'
FROM segment s
INNER JOIN endpoint_traffic e ON s.endpoint_id = e.id
INNER JOIN service_traffic c ON c.service_id = s.service_id
WHERE e.`name` = 'GET:/auctionCenter/citys';

返回结果:

分布式链路监控 分布式链路追踪工具_数据_27