背景

旁友,你的线上服务是不是偶尔来个超时,或者突然抖动一下,造成用户一堆反馈投诉。然后你费了九牛二虎之力,查了一圈圈代码和日志才总算定位到问题原因了。或者公司内部有链路追踪系统,虽然可以很轻松地通过监控判断问题出现的原因,但是对其中的逻辑完全摸不着头脑。只能上网搜索一番。

旁友,skywalking分布式链路追踪框架了解一下。

有的旁友会有疑惑,我的Spring Boot 就是一个单体应用么,不需要链路追踪?有问题直接翻日志就行了,但是即使是一个 Spring Boot 单体应用,也会和以下服务打交道:

  • 关系数据库,例如说 MySQL、PostgreSQL 等等。
  • 缓存数据库,例如说 Redis、Memcached 等等。
  • 外部三方服务,例如说微信公众号、微信支付、支付宝支付、短信平台等等

可见,仅仅一个 Spring Boot 单体应用,就已经涉及到分布在不同进程中的服务了。此时,就非常有必要用上skywalking。例如说,线上某个 接口访问非常慢,用SkyWalking 可以定位是MySQL 查询比较慢呢,还是调用的第三方服务比较慢。

而在分布式服务中,各个大厂内部系统成百上千的,链路关系更加复杂。比如你在外卖平台上的一个点击请求可能跨了内部几十个Java应用了,在这么长的链路里去排查问题,没有好使的工具怎么行呢。如图是当前分布式系统的现状,图片来源:鹰眼下的淘宝分布式调用跟踪系统介绍

根据上图,我们设想:

1.系统中有可能每天都在增加新服务或删除旧服务,也可能进行升级,当系统出现错误,我们如何定位问题?

2.当用户请求时,响应缓慢,怎么定位问题?

3.服务可能由不同的编程语言开发,1、2 定位问题的方式,是否适合所有编程语言?

Skywalking框架

1.介绍

SkyWalking 是什么?

官方网址 http://skywalking.apache.org/

skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。

提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

代码无侵入,通信方式采用GRPC,实现方式是java探针,支持告警,JVM监控,支持全局调用统计等等

skywalking的架构参考了谷歌的Dapper框架的论文,Dapper并没有开源,只给了篇论文,感兴趣但又不喜英文文档的旁友可以看看论文的中文翻译Dapper,大规模分布式系统的跟踪系统

整体架构如下:

  • Tracing Metrics Logging :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。Java应用通常使用SkyWalking Agent 收集数据
  • SkyWalking OAP :skywalking服务端(Transport layer,Receiver cluster,Aggregator cluster)负责接收 Agent 发送的 Tracing 数据信息,然后进行分析,存储到外部存储器( Storage ),最终提供查询功能。
  • Storage option :Tracing 数据存储。目前支持 ES、H2 多种存储器。我们用ES存储即可 。
  • GUI :负责提供可视化控台,查看链路等
  • Alarm:提供告警功能,这里不展示讲

2.Docker方式搭建Skywalking环境

为了快速搭建环境,避免各种系统、配置环境不同造成踩坑的情况。我们用docker直接创建ElasticSearch、Skywalking-OAP、Skywalking-UI以及ES的管理工具Kibana。这样一套运行环境直接就能用了。话不多说,直接开干

整体架构如下:

用到的工具版本号如下表:

工具 版本号
ElasticSearch 7.14.2
Kibana 7.14.2
skywalking-oap-server 9.1.0
skywalking-ui 9.1.0

其中skywalking的docker-compos.yml运行脚本可以从官方的Github上获取apache/skywalking/docker

脚本需要修改,直接参考我的就行,不懂的参数都有具体说明:

version: '3'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.14.2container_name: elasticsearchports:- 9200:9200- 9300:9300environment:- "cluster.name=elasticsearch"- "bootstrap.memory_lock=true"- "ES_JAVA_OPTS=-Xms256m -Xmx512m"- "discovery.type=single-node"kibana:image: docker.elastic.co/kibana/kibana:7.14.2container_name: kibanadepends_on:- elasticsearchports:- 5601:5601environment:# IP地址为运行电脑的IP地址,Mac上通过 ifconfig en0 命令获取- "elasticsearch.hosts=http://192.168.1.5:9200" skywalking-oap:image: apache/skywalking-oap-server:9.1.0container_name: skywalking-oapdepends_on:- elasticsearchports:- "11800:11800"- "12800:12800"healthcheck:test: [ "CMD-SHELL", "/skywalking/bin/swctl ch" ]interval: 30stimeout: 10sretries: 3start_period: 10senvironment:TZ: Asia/ShanghaiSW_STORAGE: elasticsearchSW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200SW_HEALTH_CHECKER: defaultSW_TELEMETRY: prometheusskywalking-ui:image: apache/skywalking-ui:9.1.0container_name: skywalking-uidepends_on:- skywalking-oaplinks:- skywalking-oapports:# UI界面程序占用的端口- "8080:8080"environment:TZ: Asia/Shanghai# IP地址为运行电脑的IP地址,Mac上通过 ifconfig en0 命令获取SW_OAP_ADDRESS: http://192.168.1.8:12800

2.1 Docker镜像加速

按上述配好docker-compose.yml文件后,命令行到所在目录下执行docker-compose up可以拉起镜像,第一次运行时会下载镜像,docker默认的镜像仓库在国外,所以下载速度和蜗牛一样慢。为了加速下载,需要配置国内的docker镜像

获取国内docker镜像库地址的方法:

  1. 阿里云官方镜像加速,获取加速器地址文档:阿里云官方镜像加速
  2. 网上搜索docker镜像加速,下面是测过有效的公共镜像库
    • 网易云 https://hub-mirror.c.163.com
    • 百度云 https://mirror.baidubce.com

配置方法:

Docker桌面版Preference -> Docker Engine 在Json配置里加上,加好之后重启Docker,然后再重新拉镜像,速度立马快得飞起

猿创征文|链路追踪-Skywalking入门相关推荐

  1. 分布式链路追踪-skywalking入门体验

    背景 旁友,你的线上服务是不是偶尔来个超时,或者突然抖动一下,造成用户一堆反馈投诉.然后你费了九牛二虎之力,查了一圈圈代码和日志才总算定位到问题原因了.或者公司内部有链路追踪系统,虽然可以很轻松地通过 ...

  2. 猿创征文|Android开发入门工具的那些事儿

    今年是我读硕士的第一年,机缘巧合接触到了Android开发并进行了学习.工欲善其事必先利其器,那么在学习Android开发中我也使用到了很多的工具,今天就来记录一下,这些工具使用的场合及其发挥的作用, ...

  3. 猿创征文 | 国产数据库之openGauss的单机主备部署及快速入门

    猿创征文 | 国产数据库之openGauss的单机主备部署及快速入门 一.openGauss介绍 1.openGauss简介 2.openGauss特点 3.openGauss的逻辑架构图 二.环境检 ...

  4. 猿创征文 | 国产数据库实战之TiDB 数据库快速入门

    猿创征文 | 国产数据库实战之TiDB 数据库快速入门 一.系统检查 1.检查系统版本 2.查看本地IP地址 3.TiDB集群介绍 二.快速部署本地测试集群 1.安装 TiUP工具 2.声明全局环境变 ...

  5. 猿创征文|当我在追光 我与光同航--我与Java的技术成长之路

    文章目录 前言 材料转码 初识JAVA 大学建议 1. 参加比赛 2. 坚持创作 3.养成看书的习惯 Java路线 1. java基础 2. 数据库 3. javaWeb 4. 框架 前言 今天借着官 ...

  6. 分布式链路追踪SkyWalking进阶实战之RPC上报和WebHook通知(三)

    目录 1.自定义SkyWalking链路追踪配置 1.1 什么是TraceId 1.2 使用的背景 1.3 编码 2.SkyWalking-RocketBot性能剖析 3.SkyWalking链路追踪 ...

  7. 猿创征文|最长回文子串-力扣

    猿创征文|最长回文子串 [猿创征文]最长回文子串-力扣 ✌字符串快速入门

  8. Admin监控Sleuth链路追踪 skywalking链路追踪

    Admin监控&Sleuth链路追踪,skywalking **Sleuth&Zipkin** 一.Sleuth&Zipkin介绍 二.搭建环境 三.Sleuth入门操作 四. ...

  9. 猿创征文|工作中遇到技术盲区后的自我成长

    猿创征文|工作中遇到技术盲区后的自我成长 1.立场 我是一名python后端开发程序员,在一家创业公司中兢兢业业工作快两年了,从软件架构.开发.测试.部署.运维一手经办,到开发文档.API接口.开发周 ...

最新文章

  1. java工具集_Java 工具集
  2. ios: coreData的NSManagedObject setvalue为null
  3. 解决Mysql读写分离数据延迟
  4. java 监听客户端的退出_Java ServerSocket 手动关闭监听
  5. 奥特曼系列ol服务器名称带怪兽,《奥特曼系列ol》怪兽图鉴 怪兽阵容
  6. QT信号(signal)和槽(slot)问题
  7. Java实现Excel中的NORMSDIST函数和NORMSINV函数
  8. Django Model出现的中文问题
  9. 2021-09-14 if__name__ == ‘__main__‘的用法
  10. 使用Java根据约定格式生成Oracle建表语句
  11. linux远程文件复制,Linux远程复制文件
  12. 【Unity】AvProVideo 实现当前视频播放完毕自动加载下一视频
  13. matlab dsb调制,幅度调制(AM、DSB、SSB、VSB)
  14. matlab用方程的解赋值,Matlab隐式符号方程求解和赋值
  15. 高数 下总复习 完结
  16. 能解决 80% 需求的 10个 CSS动画库
  17. C语言 | 函数参数
  18. Word 自动更新编号(插入题注、交叉引用)
  19. EasyRules动态规则实现
  20. 计算机组成原理指令系统的设计,计算机组成原理与系统设计

热门文章

  1. [css]:css中不支持的字体,如“Barlow Semi Condensed SemiBold”,使用@font-face引入外部字体
  2. Python 动态生成变量
  3. JAVA计算机毕业设计茶叶企业管理系统Mybatis+系统+数据库+调试部署
  4. 微信内使用支付宝支付
  5. TUF GAMING 飞行堡垒7重新装系统,也适用于各类品牌机
  6. C语言静态内存分配与动态内存分配
  7. 简单好用的书签管理器OneNav
  8. 如何将别人Google云端硬盘中的数据进行保存
  9. png、jpg、jpeg、bmp、svg、tiff、webp和gif的优缺点
  10. 从App Lab就一鸣惊人的Gorilla Tag,创始人竟是个电竞选手