安装skywalking并集成到微服务项目
文章目录
- 一、前言
- 二、介绍
- 1. 架构
- 三、安装skywalking服务端
- 四、启动skywalking服务端
- 五、微服务项目开发
- 注册中心
- 网关服务
- 商品服务
- 订单服务
- 支付服务
- 测试
- 六、下载java客户端
- 七、微服务集成skywalking客户端
- 1. idea启动
- 2. 命令行启动
- 3. 集成效果
- 4. 服务实例
- 5. 修改服务实例名称
- 八、skywalking客户端配置
- 1. 配置文件
- 2. jvm启动参数
- 3. javaagent选项
- 4. 操作系统环境变量
一、前言
本片文章主要讲解skywalking的安装教程,及其在微服务架构中的链路追踪功能。
本文中的演示项目运行环境如下:
- springcloud:2020.0.6
- springboot:2.5.14
- jdk:1.8
- skywalking:9.4.0
- os:windows
skywalking的介绍分多篇文章:
-
- 微服务项目集成skywalking
-
- skywalking全链路追踪
二、介绍
skywalking是一个开源的应用性能管理系统和可观测性分析平台。用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking提供了一种简单的方法来保持我们的分布式系统的清晰视图,甚至跨云。这是一个现代的APM(应用性能管理和监控技术),专门为云本地的、基于容器的分布式系统而设计。
SkyWalking在许多不同的场景中为观察和监控分布式系统提供了解决方案。首先,与传统方法一样,SkyWalking为服务提供了自动仪器代理,如Java、C#、Node.js、Go、PHP和Nginx LUA。
SkyWalking为服务、服务实例、端点和流程提供了可观察性。
- 服务:代表为传入请求提供相同行为的一组工作负载。使用仪器代理或SDK时,可以定义服务名。
- 服务实例:服务组中的每个工作负载称为一个实例。像Kubernetes中的pods一样,它不需要是单个操作系统进程,但是,如果您使用的是工具代理,实例实际上是一个真正的操作系统进程。
- 端点:服务中用于传入请求的路径,例如HTTP URI路径或gRPC服务类+方法签名。
- 流程:操作系统进程。在某些场景中,一个服务实例不是一个流程,比如一个pod Kubernetes可以包含多个流程。
1. 架构
SkyWalking在逻辑上分为四个部分:Probe(探针)、backend(平台后端)、storage(存储)和UI。
- Probe(探针):探针收集遥测数据,包括各种格式的度量、轨迹、日志和事件。
- backend(平台后端):支持数据聚合、分析和流式处理,包括跟踪、指标、日志和事件。充当聚合者角色、接收者角色或两者兼而有之。
- storage(存储):通过开放/可插拔的接口存储数据。你可以选择一个现有的实现,比如ElasticSearch、H2、MySQL、TiDB、BanyanDB。
- UI:一个高度可定制的基于web的界面,允许skywalk终端用户可视化和管理skywalk数据。
三、安装skywalking服务端
进入skywalking下载页面,按照以下截图进行不同版本的下载
下载成功后进行解压,解压后如下所示
重点关注以下文件夹
- bin:包括用于后端服务和前端UI的启动shell脚本和cmd脚本
- config:后端服务的配置文件,主要关注
application.yml
、log4j.xml
、alarm-settings.yml
- oap-libs:后端服务所需要的所有依赖
- webapp:前端应用以及配置文件
四、启动skywalking服务端
进入bin
文件夹,双击webappService.bat
启动skywalking服务的后端与前端。
启动成功后如下所示
既然服务启动成功,我们下一步就是通过浏览器打开skywalking的可视化界面了。
首先需要查看前端服务运行的端口,进入webapp
文件夹,查看前端配置文件application.yml
,发现前端服务的运行端口号是通过变量SW_SERVER_PORT
设置的,其默认端口号为8081
在浏览器输入localhost:8081
,进入控制台页面
五、微服务项目开发
本项目仅用于演示skywalking的集成过程,项目结构如下图所示
- skywalking-eureka-server:eureka服务注册中心
- skywalking-gateway:网关
- skywalking-goods:商品服务
- skywalking-order:订单服务
- skywalking-payment:支付服务
项目架构图如下所示
注册中心
本项目的注册中心仅用于服务注册,其配置文件如下所示
启动注册中心后,在浏览器打开注册中心页面,输入localhost:8080/eureka
从注册中心中可以看出,我们启动的实例如下
- eureka注册中心:只有一个实例,端口号为8080,为单机模式
- 网关:只有一个实例,端口号为8090,为单机模式
- 商品服务:两个实例,端口号分别为8011和8012,为集群模式
- 订单服务:两个实例,端口号分别为8021和8022,为集群模式
- 支付服务:两个实例,端口号分别为8031和8032,为集群模式
网关服务
本项目的注册中心仅用于转发请求,其配置文件如下所示
该配置中的三个路由分别用于转发请求到商品服务、订单服务和支付服务。
商品服务
商品服务中定义的接口如下:
当用户调用该接口时,打印日志进行记录,然后通过feign接口调用订单服务的创建订单接口,最后返回结果,
订单服务
订单服务中定义了一个由商品服务调用的接口如下:
该接口由商品服务调用,其返回值0代表成功,1代表失败。当传入的商品id为2的倍数时,则订单创建失败,否则通过feign接口调用支付服务的支付接口,最后返回结果。
支付服务
支付服务中定义了一个由订单服务调用的接口如下:
该接口由订单服务调用,其返回值0代表成功,1代表失败。当传入的商品id为3的倍数时,则支付失败,否则返回成功的结果。
测试
当我们调用商品服务的接口并传入商品id为1时
得到的结果为0,即成功。
查看日志如下:
从日志中可以看出,此次请求的调用链如下所示
当我们调用商品服务的接口并传入商品id为2时
得到的结果为1,即失败。
查看日志如下:
从日志中可以看出,此次请求的调用链如下所示
当我们调用商品服务的接口并传入商品id为3时
得到的结果为1,即失败。
查看日志如下:
从日志中可以看出,此次请求的调用链如下所示
六、下载java客户端
skywalking使用java agent
将客户端植入到微服务中,当项目启动时,会自动与skywalking服务端建立连接。
下面我们进入官网下载页面
下载成功后进行解压,解压后如下所示
重点关注以下文件
- config:客户端的配置
- logs:日志
- skywalking-agent.jar:skywalking的客户端
七、微服务集成skywalking客户端
skywalking要求我们通过-javaagent
将skywalking客户端集成到微服务中,现在我们对上面演示项目的各个服务进行集成
1. idea启动
使用idea启动项目的情况下,我们进入项目的启动配置(Run/Debug Configuration)中。
以端口号为8011的商品服务为例,添加以下JVM启动参数
# skywalking客户端路径
-javaagent:E:\skywalking\skywalking-agent\skywalking-agent.jar
# 服务名称
-Dskywalking.agent.service_name=skywalking-goods
如下图所示
2. 命令行启动
同样以端口号为8011的商品服务为例,当我们使用命令行启动微服务的jar包时,只需要将上面的两个参数放在-jar
参数的前面即可,如下所示
java \
-javaagent:/data/skywalking/skywalking-agent.jar \
-Dskywalking.agent.service_name=skywalking-goods \
-jar \
skywalking-goods.jar
3. 集成效果
启动参数添加完成后,重启项目,然后进入skywalking服务端的控制台页面
不难发现,我们已经把项目中的eureka服务端、网关、商品服务、订单服务、支付服务集成到skywalking了。
该页面中包含四个标签页:Service、Topology、Trace、Log
-
Service:微服务列表。类比eureka服务端的服务列表。
在该列表中,发现其表格中包含了以下几列-
Service Groups:服务分组。
当我们启动服务时,在JVM启动参数中为其添加了skywalking的服务名称
-Dskywalking.agent.service_name=skywalking-goods
,如果需要为该服务指定分组,则需要以分组名::服务名
配置服务名称。例如我们需要将商品服务的分组设置为
sw-business
,则将该参数修改为-Dskywalking.agent.service_name=sw-business::skywalking-goods
。 -
Service Names:服务名称。
-
Load(calls/min):平均每分钟调用次数。
-
Success Rate(%):调用成功率。
-
Latency(ms):延迟。
-
apdex:应用性能指数。
-
-
Topology:服务拓扑图。
-
Trace:服务调用链路。
-
Log:服务调用日志。
4. 服务实例
点击服务名,可查看该服务详情,其中包含该服务的实例列表
-
查看eureka服务实例
通过以下截图看到eureka服务的实例数为1个,其实例名称为skywalking自动生成的,其规则为
UUID + @ + IP
。 -
查看网关服务实例
通过以下截图看到网关服务的实例数为1个,其实例名称为skywalking自动生成的,其规则为
UUID + @ + IP
。 -
查看商品服务实例
通过以下截图看到商品服务的实例数为2个,其实例名称为skywalking自动生成的,其规则为
UUID + @ + IP
。 -
查看订单服务实例
通过以下截图看到订单服务的实例数为2个,其实例名称为skywalking自动生成的,其规则为
UUID + @ + IP
。 -
查看支付服务实例
通过以下截图看到支付服务的实例数为2个,其实例名称为skywalking自动生成的,其规则为
UUID + @ + IP
。
5. 修改服务实例名称
由于skywalking生成的实例名称有默认规则,我们可以对其进行修改,以增加各个服务实例的辨识度。
在项目的JVM启动参数中添加配置:-Dskywalking.agent.instance_name=实例名称
。以商品服务为例
-
端口号为8011的商品服务
-
端口号为8012的商品服务
重新启动商品服务的两个实例,可以看到对应的实例名称已被修改,且可以发现实例名称支持中文
八、skywalking客户端配置
skywalking客户端提供了多种配置方式:配置文件
、jvm启动参数
、-javaagent选项
、操作系统环境变量
。
1. 配置文件
在skywalking客户端的配置文件config/agent.config
中,包含了大量客户端配置,如下截图所示。
以服务名的配置为例,配置项为agent.service_name
,对应的值将从系统环境变量中获取SW_AGENT_NAME
变量的值作为服务名,冒号:
后面为默认配置,即如果系统环境变量中不存在该配置,则取默认值
2. jvm启动参数
使用 skywalking. + 配置项
实现对配置文件中对应配置项的覆盖,因此优先级更高。
-
为什么要给配置项添加前缀
skywalking.
前缀可以避免冲突。
例如:配置命名空间
-Dskywalking.agent.namespace=my_namespace
3. javaagent选项
格式:
多个配置项之间以逗号","分隔
-javaagent:/path/to/skywalking-agent.jar=[option1]=[value1],[option2]=[value2]
例如配置服务名和命名空间
-javaagent:/path/to/skywalking-agent.jar=agent.service_name=my_service_name,agent.namespace=my_namespace
如果配置项或配置值中包含特殊符号,则应当使用单引号’'将其包含
-javaagent:/path/to/skywalking-agent.jar=agent.service_name=my_service_name,agent.ignore_suffix='.jpg,.jpeg'
4. 操作系统环境变量
以服务名的配置为例,配置项为agent.service_name
,对应的值将从系统环境变量中获取SW_AGENT_NAME
变量的值作为服务名,冒号:
后面为默认配置,即如果系统环境变量中不存在该配置,则取默认值。
以上就是skywalking的安装、以及如何与微服务项目进行集成的过程。
纸上得来终觉浅,绝知此事要躬行。
————————我是万万岁,我们下期再见————————
相关文章:

安装skywalking并集成到微服务项目
文章目录 一、前言二、介绍1. 架构 三、安装skywalking服务端四、启动skywalking服务端五、微服务项目开发注册中心网关服务商品服务订单服务支付服务测试 六、下载java客户端七、微服务集成skywalking客户端1. idea启动2. 命令行启动3. 集成效果4. 服务实例5. 修改服务实例名称…...
一支笔,一双手,一道力扣(Leetcode)做一宿
文章目录 一、分享自己相关的经历二、分析可能存在的问题三、根据问题进行分解或建立思维导图四、分享好用的刷题网站并进行介绍 一、分享自己相关的经历 我是一名计算机专业的学生,之前在学习算法和数据结构时,对于简单题目还算能够顺利地刷过去。但是…...
Kubernetes(K8s)从入门到精通系列之九:使用kubeadm工具快速安装K8s集群
Kubernetes K8s从入门到精通系列之九:使用kubeadm工具快速安装K8s集群 一、安装kubeadm二、修改kubeadm的默认配置三、下载K8s相关镜像四、运行kubeadm imit命令安装Master节点五、将新的Node加入集群六、安装CNI网络插件七、验证K8s集群是否工作正常八、搭建高可用K8s集群详细…...

RabbitMQ 教程 | 第11章 RabbitMQ 扩展
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…...

一分钟完成centos7安装docker
action: 1、下载安装包2、安装docker 1、背景 使用CentOS / Redhat 7 版本的应该偏多。但是,Docker CE在系统中安装的时候,往往会出现一堆依赖包的报错,解决依赖包需要耗费不短的时间。 经验证,目前已找到兼容能力强的版本&am…...
NativePHP:使用PHP构建跨平台桌面应用的新框架
NativePHP是一个用于使用PHP构建桌面应用的框架。它允许PHP开发人员使用熟悉的工具和技术创建跨平台的原生应用。NativePHP具有一系列易于使用的类,一套用于构建和打包应用程序的工具以及一个静态跨平台PHP运行时。 官网地址:https://nativephp.comNati…...

删除这4个文件夹,流畅使用手机无忧
在现代社会中,手机已经成为我们生活中不可或缺的一部分。然而,随着使用时间的增长,我们可能会遇到手机卡顿和内存不足的问题,让我们感到十分困扰。手机卡顿不仅影响使用体验,还可能导致应用程序运行缓慢,甚…...
使用Bert预训练模型处理序列推荐任务
最近的工作有涉及该任务,整理一下思路以及代码细节。 流程 总体来说思路就是首先用预训练的bert模型,在训练集的序列上进行CLS任务。对序列内容(这里默认是token id的sequence)以0.3左右的概率进行随机mask,然后将相…...

将word每页页眉单独设置
在进行论文排版的时候,总是会出现页眉的页码设置问题,比如出现奇数或偶数页码一致,尝试将前面页码改掉,后面再修改前面也进行了变动,将每页页眉单独设置: (1)在第一页的最后一行输入…...
rust怎么生成随机数?
关注我,学习Rust不迷路!! 在 Rust 中,有几种不同的方法可以实现随机数生成。以下是其中几种常见的方法,以及它们的优缺点: 1. 使用 rand crate: 优点: rand crate 是 Rust 中最常…...

python-Excel数据模型文档转为MySQL数据库建表语句(需要连接数据库)-工作小记
将指定Excel文档转为create table 建表语句。该脚本适用于单一且简单的建表语句 呈现效果 代码 # -*- coding:utf-8 -*- # Time : 2023/8/2 17:50 # Author: 水兵没月 # File : excel_2_mysql建表语句.py import reimport pandas as pd import mysql.connectordb 库名mydb m…...

406 · 和大于S的最小子数组
链接:LintCode 炼码 - ChatGPT!更高效的学习体验! 题解:同向双指针 九章算法 - 帮助更多程序员找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 class Solution { public:/*** param nums: an array …...
xray的 webhook如何把它Hook住?^(* ̄(oo) ̄)^
xray webhook xray可以通过webhook传递扫描信息,官方文档也是一笔带过,可能大多数人都不清楚,或者仅仅知道有这么个东西,但是不知道怎么使用,webhook是xray被动监听模式下的一种输出结构和方式。相比输出Json和txt格式…...

浅析RabbitMQ死信队列
原文首发于公众号【CSJerry】 在现代分布式系统中,消息队列扮演着至关重要的角色。它们可以实现应用程序之间的异步通信,并确保数据的可靠传输和处理。而在这个领域中,RabbitMQ作为一种强大而受欢迎的消息队列解决方案,具备了高…...

ELK 企业级日志分析系统(ElasticSearch、Logstash 和 Kiabana 详解)
目录 一.ELK简介 1.1ELK的概述 1.2ELK的组成 1.2.1 ElasticSearch 1.2.2 Logstash 1.2.3 Kibana 1.2.4 小总结 1.3可以添加其他组件 1.4filebeat 结合 logstash 带来好处 1.5日志处理的步骤 二.Elasticsearch 2.1Elasticsearch概述 2.2Elasticsearch核心概念 2.2.1接近…...

数学建模—多元线性回归分析
第一部分:回归分析的介绍 定义:回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的人数就是,通过研究自变量X和因变量Y的相关关系,尝试去解释…...

win10 64位 vs2017 qt5.12.6 pcl1.9.1 vtk8.1.1配置安装步骤
由于我电脑中有 QT5.12.6 VS2017,就不介绍怎么安装了,只介绍cmake,pcl及vtk的配置步骤 为了便于后续QT的调用,以下所有安装路径中均不能出现中文及空格等 PCL自带VTK是不完整的,所以需要下载VTK源码进行重新编译使其…...

【项目 计网1】4.1 网络结构模式 4.2MAC地址、IP地址、端口
文章目录 第四章 Linux网络编程4.1 网络结构模式C/S结构(client-server)B/S结构(Browser/Server,浏览器/服务器模式) 4.2 4.3MAC地址、IP地址、端口(1)(2)MAC地址IP地址(…...

uni-app:分页实现多选功能
效果 代码解析 一、标签-列表 <view class"item_all" v-for"(item, index) in info" :key"index"><view class"position parameter-info text-over" :class"{checked_parameter: item.checked}" :data-id"i…...

问道管理:沪指窄幅震荡跌0.18%,有色、汽车等板块走低
3日早盘,沪指盘中窄幅震动下探,创业板逆市上扬;两市半日成交不足5000亿元,北向资金净卖出超15亿元。 到午间收盘,沪指跌0.18%报3255.88点,深成指跌0.23%,创业板指涨0.2%;两市算计成交…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...