分布式/微服务必配APM系统,SkyWalking让你不迷路

article/2025/10/4 19:03:08

前言

如今分布式、微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐;所以就急需一个分布式链路追踪系统,方便快速定位异常节点,从而针对性的处理问题。比较主流的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界面中看看追踪信息,如下:

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


http://chatgpt.dhexx.cn/article/vcAnY11K.shtml

相关文章

大开眼界,Jenkins 结合 SpringCloud+K8S,打通微服一条龙技术讲解

Jenkins 是目前最常用的持续集成工具,拥有近 50%的市场份额,他还是很多技术团队的第一个使用的自动化工具。由此可见他的重要性! 这份 Jenkins 宝典从入门介绍到结合 DockerSpringCloudKubernetes,打通一条龙技术讲解,…

【微服】单体、SOA、微服务

单体架构 将所有的功能都集中在一个模块中(WAR包)开发、部署、迭代,牵一发而动全身,局部低效率拖垮整个服务。 SOA 按服务对项目拆分,通过对外提供接口的方式提供服务,缓解了单体的单服务低效率拖垮整个服…

微服架构基础设施环境平台搭建 -(三)Docker+Kubernetes集群搭建

微服架构基础设施环境平台搭建 -(三)DockerKubernetes集群搭建 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台,以微服务为服务中心,在此基础之上构建业务中台,并通过Jekins自动构建、编译、测试…

微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建

微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台,以微服务为服务中心,在此基础之上构建业务中台,并通过Jekins自动构建、编译、…

SpringCloud微服架构

微服务架构 1)单体应用架构 高效开发:项目前期开发节奏快,团队成员少的时候能够快替代 架构简单:mvc架构,只需要借助Ide开发,调试即可 易于测试:只要通过单元测试或者浏览器完成 易于部署&…

微服架构

首先我们看看为什么要考虑使用微服务。 开发单体式应用 假设你正准备开发一款与Uber和Hailo竞争的出租车调度软件,经过初步会议和需求分析,你可能会手动或者使用基于Rails、Spring Boot、Play或者Maven的生成器开始这个新项目,它的六边形架构…

微服架构基础设施环境平台搭建 -(一)基础环境准备

微服架构基础设施环境平台搭建 -(一)基础环境准备 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台,以微服务为服务中心,在此基础之上构建业务中台,并通过Jekins自动构建、编译、测试、发布的自动…

微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台

微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台,以微服务为服务中心,在此基础之上构建业务中台,并通过Jekins自动…

微服架构简介

什么是微服务? 专业解释: 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的…

微服架构基础设施环境平台搭建 -(五)Docker常用命令

微服架构基础设施环境平台搭建 -(五)Docker常用命令 本文主要列出了Docker常用的命令 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -(一)基础环境准备 微服架构基础设施环境平台搭建 -(二&am…

微服务简介

文章目录 微服务(micro services)简介一 什么是微服务?二 微服务这个概念的由来三 微服务和单体式架构区别3.1 单体式架构缺点3.2 微服务架构的解决方案3.3 微服务缺点3.4 微服务优点3.5 单体式和微服务对比 微服务(micro service…

微服务什么是以及微服务框架

微服务(microservice) 微服务是分布式架构的一种,分布式架构其实就是要把服务做一个拆分,而springcloud只是解决了拆分过程中的服务治理问题。 在单体架构中,我们把所有的服务都写在一起,随着业务的复杂代…

微服篇01——微服务的发展

01——微服务的发展 1:Monolith(整体架构) 服务所对应的代码由多个项目所组成,最终合并在一起形成一个WAR包,再部署到Web容器。 负载与扩容: 2:微服务(Microservice)架构模式 Microservic…

配置不同网段的dhcp服务器

dhcp中继设置 试题4:DHCP实验 背景: 某公司新建了局域网,要求网内地址采用DHCP分配,DHCP服务器地址为172.16.1.5/24,请建立172.16.1.128/25的域为局域网用户分配置IP地址,域中DNS地址为:202.97.…

Linux服务器配置(详细版)

本来就很麻烦,如果错了一个很有可能从新再来,非常麻烦所以要细心 请省略这段部分 --------------------------------------------------------------------------------------------------------------------------------------------- Linux命令 1.进…

银河麒麟服务器修改ip,银河麒麟配置DNS服务器

银河麒麟配置DNS服务器 内容精选 换一换 MindInsight为MindSpore提供了简单易用的调优调试能力。在训练过程中,可以将标量、张量、图像、计算图、模型超参、训练耗时等数据记录到文件中,通过MindInsight可视化页面进行查看及分析。MindInsight组件为MindStudio的独立组件,请…

查看服务器sftp用户信息,linux查看sftp服务器配置

linux查看sftp服务器配置 内容精选 换一换 为加强对系统数据的容灾管理,云堡垒机支持配置日志备份,提高审计数据安全性和系统可扩展性。本小节主要介绍如何在系统配置FTP/SFTP服务器参数,将日志远程备份至FTP/SFTP服务器。开启远程备份后,系统默认在每天零点备份前一天的系…

访问量100万的网站服务器,100万访问量 服务器配置

100万访问量 服务器配置 内容精选 换一换 弹性负载均衡有不同的负载均衡,分别是共享型负载均衡和独享型负载均衡,便于用户根据不同的应用场景和功能需求选择合适的负载均衡器类型。共享型负载均衡:适用于访问量较大的web业务,提供基于域名和URL的路由均衡能力,实现更加灵活…

思科模拟器企业网站服务器配置,cisco模拟器配置域名web服务器

cisco模拟器配置域名web服务器 内容精选 换一换 防护域名开启WEB基础防护之后,访问网站如果出现500,502,504等报错,并且显示Web应用防火墙和网站连接失败,如图1所示。可能的原因比较多,如防火墙拦截、源站配置错误、HTTPS/WebSockets采用不安全的协议版本、后端服务器性能…

hpe服务器稳定性,hpe服务器安装与配置

hpe服务器安装与配置 内容精选 换一换 Ceph集群可采用TaiShan服务器和x86服务器混合部署的方式和全TaiShan服务器的非混合部署方式。在混合部署场景下,三个Ceph节点中,两台为TaiShan 200服务器(型号2280),一台为Fusion Server服务器(型号2288…