【SkyWalking】从零接入全链路追踪解决方案

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,本次分享下从零接入SkyWalking。

SkyWalking基本结构


  • 探针
  1. 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式.
  2. 基于语言的原生代理
  3. 服务网格探针
  4. 第三放打点类库
  • 平台后端,
  1. 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。
  2. 分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。
  3. 甚至可以使用 Observability Analysis Language 对原生度量指标用于扩展度量的计量系统 自定义聚合分析。
  • 存储
  1. 通过开放的插件化的接口存放 SkyWalking 数据.
  2. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现。
  • UI
  1. 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

SkyWalking项目结构


  • agent
  1. skwwalking-agent.jar 代理服务jar包
  2. config: 代理服务启动时使⽤的配置⽂件
  3. plugins: 包含多个插件,代理服务启动时会加载该⽬录下的所有插件(实际上时各种jar包) optional-plugins:可选插件,当需要⽀持某些功能时,⽐如 Spring Cloud Gateway,则需要把对 应的jar包拷⻉到plugins⽬录下;
  • webapp: UI前端(web监控⻚⾯)的jar包配置⽂件
  1. webapp.yml : 默认配置启动UI时访问端⼝ 8080,需要更改
  2. listOfServers表示接收前端请求端⼝12800
  • oap-libs:
  1. 后台应⽤的jar包,以及它的依赖jar包,⾥⾯有⼀个server-starter-*.jar就时对应的启动程序
  • config:启动后台应⽤程序的配置⽂件
  1. application.yml:可配置存储数据库类型、⾼可⽤注册服务等 ,需要修改存储方式改为ES存储
  • bin: 各种启动脚本,⼀般使⽤脚本startup.*来启动web⻚⾯和对应的后台应⽤;
  1. oapServer.*: 默认使⽤的后台程序的启动脚本;(使⽤的默认模式启动,还⽀持)
  2. oapServerInit.*: 使⽤init模式启动,在此模式下,OAP服务器启动以执⾏初始化⼯作,然后退出
  3. oapServerNoInit.*:使⽤no init模式启动,在此模式下,OAP服务器不进⾏初始化
  4. webappService.*: UI前端的启动脚本
  5. startup.*:组合脚本,同时启动oapServer.* ,webappService.*脚本

SkyWalking搭建

搭建版本8.6.0-es

  1. 下载链接:https://archive.apache.org/dist/skywalking/8.6.0/
  2. 首先需要修改启动端口
vi apache-skywalking-apm-bin-es7/webapp/webapp.yml,修改server.port(原8080)
  1. 修改存储类型
vi apache-skywalking-apm-bin-es7/config/application.yml

image.png

image.png

  1. sh apache-skywalking-apm-bin-es7/bin/startup.sh  启动
  2. 服务日志存储到apache-skywalking-apm-bin-es7/logs中
  3. 启动成功后会启动两个服务,⼀个是skywalking-oap-server,⼀个是skywalking-web-ui
  4. skywalking-oap-server服务启动后会暴露11800 和 12800 两个端⼝,分别为收集监控数据的端⼝11800和接受前端请求的端⼝12800


Java服务接入SkyWalking

  • 使用Java agent方式监控服务


export SW_AGENT_NAME=sky_hora
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #skywalking Collector地址
export SW_AGENT_SPAN_LIMIT=2000 #配置链路最大Span数量,默认为300
export JAVA_AGENT=-javaagent:../apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar   #agent包地址
nohup java $JAVA_AGENT -jar *.jar &
  • 将上述命令写入到一个sheel脚本里,直接sh启动即可
  • 控制台打印tracid,配置logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 引入springboot 默认的 logback xml 配置文件 (springboot default log config)-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志的格式化-->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<!-- 来源于defaults.xml 可以全局查找文件找到springboot中的该配置文件 如果无需更改 只需要引入>${CONSOLE_LOG_PATTERN}-->
<!-- 我们需要记录traceId 所以需要加上[%tid] 加在下面任意一个不破坏格式的地方-->
<!--source from springboot logback defaults.xml,default:${CONSOLE_LOG_PATTERN}
but we need to note the traceId ,add [%tid]-->
<!-- https://github.com/apache/skywalking/tree/master/docs/en/setup/service-agent/java-agent -->
<Pattern>-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint}%clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} [%tid] %clr(---){faint}%clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint}%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</Pattern>
<!-- <Pattern>${CONSOLE_LOG_PATTERN:%clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID:- }){magenta} [${spring.application.name}] %clr([%10.10t]){faint}[%36.36X{trace_id}] %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}</Pattern>-->

</layout>

</encoder>
</appender>

<!-- grpc方式将traceId推送至skywalking-->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>


<!--设置appender -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="grpc-log"/>
</root>

</configuration>

指标仪表盘

image.png

拓扑图

image.png

日志监控

image.png

image.png

相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
存储 运维 监控
链路追踪Skywalking快速入门1
链路追踪Skywalking快速入门1
283 1
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
1225 0
分布式链路追踪- SkyWalking使用手册
|
6月前
|
Java 微服务
skywalking链路追踪时忽略指定异常
skywalking链路追踪时忽略指定异常
|
6月前
|
Java 微服务
skywalking全链路追踪
skywalking全链路追踪
|
JSON 运维 监控
链路追踪Skywalking应用实战 2
链路追踪Skywalking应用实战
250 0
|
监控 Java BI
链路追踪Skywalking应用实战 1
链路追踪Skywalking应用实战
285 0
|
存储 监控 Java
链路追踪Skywalking快速入门2
链路追踪Skywalking快速入门2
274 0
|
Apache
skywalking04 - skywalking自定义链路追踪@Trace
skywalking04 - skywalking自定义链路追踪@Trace
491 0
|
存储 监控 NoSQL
【微服务】分布式如何利用Skywalking实现链路追踪与监控?
微服务下的分布式如何实现链路追踪和监控。
980 1
【微服务】分布式如何利用Skywalking实现链路追踪与监控?
|
存储 监控 Java
链路追踪自从用了SkyWalking,睡的真香!
链路追踪自从用了SkyWalking,睡的真香!