分布式/微服务必配APM系统,SkyWalking让你不迷路
前言
如今分布式、微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐;所以就急需一个分布式链路追踪系统,方便快速定位异常节点,从而针对性的处理问题。比较主流的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文件中注册服务
image-20211017235044948
配置环境变量
这里方便测试,直接在项目中的launchSettings.json中配置就行,但如果是发布生产环境,一定要在对应环境配置环境变量。
image-20211017234925741
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://skywalking.apache.org/
开源地址:https://github.com/apache/skywalking
.Net探针:https://github.com/SkyAPM/SkyAPM-dotnet
代码案例地址:https://gitee.com/CodeZoe/microservies-demo/tree/main/SkyWalkingDemo
总结
关于SkyWalking的初体验先说这么多,对于服务间通信复杂的系统,有了这个是不是就清晰多了,定位也就容易很多。下一篇再来看看数据库的指标及如何配置告警,关注“Code综艺圈”,和我一起学习吧;
分布式/微服务必配APM系统,SkyWalking让你不迷路相关推荐
- 开源APM系统skywalking介绍与使用
介绍 SkyWalking 创建与2015年,提供分布式追踪功能.从5.x开始,项目进化为一个完成功能的Application Performance Management系统. 他被用于追踪.监控和 ...
- 测试使用skywalking_开源APM系统skywalking介绍与使用
介绍 SkyWalking 创建与2015年,提供分布式追踪功能.从5.x开始,项目进化为一个完成功能的Application Performance Management系统. 他被用于追踪.监控和 ...
- skywalking(1) 基于opentracing规范的APM系统
skywalking是: 基于opentracing规范的APM系统 skywalking解决了什么问题? skywalking解决微服务架构下,多服务直接复杂的调用关系 了解dapper,分布式链路 ...
- skywalking 安装_分布式监控系统SkyWalking
分布式监控系统SkyWalking 公司微服务架构用了有些时间了,微服务架构下的链接调用问题也越来越明显.人员流失,架构改造等原因,想人工维护架构图是不大可能了.常见的APM工具有cat.zipkin ...
- 基于skywalking搭建APM系统入门级
当企业应用进入分布式微服务时代,应用服务依赖会越来越多,skywalking可以很好的解决服务调用链路追踪的问题,而且基于java探针技术,基本对应用零侵入零耦合. skywalking是什么,有什么 ...
- 云环境下大规模分布式计算数据感知的调度系统
云环境下大规模分布式计算数据感知的调度系统 刘汪根1, 郑淮城1, 荣国平2 1 星环信息科技(上海)有限公司,上海 200233 2 南京大学软件学院,江苏 南京 210093 摘要:介绍了新的调度 ...
- 万字长文剖析 APM 系统?如何设计与实现?
- 前言 - 本文来说说什么是 APM 系统,也就是大家平时说的监控系统,以及怎么实现一个 APM 系统.因为一些特殊的原因,我在文中会使用 Dog 作为我们的系统名称进行介绍. 我们为 ...
- 带你打造一套APM系统
APM 是 Application Performance Monitoring 的缩写,监视和管理软件应用程序的性能和可用性.应用性能管理对一个应用的持续稳定运行至关重要.所以这篇文章就从一个 iO ...
- 带你打造一套APM系统(二)
2.1. Mach 层异常处理 大体思路是:先创建一个异常处理端口,为该端口申请权限,再设置异常端口.新建一个内核线程,在该线程内循环等待异常.但是为了防止自己注册的 Mach 层异常处理抢占了其他 ...
最新文章
- 独家 | 这15个最热门的GitHub库你不可错过!
- 转行学python后悔了-你是多少岁转行的?转行后你后悔了吗?
- asp.net DBHelper类
- leetcode 44 字符匹配
- 换个视角看中台的对与错
- linux网络服务偶尔失效,判断linux下的网络服务是否正常启动
- python社区版可以用库么_应用Python,你不但能够得到出色的小区适用和普遍的库集...
- Node.js之------模块篇
- 利用HTML+JS+CSS实现简单的网页计算器,附html所有源代码,可直接黏贴运行
- 4.Prometheus 监控技术与实践 --- 服务发现
- SAP-PP后台配置(第二部分)
- Atitit 云计算体系树.docx Atitit 云计算之道 attilax著 艾龙 著 serverless bomb 1. 什么才是云计算的根本特征..	2 2. 云计算体系	2 3. “云
- 进击的巨人和枪王黑泽两部漫画的观后感
- git 公钥配置时问题解决记录
- 【ReID】Harmonious Attention Network for Person Re-Identification
- nsfw什么颜色_“ NSFW”是什么意思,以及如何使用它?
- 图像处理 直方图均衡化
- 莫比乌斯进阶:bzoj 2693 jzptab(Mobius)
- 【黑帽大牛】浅谈SEO快排系统对网站排名优化真的有帮助吗?【精品】
- MFC_改变窗口大小,随着鼠标的拖动改变
热门文章
- Tomcat 下 Memcached 集群与 Terracotta 集群比较
- nodejs安装express框架
- C语言程序设计第三次作业
- 步步为营-11-ListT泛型的简单练习
- html标签缺省(自带)样式大全
- 第二节 安装CentOS
- [转]Myeclipse9引入easy_ui时,其中的部分js文件报错
- arguments.callee()事例 参数检验
- CSS/DIV网页设计视频教程目录【转】
- 用SmarterFox替换Internet Explorer的“加速器”