分布式链路追踪Skywalking

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)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。
官网地址:https://skywalking.apache.org/

2、同款产品对比

分布式链路追踪Skywalking_第1张图片

3、架构介绍

分布式链路追踪Skywalking_第2张图片

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

默认配置:
分布式链路追踪Skywalking_第3张图片

4、环境搭建

4.1 资源下载

分布式链路追踪Skywalking_第4张图片老版本中 amp和agent是在一个包下,新版本中需要分别下载。

4.2 apm结构

分布式链路追踪Skywalking_第5张图片4.3 agent结构

分布式链路追踪Skywalking_第6张图片

5、修改配置,启动skywalking

5.1 修改配置

分布式链路追踪Skywalking_第7张图片
编辑application.yml

分布式链路追踪Skywalking_第8张图片

5.2 启动

分布式链路追踪Skywalking_第9张图片
注意:由于使用mysql存储,所以需要引入mysql驱动到libs中。
分布式链路追踪Skywalking_第10张图片
启动结果查看:
分布式链路追踪Skywalking_第11张图片
UI服务启动:分布式链路追踪Skywalking_第12张图片5.3 自动创建数据库

分布式链路追踪Skywalking_第13张图片

总共创建476张表。

5.4 UI访问

分布式链路追踪Skywalking_第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 官方文档说明

分布式链路追踪Skywalking_第15张图片参数也可以在配置文件中配置,但是配置文件是硬编码,建议配置在启动参数中:
图片.png
图片.png
覆盖原有配置的说明文档:

分布式链路追踪Skywalking_第16张图片7、业务访问

7.1 服务的注册

分布式链路追踪Skywalking_第17张图片启动三个服务:euraka,skywalking-service、skywalking-admin

7.2 请求访问

链接:http://127.0.0.1/foo/15/getUser
拓扑图:
分布式链路追踪Skywalking_第18张图片
追踪:
分布式链路追踪Skywalking_第19张图片
监控信息:
分布式链路追踪Skywalking_第20张图片

8、其他

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

9、统计

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

service_traffic:服务流量(服务的记录去重)
分布式链路追踪Skywalking_第21张图片endpoint_traffic: 端点流量(请求的记录去重)
分布式链路追踪Skywalking_第22张图片

segment:分段表(记录每一次请求的信息)
分布式链路追踪Skywalking_第23张图片

endpoint_sidecar_internal_req_latency_nanos:端点分段统计请求,分别根据分钟和小时统计请求量,其中entity_id就是endpoint_traffic.id
分布式链路追踪Skywalking_第24张图片
统计的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';

返回结果:
分布式链路追踪Skywalking_第25张图片

你可能感兴趣的:(框架篇,skywalking,java,分布式链路追踪)