前言

如今分布式、微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐;所以就急需一个分布式链路追踪系统,方便快速定位异常节点,从而针对性的处理问题。比较主流的APM(Application Performance Management)系统有SkyWalking、Zipkin、PinPoint、Cat等,这里就先说说SkyWalking,其他的后续再补上。

APM系统当然不仅仅只是链路追踪,还可以根据各种性能指标分析应用程序及其运行环境,以便在发生故障的时候能快速定位及解决问题。

正文

1. SkyWalking简介

SkyWalking 是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施(如数据库)的数据,它还提供了优秀的可视化界面。SkyWalking 也是一种现代 APM,专为云原生、基于容器的分布式系统而设计

1.1 常用术语

在SkyWalking中会经常提到服务、服务实例和端点,这里就先来了解一下:

  • 服务:通俗一点理解就是一个应用程序;比如订单服务API。
  • 服务实例:服务组中每个单独运行的节点称为一个实例,一个服务可以对应多个服务实例(集群); 如:一个订单服务可以集群部署好几个节点,这些节点就称为服务实例;
  • 端点:请求服务的路径,如:Http Url地址或是gRPC请求地址(gRPC定义的服务类+方法名);

通俗理解,如下图:

1.2 理解架构

SkyWalking 主要分为四个部分:探针、平台后端、存储和 UI,如下图:

  • 探针:专门用于收集数据,并按照SkyWalking的要求格式化对应的数据。
  • 平台后端:对收集来的数据进行聚合、分析及流处理
  • 存储:就是数据库,将收集的数据存储起来,方便随时查看和分析;主流的数据库有 ElasticSearch、H2、MySQL、TiDB、InfluxDB等。一般我们会使用ElasticSearch,查询速度杠杠滴。
  • UI:就是提供一个Web界面,可以很方便的查看和分析数据,各种图表形式展示。

理论暂时了解这么多,实操一下更容易理解。

2. 安装

这里就采用Docker的方式进行安装,方便快捷,如果还有小伙伴对Docker不是很了解的,可以看看我整理的Docker系列分享

2.1 安装ElasticSearch

这里用到的存储是ElasticSearch,需要提前安装,执行如下命令:

 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 --restart always -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx521m" elasticsearch:6.7.2

命令解析:

  • -p 9200:9200 -p 9300:9300 分别让主机端口9200、9300和启动容器的端口做映射;
  • -e "discovery.type=single-node" 单节点运行;
  • -e ES_JAVA_OPTS="-Xms64m -Xmx521m" 由于我云服务器的内存比较小,所以设置了一个环境变量ES_JAVA_OPTS来配置使用的内存:最小64m,最大521m,否则内存不够用,启动不起来。
2.2 安装SkyWalking的后台服务端(skywalking-oap),执行如下命令:
 docker run --name skywalking-oap --restart always -p 1234:1234 -p 11800:11800 -p 12800:12800 -d --link elasticsearch:elasticsearch -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 apache/skywalking-oap-server:8.3.0-es6

命令解析:

  • -p 1234:1234 -p 11800:11800 -p 12800:12800 分别让主机端口1234、11800、12800和启动容器的端口做映射; 11800是对接应用程序的; 12800是用来对接SkyWalking的UI数据的。
  • --link elasticsearch:elasticsearch 代表和上一步启动elasticsearch网络链接起来,可以通过容器名访问对应服务,注意容器名和上一步一致;
  • -e SW_STORAGE=elasticsearch 设置SkyWalking的存储方式为elasticsearch;
  • -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 配置连接elasticsearch的地址;
2.3 安装SkyWalking的UI界面(skywalking-ui),执行如下命令
 docker run --name skywalking-ui --restart always -p 8080:8080 --link skywalking-oap:skywalking-oap -d -e SW_OAP_ADDRESS=skywalking-oap:12800 apache/skywalking-ui:6.6.0

命令解析:

  • -p 8080:8080 代表主机端口8080和容器端口8080做映射;
  • --link skywalking-oap:skywalking-oap 代表和上一步启动skywalking-oap网络链接起来,可以通过容器名访问对应服务,注意容器名和上一步一致;
  • -e SW_OAP_ADDRESS=skywalking:12800 设置UI调用的API地址,就是上一步启动动SkyWalking后端地址,端口为12800;

接下来如果能访问暴露的端口就代表环境安装好了,如下:

到这环境就搞好了,剩下就是项目集成了,以下还是搞两个API来测试一把。

注: 在搭建环境时要注意elasticsearch、skywalking-oap-server、skywalking-ui版本问题,否则很容易掉坑; 就比如 skywalking-oap-server 设置环境变量SW_STORAGE=elasticsearch 时,只能连接elasticsearch6 等等这种细节。

3. 项目集成SkyWalking

3.1 先安装一个SkyWalking命令行工具

这个命令行工具会快速生成配置文件,执行如下命令安装:

 # 全局安装这个工具,后续直接用就行
dotnet tool install -g SkyAPM.DotNet.CLI

安装一次就行,如果已经安装,就可以跳过此步骤。

3.2 创建项目,并引入SkyAPM.Agent.AspNetCore包

这个包是专门为.NetCore开发的探针。

3.3 注册服务,配置环境变量
  • 在Startup文件中注册服务

  • 配置环境变量

    这里方便测试,直接在项目中的launchSettings.json中配置就行,但如果是发布生产环境,一定要在对应环境配置环境变量。

3.4 执行SkyWalking命令生成配置文件

在项目根目录下执行如下命令

 dotnet skyapm config MySkyWalkingDemoTest 192.168.xxx.xxx:11800
  • MySkyWalkingDemoTest 是服务名;
  • 192.168.xxx.xxx:11800 是SkyWalking后台服务的地址,就是我们2.2步骤搭建的地址。根据真实需要配置IP就行。

命令执行完成后,会在项目根目录下生成skyapm.json文件,可以适当根据需要更改配置内容;

默认情况下skyapm.json文件只要更新都会复制到打包目录下,保险起见,可以右键->属性,将这个文件设置其为始终复制或如果较新则复制。

3.5 启动项目看效果

SkyWalking几乎不嵌入任何代码,直接运行代码,现在就可以将API服务进行跟踪和监控了。如下图:

看看SkyWalking界面展示:

可以进入追踪界面看具体请求信息:

注:条件时间注意时区,往前设置时间; 其实这里可以在启动搭建环境的时候设置时区。

点击树形的请求可以看详情:

3.6 多加一个API服务,测测调用链

新建一个项目SkyWalkingDemoTest22222,端口以5100启动,其他不变;这里没有集成SkyWalking,如果需要往下监控,同以上步骤集成即可;

然后简单修改一下SkyWalkingDemoTest项目的接口,如下:

先运行SkyWalkingDemoTest22222,再运行SkyWalkingDemoTest,执行完成之后,可以去SkyWalking界面中看看追踪信息,如下:

也可以通过拓扑图看到效果:

点击对应的节点还能显示对应的指标数据。

参考地址:

代码案例地址:https://gitee.com/CodeZoe/microservies-demo/tree/main/SkyWalkingDemo

总结

关于SkyWalking的初体验先说这么多,对于服务间通信复杂的系统,有了这个是不是就清晰多了,定位也就容易很多。下一篇再来看看数据库的指标及如何配置告警,关注“Code综艺圈”,和我一起学习吧;

分布式/微服务必配APM系统,SkyWalking让你不迷路的更多相关文章

  1. APM系统SkyWalking介绍

    公司最近在构建服务化平台,需要上线APM系统,本篇文章简单的介绍SkyWalking APM APM全称Application Performance Management应用性能管理,目的是通过各种 ...

  2. 开源APM系统skywalking介绍与使用

    介绍 SkyWalking 创建与2015年,提供分布式追踪功能.从5.x开始,项目进化为一个完成功能的Application Performance Management系统.他被用于追踪.监控和诊 ...

  3. .netcore加入APM系统 SkyWalking

    安装环境:windows 2016 必要条件: JDK8+ Elasticsearch 5.x(注:目前不支持es6) 8080,10800,11800,12800 端口不被占用 下载skywalki ...

  4. 开源APM系统 HttpReports 在 .Net Core的应用

    前言 简单说明下,APM全称Application Performance Management应用性能管理,通过各种收集请求数据,同时搭配Dashboard以实现对应用程序性能管理和故障管理的系统化 ...

  5. 分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起~~~

    前言 在真实的项目中,不管是功能日志.错误日志还是异常日志,已经是项目的重要组成部分.在原始的单体架构,通常看日志的方式简单粗暴,直接登录到服务器,把日志文件拷贝下来进行分析:而如今分布式.微服务架构 ...

  6. 在spring boot中三分钟上手apache顶级分布式链路追踪系统skywalking

    原文:https://juejin.im/post/5cd10e81e51d453b560f2d53 skywalking在apache里全票通过成为了apache顶级链路追踪系统 项目地址:gith ...

  7. 手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)

    前言 什么是APM?全称:Application Performance Management 可以参考这里: 现代APM体系,基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)的体 ...

  8. 微服务、分库分表、分布式事务管理、APM链路跟踪性能分析演示项目

    好多年没发博,最近有时间整理些东西,分享给大家. 所有内容都在github项目liuzhibin-cn/my-demo中,基于SpringBoot,演示Dubbo微服务 + Mycat, Shardi ...

  9. ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统

    为什么使用 Jwt 最近,移动开发的劲头越来越足,学校搞的各种比赛都需要用手机 APP 来撑场面,所以,作为写后端的,很有必要改进一下以往的基于 Session 的身份认证方式了,理由如下: 移动端经 ...

随机推荐

  1. 剑指offer 计划1(栈与队列)---java

    1.1.题目1 剑指 Offer 09. 用两个栈实现队列 1.2.解法 解法如题目所说.定义两个栈.这里假设第一个栈为a,第二个栈为b. 实现两个函数增加尾和删除头. 增加即直接push入第一个栈. ...

  2. Longhorn 云原生容器分布式存储 - Python Client

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  3. Redis++:Redis 内存爆满 之 淘汰策略

    前言: 我们的redis使用的是内存空间来存储数据的,但是内存空间毕竟有限,随着我们存储数据的不断增长,当超过了我们的内存大小时,即在redis中设置的缓存大小(maxmeory 4GB),redis ...

  4. 20210712考试-2021noip11

    这篇总结比我写的好多了建议直接去看 T1 简单的序列 考场:愣了一会,想到以最大值分治.每次枚举最大值两侧更小的区间,st表预处理前缀和和最大值,用桶统计答案. 注意分治时要去掉最大值. const ...

  5. Docker 面试宝典

    Docker 是什么? 是实现容器技术的一种工具 是一个开源的应用容器引擎 使用 C/S 架构模式,通过远程API 来管理 可以打包一个应用及依赖包到一个轻量级.可移植的容器中 容器是什么? 对应用软 ...

  6. openswan发送状态机分析

    openswan发送状态机分析 1. 函数调用关系 2. 函数说明 如果按用户空间.内核空间划分的话,此部分代码更多是运行在内核空间的. 2.1 ipsec_tunnel_init_devices() ...

  7. Redis集群的搭建及与SpringBoot的整合

    1.概述 之前聊了Redis的哨兵模式,哨兵模式解决了读的并发问题,也解决了Master节点单点的问题. 但随着系统越来越庞大,缓存的数据越来越多,服务器的内存容量又成了问题,需要水平扩容,此时哨兵模 ...

  8. Tensorflow保存神经网络参数有妙招:Saver和Restore

    摘要:这篇文章将讲解TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的神经网络. 本文分享自华为云社区<[Python人工智能] 十一. ...

  9. lua中的sleep实现

    这篇文章主要介绍了Lua中实现sleep函数功能的4种方法,本文讲解了在一个死循环中设置一个跳出条件方法.调用系统的sleep函数法.Windows下ping命令法.socket库中select函数法 ...

  10. 使用 elementUI 树形控件Tree 编辑数据

    操作新增/编辑功能时初始化数据: 应用属性 default-checked-keys 给Tree节点赋默认值(赋值数据为节点数组Arr)前,应先清空数组Arr,并且配合使用 this.$refs.tr ...