【云原生系列之SkyWalking的部署】

news2024/11/26 11:46:07

1、分布式链路追踪

1.1概念

在较大的web集群和微服务环境中,客户端的一次请求需要经过不同的模块,多个不同中间件,多个不同机器一起相互协作才能处理完成客户端的请求,而在这一系列的请求过程之中,处理流程可能是串行执行,也可能是并行执行.那么如何确定客户端的一次请求到结束背后究竟调用了哪些应用以及哪些模块并经过了哪些节点,并且每个模块的调用先后顺序是怎么样的,每个模块的处理响应性能如何?后期随着业务系统的不断增多,业务处理逻辑会越来越复杂,而分布式系统中急需要一套链路追踪(Trace)系统来解决这个问题,从而让运维人员对整个业务系统一目了然,了如指掌。
分布式服务追踪系统是整个分布式系统中跟踪一个用户请求的完整过程,包括数据采集,数据传输,数据存储,数据分析和数据可视化,获取并存储和分享此类追踪可以让运维清晰了解用户请求与业务系统交互背后的整个调用关系,链路追踪是针对调试和监控微服务不可或缺的帮手
Dapper是Google 2008年开始内部使用的链路追踪系统。

1.2 Dapper采集

1.2.1 分布式追踪方法

下图中展现的是一个有5台服务器相关的一个服务,包括:前端(A),两个中间层(B和C),以及两个后端(D和E)。
当一个用户(这个用例的发起人)发起一个请求时,首先到达前端(A),然后发送两个RPC到服务器B和C,B收到请求后会马上做出响应,但是C需要和后端的D和E交互之后再返还给A,由A来响应最初的客户请求,对于这样一个请求,简单实用的分布式跟踪的实现,就是为服务器上每一次发送和接收动作来收集跟踪标识符(message identifiers)和时间戳(timestamped events)。
  1. 黑盒法(black-box)

    无需任何侵入代码,它的优势在于无需修改代码,缺点在于记录不精确,且需要大量的数据才能推导出服务间的关系
    
  2. 标记法(annotation-based)

    需要为每个请求打标记,并通过一个全局标识符将请求途径的所有服务信息串联,复盘整个链路,标记法记录准备,但缺点是需要将标记代码注入到每个服务中
    

在这里插入图片描述

Span代表系统中具有开始时间和执行时长的请求跨度,span之间通过嵌入或者顺序排列建立逻辑因果关系.
任何一个Span可以包含来自不同的主机信息,这些也要记录下来.事实上每一个RPC Span可以包含客户端和服务器两个过程注释.由于客户端和服务器上的时间戳来自不同主机,还必须考虑到时间偏差,在分析工具就利用了时间偏差,即RPC客户端发送一个请求之后服务端才能收到,对应响应也是一样的.这样一来服务器的RPC就有一个时间戳的一个开始和结束,然后就计算出时间消耗.

RPC是远程调用的意思

1.2.2 Dapper跟踪记录和收集管道的过程

  1. span数据写入本地日志文件中
  2. Dapper守护进程和收集组件把这些数据从生产环境的主机中进行读取
  3. 最终写入Dapper的数据仓库中

一个跟踪被设计成Bigtable中的一行,每一列相关于Span Bigtable的支持稀疏表格布局正适合这种情况,因为每一次跟踪可以有任意多个spac

1.2.3 Dapper的特点

  1. Dapper资源占用很小
  2. Dapper守护进程CPU使用率从来没超过0.3%单核CPU。而且只有少量的内存使用,另外还限制了Dapper守护进程内核scheduler最低的优先级,以防在一台高负载的服务器上发生cpu竞争。一个span在仓库传输中占用平均426byte

1.2.4 Dapper应用场景

  1. 性能分析:对请求延迟的目标进行跟踪,并对容易优化的地方进行定位
  2. 正确性分析:发现一些只读器请求,应该是访问从库但却访问了主库等类似业务场景
  3. 理解系统:全局优化系统,理解每个查询的整体代价
  4. 测试新版本:发现新版本的bug和性能问题
  5. 解决依赖关系:找到服务之间的依赖关系

1.3APM的特点

APM系统(Application Performance Management)性能管理系统

早起APM功能主要在监控CPU,内存,IO,网络等资源上
微服务兴起后,系统功能被模块化,再加上k8s与容器化的兴起及应用数据量的爆炸式增长,各模块和服务之间的调用链路,响应时间,负载等越来越不好通过传统的工具进行监控和统计,此时APM系统诞生了.

2、skywalking

2.1特点

  1. 实现从请求跟踪,指标收集和日志记录的完整信息记录
  2. 多语言自动探针,支持java,go,python,php,nodejs,Lua,Rust等客户端
  3. 内置服务器网络可观察性,支持从Istio+Envoy Service Mesh收集和分析数据
  4. 模块化架构,存储,集群管理,使用插件集合都可以进行自由选择
  5. 支持告警
  6. 优秀的可视化效果

2.2 Skywalking组件

OAP平台(Observability Analysis Platform,可观测性分析平台)或OAP Server,它是一个高度组件化的轻量级分析程序,由兼容各种探针Receiver,流式分析内核和查询内核三部分构成.

探针:基于无侵入式的收集,并通过HTTP或者gRPC方式发送数据到OAP Server

存储实现(Sotrage Implementors):SkyWalking OAP Server支持多种存储实现并提供了标准接口,可支持不同的存储后端

UI模块:Skywalking通过标准的GraphQL协议进行统计数据查询和展示

面相协议设计:面相协议设计时Skywalking从5.x开始严格遵守的首要设计原则,组件之间使用标准协议进行数据交互

2.3SkyWalking协议

2.3.1探针协议:

探针上报协议: 协议包括语言探针的注册,Metrics数据上报,Tracing数据上报等标准,Java,Go等探针都需要严格遵守此协议的标准.

探针交互协议:因为分布式追踪环境,探针间需要借助HTTP Header,MQ Header在应用之间进行通信和交互,探针交互协议就定义了交互的数据格式

Service Mesh 协议: 是SkyWalking对Service Mesh抽象的专有协议,任何Mesh类的服务都可以通过此协议直接上传指标数据,用于计算服务的指标数据和绘制拓扑图.

第三方协议: 对大型的第三方开源项目尤其是Service Mesh核心平台Istio和Envoy,提供核心协议适配,支持针对Istio+Envoy Service Mesh进行无缝对接.

2.3.2查询协议:

元数据查询: 查询在skywalking注册的服务,服务实例,Endpoint等元数据信息.

拓扑关系查询: 查询全局,或单个服务,Endpoint的拓扑图及依赖关系.

Metrics指标查询:区间范围均值查询及Top N排名查询等.

Trace查询: 追踪数据的明细查询.

告警查询: 基于表达式,判断指标数据是否超出阈值.

2.4 Skywalking模块

在这里插入图片描述

1、探针负责收集数据
2、前端负责展示数据
3、OAP Server负责从后端存储读写数据
4、后端存储负责持久化数据

2.5SkyWalking优势

  1. 兼容性好: 支持传统的分布式部署架构dubbo和spring cloud,也支持云原生中的Istio和Envoy
  2. 易于部署和后期维护:组件化,可自定义部署,后期横向扩容简单.
  3. 高性能:每天数T的数据无压力
  4. 易于二次开发:标准的http和grpc协议,开源的项目,企业可以自主二次开发.

2、SkyWalked部署

在这里插入图片描述

由于是测试环境,这里的es就不做集群了

服务器名IP地址服务端口作用
SkyWalking-Server172.17.1.608080(UI展示端口) 11800(写数据的端口)12800(读数据的端口)OAP观测性分析平台Server段
es172.17.1.619200ES数据库Version: 8.5.1

2.1创建目录并下载安装包

1、安装java环境
apt install openjdk-11-jdk -y
root@sk:/apps/apache-skywalking-apm-bin/config# java --version
openjdk 11.0.24 2024-07-16
OpenJDK Runtime Environment (build 11.0.24+8-post-Ubuntu-1ubuntu320.04)
OpenJDK 64-Bit Server VM (build 11.0.24+8-post-Ubuntu-1ubuntu320.04, mixed mode, sharing)

2、下载SkyWalk安装包
mkdir /apps && cd /apps
wget https://dlcdn.apache.org/skywalking/9.2.0/apache-skywalking-apm-9.2.0.tar.gz
tar xf apache-skywalking-apm-9.2.0.tar.gz

2.2 修改配置文件

root@sk:/apps/apache-skywalking-apm-bin/config# pwd
/apps/apache-skywalking-apm-bin/config
#修改133行和136行,指定elasticsearch为数据库及elasticsearch的集群地址
root@sk:/apps/apache-skywalking-apm-bin/config# vim application.yml
storage:
  selector: ${SW_STORAGE:elasticsearch}
  elasticsearch:
    namespace: ${SW_NAMESPACE:""}
    ## 单机ES
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:172.17.1.61:9200}
    ## ES集群多个ip用逗号,分割
    ## clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:172.17.1.61:9200,172.17.1.62:9200,172.17.1.63:9200}

#其他几个重要的参数
#存储最多7天的内容,过期数据将会清理。因此请根据实际需求进行调整 
recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day 
# 每10秒刷新数据到收集器中
flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10}
# 提供2个并发请求,如果系统业务量大,日志产生的非常快,请根据实况调整
concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2}

2.3 配置SkyWaing启动文件

root@sk:~# cat /etc/systemd/system/skywalking.service
[Unit]
Description=Apache Skywalking
After=network.target
[Service]
Type=oneshot
User=root
WorkingDirectory=/apps/apache-skywalking-apm-bin/bin
ExecStart=/bin/bash /apps/apache-skywalking-apm-bin/bin/startup.sh
RemainAfterExit=yes
RestartSec=5
[Install]
WantedBy=multi-user.target

root@sk:~# systemctl daemon-reload
root@sk:~# systemctl restart skywalking.service

2.4 验证

服务起来后es上应该会自动创建skywalking所需要的库
在这里插入图片描述

root@sk:~# ss -ntl|grep 8080
LISTEN  0        4096                   *:8080                 *:*
root@sk:~# ss -ntl|grep 11800
LISTEN  0        4096                   *:11800                *:*
root@sk:~# ss -ntl|grep 12800
LISTEN  0        4096                   *:12800                *:*

2.5 报错

在这里插入图片描述
原因:es库的地址配错了,提示库不存在,无法自动创建

解决方案:修改为正确的es库IP

原因:es库的地址配错了,提示库不存在,无法自动创建

解决方案:修改为正确的es库IP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云征文|基于Flexus云服务器X实例之安装长亭雷池waf教程

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 先看这里 写在前面何为长亭雷池waf安装社区版雷池雷池环境要求查看华为云Flexus云服务器X实例的配置一条命令安装雷池waf检查查看是否安装成功 雷池使用登录雷池配置站点 写在…

51单片机.之ADC数字模拟转换

1、数字转模拟电路&#xff0c;输出波形&#xff0c;示波器采集来显示波形 单片机通过i2c给&#xff0c;模数转换器&#xff0c;写入数字信号&#xff0c;定时器1s扫描按键的切换 1、key.c 切换波形 #include <reg52.h>sbit KEY_IN_1 P2^4; sbit KEY_IN_2 P2^5; …

五、Selenium操作指南(一)

文章目录 一、基本用法&#xff08;一&#xff09;初始化浏览器对象&#xff08;二&#xff09;访问页面&#xff08;三&#xff09;设置浏览器大小&#xff08;四&#xff09;刷新页面&#xff08;五&#xff09;前进后退 二、获取页面基础属性三、定位页面元素&#xff08;一…

【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态

【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态 1. 读取 P1、P2 端口 主从模式 / 传输速率2. 读取 P1、P2 端口 Link Status3. 读取 P1、P2 端口 Duplex 全双工/半双工模式4. 读取 P1、P2 链路信号SQI质量5. 完整代码…

基于单片机的肺活量检测仪设计

本设计主要对其中的一种测量方法和原理进行介绍与运用&#xff0c;设计了一款基于STC12C5A60S2单片机的肺活量检测仪&#xff0c;包括供电模块、气流检测模块、按键模块、显示模块、语音输出模块和蓝牙模块&#xff0c;实现对肺活量的数值检测&#xff0c;并对数据进行语音播报…

linux固定ip

背景 VMware&#xff0c;centos7 查询 网关 linux指执行 ip addr 命令 拿到自动分配的ip : 192.168.150.102 [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ 执行: cd /etc/sysconfig/network-scripts/ 进入到network-scripts文件中 执行: vi ifcfg-ens33 编辑ifc…

PPT到PDF转换器:一个功能强大的Python GUI应用(unzip,convert,replace,merge)

在当今的数字时代,文档格式转换已成为一项常见需求。特别是将PowerPoint演示文稿转换为PDF格式,这不仅可以确保文档的一致性,还能方便分享和打印。今天,我们将深入探讨一个使用Python开发的强大GUI应用程序,它不仅可以将PPT转换为PDF,还具备文本替换、PDF处理和文件合并等多项功…

TDesign 微信小程序组件库配置

文章目录 1.安装 npm 包2. 构建 npm3. 构建完成后即可使用 npm 包。4.修改 app.json5.修改 tsconfig.json6.使用组件 1.安装 npm 包 在小程序 package.json 所在的目录中执行命令安装 npm 包&#xff1a; npm install结果报错 PS C:\WeChatProjects\miniprogram-1> npm i…

七、库存管理——调拨、预留业务

1、库存管理业务总览 2、转储过账和库存转移 3、转储过账 3.1 库存状态到库存状态&#xff08;类型较多&#xff09; 3.1.1 从质检库存转移到非限制使用库存 转储模式&#xff1a;事务类型A08&#xff08;转移过账&#xff09;凭证类型R10&#xff08;其他&#xff09;移动类…

Having trouble using OpenAI API

题意&#xff1a;"使用OpenAI API遇到困难" 问题背景&#xff1a; I am having trouble with this code. I want to implement AI using OpenAI API in my React.js project but I cannot seem to get what the issue is. I ask it a question in the search bar in…

java 教程-我的第一个JAVA程序

Java视频教程 我的第一个JAVA程序 以下我们通过一个简单的实例来展示Java编程&#xff0c;本实例输出"编程字典&#xff0c;Java教程&#xff01;"&#xff0c;这也是所有语言入门的第一个实例程序&#xff1a; packagecodingdict.com; publicclassHelloWorld{ publi…

REGTR: End-to-end Point Cloud Correspondences with Transformers 论文解读

目录 一、导言 二、先导知识 1、3DRegNet 2、Kabsch-Umeyama算法 3、InfoNCE损失函数 三、相关工作 1、基于对应关系的配准 2、全局配准工作 3、过滤问题 4、Transformer 四、REGTR网络 1、降采样和特征提取 2、Transformer 交叉编码器 Transformer为什么要用FF…

MySQL高阶练习题2-没有广告的剧集

目录 题目 准备数据 分析数据 实现代码 总结 题目 找出所有没有广告出现过的剧集。 返回结果 无顺序要求 。 准备数据 create database db; use db;Create table If Not Exists Playback(session_id int,customer_id int,start_time int,end_time int); Create table I…

数据结构:(LeetCode 965)相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&…

「草莓」即将上线,OpenAI新旗舰大模型曝光,代号「猎户座」

本月初,OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片,勾起了大家强烈的好奇心。 「四个红草莓,其中还有一个未成熟的青色草莓,这不妥妥地是在说下一代 AI 大模型 GPT-5 要来了吗?」奥特曼在回应网友时也在暗示,惊喜马上就来。 据科技媒体 The Information 报…

前胡基因组与伞形科香豆素的进化-文献精读42

The gradual establishment of complex coumarin biosynthetic pathway in Apiaceae 伞形科中复杂香豆素生物合成途径的逐步建立 羌活基因组--文献精读-36 摘要&#xff1a;复杂香豆素&#xff08;CCs&#xff09;是伞形科植物中的特征性代谢产物&#xff0c;具有重要的药用价…

JAVA:文字写入图片、图片插入图片

一、前言 在实际应用中&#xff0c;需要通过Java将目标信息写在图片上&#xff0c;生成小卡片。 二、实现 1.定义一个工具类&#xff0c;代码如下&#xff1a; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.Fil…

C++(1)基础语法

C(1)之基础语法 Author: Once Day Date: 2024年8月29日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 参考文…

使用控制台与键盘进行输入输出

1、控制台简介与初始化 计算机在上电启动后&#xff0c;显示器被默认配置成80x25列的文本显示模式 。其使用从0xb8000开始&#xff0c;一共32KB的显存用于显示。如要在屏幕上指定位置显示特定的字符&#xff0c;则只需找到该位置对应的显存地址&#xff0c;写入2字节的数据&am…

ctfshow之web58~web71

目录 web58 思路一&#xff1a; 思路二&#xff1a; 思路三&#xff1a; web59~web65 web66~web67 web68~web70 web71 web58 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); } PHP eval() 函数介绍 定义和用法 eval() 函数把字符串按…