微服务:链路追踪组件skywalking入门

简介

  1. 国产开源组件,用于监视分布式系统应用的性能、链路追踪等

  2. 早期微服务架构的链路追踪的标配组件为 sleuth + zipkin,为Twitter开源

  3. 其他链路跟踪产品:Pinpoint-韩国人、CAT-大众点评

  4. skywk 基于Java探针+字节码增强技术实现,客户端通过gRPC接入

  5. 对比看,skywk探针对业务系统吞吐量影响最小,且基本做到对业务零侵入

  6. 核心功能特点:

    • 支持语言探针和service mesh获得监控数据
    • 探针语言支持Java、.Net core 、Node JS
    • 轻量级,无需大量服务器资源
    • 模块化,UI、存储、集群管理支持多种可选
    • 支持告警
  7. 整体架构

    • 主要包括:agent、OAP、Storage、UI四个部分

  1. 三种探针机制

    • Agent、基于ByteBuddy字节码增强技术实现,通过jvm agent参数加载,应用运行时,拦JIE指定方法来收集数据
    • SDK,显示调用收集数据,对应用有侵入
    • Service Mesh,通过网络代理收集数据

使用

下载安装

  1. 下载:http://skywalking.apache.org/downloads/
  2. 本地学习可以下载支持H2/MySQL等存储的tar包
  3. 解压后,大概浏览下目录,基本一目了然
  4. 默认使用内嵌H2数据库,本地可以先不用修改
  5. 启动:./bin/startup.sh

  1. 默认会监控3个端口:11800(收集监控数据)、12800(接受前端请求)、8080(UI)
  2. 修改UI端口:webapp/webapp.yml
  3. 启动后,访问8080端口

应用配置(通过Agent)

  1. 准备一个springboot应用
  2. idea中配置JVM参数
-javaagent:D:\data\soft\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-DSW_AGENT_NAME=ebs-base-service
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.2.8:11800
  1. 启动

  1. 如果使用 jar启动,配置参数
java -javaagent:D:\data\soft\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -DSW_AGENT_NAME=springboot-skywalking-demo -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.2.8:11800 -jar springboot-base-service.jar
  1. 如果配置成shell启动脚本
#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot-base-service 
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.2.8:11800
export JAVA_AGENT=-javaagent:/usr/local/skywalking-agent.jar 
java $JAVA_AGENT -jar springboot-base-service.jar
  1. 多个微服务的配置如上一样,一个个都加上agent配置即可

  1. 对于网关gateway服务,链路跟踪不显示问题,需要手动拷贝下拷贝agent/optional-plugins目录下的gateway.jar 到 agent/plugins目录下

  1. 告警通知配置在config/alarm-settings.yml中配置,支持网络钩子回调
  2. 持久化支持:MySQL、ES,一般生产环境都会使用es

自定义扩展

  1. 引入依赖
<!-- SkyWalking 工具类 -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>8.4.0</version>
</dependency>
  1. 使用
    @Trace(operationName = "获取用户信息")
    @Tags({@Tag(key = "module", value = "user"), @Tag(key = "userId", value = "arg[0]")})
    @GetMapping("user/get")
    @ApiOperation(value = "测试跨服务调用获取用户信息", notes = "跨服务调用获取用户信息,传入用户ID")
    public R<UserVO> callBaseUserApi(@RequestParam(value = "id") Long id) {

        log.info("测试跨服务调用获取用户信息");

        TraceContext.putCorrelation("name", "qinchen");
        String traceId = TraceContext.traceId();
        log.info("本次请求的 traceId = {}", traceId);
    }
  1. 还支持集成日志框架,通过grpc上报日志,自行百度,感觉没啥用,一般用loki或elk记录 log 比较专业

集群部署

  1. 需要将oap服务注册到nacos上,cluster.selector 配成 nacos即可,默认为standalone
  2. 存储使用es集群
  3. UI可以集群,用nginx反代即可
  4. 不过链路追踪这种监控服务部署集群意义不大,土豪公司可以考虑
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值