分布式链路追踪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、同款产品对比

图片.png

3、架构介绍

图片.png

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

默认配置:
图片.png

4、环境搭建

4.1 资源下载

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

4.2 apm结构

图片.png4.3 agent结构

图片.png

5、修改配置,启动skywalking

5.1 修改配置

图片.png
编辑application.yml

在这里插入图片描述

5.2 启动

图片.png
注意:由于使用mysql存储,所以需要引入mysql驱动到libs中。
图片.png
启动结果查看:
图片.png
UI服务启动:图片.png5.3 自动创建数据库

在这里插入图片描述

总共创建476张表。

5.4 UI访问

图片.png

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 官方文档说明

图片.png参数也可以在配置文件中配置,但是配置文件是硬编码,建议配置在启动参数中:
图片.png
图片.png
覆盖原有配置的说明文档:

图片.png7、业务访问

7.1 服务的注册

图片.png启动三个服务:euraka,skywalking-service、skywalking-admin

7.2 请求访问

链接:http://127.0.0.1/foo/15/getUser
拓扑图:
图片.png
追踪:
图片.png
监控信息:
图片.png

8、其他

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

9、统计

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

service_traffic:服务流量(服务的记录去重)
endpoint_trafficendpoint_traffic: 端点流量(请求的记录去重)
endpoint_traffic

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

endpoint_sidecar_internal_req_latency_nanos:端点分段统计请求,分别根据分钟和小时统计请求量,其中entity_id就是endpoint_traffic.id
endpoint_sidecar_internal_req_latency_nanos
统计的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';

返回结果:
图片.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值