k8s集成skywalking

如果能科学上网的话,安装应该不难,如果有问题可以给我留言

本篇文章我将给大家介绍“分布式链路追踪”的内容,对于目前大部分采用微服务架构的公司来说,分布式链路追踪都是必备的,无论它是传统微服务体系亦或是新一代Service Mesh的微服务架构!而具体介绍的内容,本文不是完全讲理论,而是希望从理论到实践,引导大家去操作,因为只有这样才能真正从技术层面有深刻的认识和了解!

分布式链路追踪概述

在具体介绍分布式链路追踪系统之前,我们首先需要理解下什么是链路追踪?在本专栏前面关于监控系统的介绍中可以知道,监控系统的观测数据主要来源于统计指标、日志以及链路追踪这三个方面。而这些数据从类型上又可以划分为两种:请求级别、聚合级别。

请求级别的数据主要来源于真实的请求,例如一次HTTP调用、RPC调用等,本文要介绍的链路追踪就是这种类型。而聚合级别则是接口请求的度量指标或者一些参数数据的聚合,如QPS、CPU使用率等数值。日志和统计指标数据既可以是请求级别,也可以是聚合级别,因为它们可能来自源于真实的请求,也可能是系统自身诊断时记录下来的信息。

而对于链路追踪来说,它主要的逻辑就是将请求链路的完整行为记录下来,以便可以通过可视化的形式实现链路查询、性能分析、依赖关系、拓扑图等分布式链路追踪相关的功能。如下图所示:

在上图中假设微服务系统中的一次接口调用总共有两个微服务参与,其调用关系分别是A->B->C,其中B服务还与Redis这样的第三方服务产生了调用关系、C服务则还需要调用MySQL数据库服务。所以实际上链路追踪所做的事情就是详细记录A->B(B->Redis)->C(C->MySQL)这条完整链路上的详细调用信息,例如接口响应结果、耗时等。

那么这条调用链路上的数据到底是怎样被记录的呢?接下来我们继续以上面的调用链为例分析下链路追踪信息的具体组成和传递形式,以便进一步理解分布式链路追踪系统的原理和概念。具体逻辑示意图如下:

如上图所示,分布式链路追踪所监控的对象就是一次次调用所产生的链路,图中1-8所示的就是一条完整的链路(Trace),系统会通过唯一的标识(TraceId)对此进行记录。而链路中的每一个依赖调用都会生成一个调用踪迹信息(Span),最开始生成的Span叫做根Span(Root Span),后续生成的Span都会将前一个Span 的标示(Sid)作为本Span信息的父ID(Pid)。

这样以此类推,Span信息就会随着链路的执行被进程内或跨进程进行上下文传递,通过Span数据链就能将一次次链路调用所产生的踪迹信息串联起来,而每一个Span之上附着的日志信息(Annotation)就是我们进行调用链监控分析的数据来源。这就是分布式链路追踪的基本原理。

而说到这里,你可能会有疑问:监控这么大的数据量,是不是会很消耗系统资源?的确如此,所以大部分链路追踪系统,都会存在一个叫做采样率(Sampling)的设定,用来控制系统采集链路信息的比例,从而提升系统性能。因为很多时候,大量的链路信息都是相同的,我们需要关注的可能也只是相对耗时较高、出错次数较多的链路,而并没有必要100%的进行采集。

SkyWalking简介

前面我们从基本原理的角度说明了链路追踪是什么,那么接下来我们将介绍下目前最流行的分布式链路追踪系统——SkyWalking。

SkyWalking是一款优秀的开源APM(Application Performance Management)系统,它不仅提供了链路追踪,链路分析等分布式追踪功能,还支持性能指标分析、应用和服务依赖性分析、服务拓扑图分析、报警等一系列应用性能监控相关的功能,可以帮助我们有效地定位问题。

而从数据收集上看,SkyWalking支持多种不同的数据来源及格式,包括支持Java、.NET Core、NodeJS、PHP和Python等不同语言的无侵入式Agent探针,以及对Service Mesh(服务网格)架构的支持等。其具体结构如下图所示:

如上图所示,SkyWalking的核心由链路收集服务器(Receiver Cluster)、聚合服务器(AggregatorCluster)组成。其中Receiver Cluster是整个后端服务接入的入口,专门用于收集服务的各种指标及链路信息。

而AggregatorCluster则用于汇总、聚合收集器收集到的数据,并最终将聚合数据存储到数据库中,而具体存储方式可以有多种,例如常见的ElasticSearch、MySQL、TIDB等,我们可以根据实际需要进行选择。这些聚合数据后面可以用于告警设置,也可以被GUI/CLI等可视化系统以HTTP的形式访问后进行可视化展示。

此外,从数据采集逻辑上看,SkyWalking支持多种语言探针及项目协议,能够覆盖目前大部分主流的分布式技术栈,具体来说主要有以下3种:

  • Metrics System:统计系统。支持直接从Prometheus中拉取度量指标数据到SkyWalking,也支持程序自身通过micrometer推送数据;

  • Agents:业务探针。指在各个业务系统中集成探针服务来进行链路追踪,即链路数据采集。SkyWalking支持Java、Go、.NET、PHP、NodeJS、Python、Nginx LUA等多种语言的探针。此外,它还支持通过gRPC或者HTTP的方式来传递数据;

  • Service Mesh:SkyWalking还支持对新一代微服务架构Service Mesh的监控,可以通过特定的Service Mesh协议采集数据面、控制面的数据,实现对服务网格链路数据的观测;

上面的内容简单介绍了SkyWalking的基本情况,并就其系统架构进行了简单分析。实际上SkyWalking最近两年发展得非常快,社区也非常活跃,在微服务链路追踪、应用性能监控领域被使用得也越来越广泛,由于篇幅原因,这里无法进行更深入的分享,感兴趣的读者可以通过官方文档或社区进行深入了解!

SkyWalking安装部署

前面的内容分别介绍了分布式链路追踪的基本原理,并着重介绍了SkyWalking!很显然,写到这里就结束的话,本文就没有啥价值了,因为只是说了一堆正确的废话,看了也就忘了!这显然也不符合我分享的风格,接下来我们就从实验的角度来玩一下SkyWalking。

以下内容需要进行实际实验操作,如果在地铁上不方便可以先收藏,有时间再具体实验玩下!

对于SkyWalking的部署主要涉及到后端OAP Server和前端UI,根据实际需要可以将它们部署在物理机、虚拟机或者Kubernetes集群之中。这里为了演示环境的一致性,我们选择将SkyWalking的后端服务及UI分别部署到Kubernetes集群中。

而具体安装SkyWalking的方式可以通过官方提供的Kubernetes部署文件采用Helm方式安装,也可以手动编写Kubernetes部署文件,这里为了便于学习,我们采用后一种方式。具体步骤如下:

1)、在Kubernetes集群中创建一个单独运行SkyWalking容器的Namespace。命令如下:

#通过kubectl连接Kubernetes集群后执行,创建namespace命令$ kubectl create ns skywalking

2)、编写SkyWalking-UI及OAP Server服务Kubernetes部署文件

在编写具体的Kubernetes部署文件的过程中需要指定SkyWalking-UI及OAP Server的容器镜像,一般来说可以通过源码手动打包也可以直接使用官方已经打包好的镜像。这里为了方便演示,采用Docker官方镜像仓库中已经打包好的镜像。具体如图所示:

如果上面两张图所示,我们分别在Docker Hub官方镜像仓库中找到了SkyWalking-UI及OAP Server的官方发布的容器镜像版本,接下来编写具体的部署文件。

编写SkyWalking服务端Kubernetes部署文件(skywalking-aop.yml),具体内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:name: oapnamespace: sanyi-erp
spec:replicas: 1selector:matchLabels:app: oaprelease: skywalkingtemplate:metadata:labels:app: oaprelease: skywalkingspec:containers:- name: oapimage: apache/skywalking-oap-server:8.3.0-es7imagePullPolicy: IfNotPresentports:- containerPort: 11800name: grpc- containerPort: 12800name: rest---
apiVersion: v1
kind: Service
metadata:name: oapnamespace: sanyi-erplabels:service: oap
spec:ports:- port: 12800name: rest- port: 11800name: grpc- port: 1234name: pageselector:app: oap

以上是一个标准的Kubernetes部署文件,关于文件中相关指令的具体含义可查阅Kubernetes相关的资料。

这里部署之后,端口查询可以使用kebectl get svc -n skywalking 查看,我使用的是腾讯云,部署之后,我手动的将svc服务的类型变成了nodePort

编写SkyWalking-UI部署文件(skywalking-ui.yml),具体内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:name: ui-deploymentnamespace: sanyi-erplabels:app: ui
spec:replicas: 1selector:matchLabels:app: uitemplate:metadata:labels:app: uispec:containers:- name: uiimage: apache/skywalking-ui:8.3.0ports:- containerPort: 8080name: pageenv:- name: SW_OAP_ADDRESSvalue: oap:12800
---
apiVersion: v1
kind: Service
metadata:name: uinamespace: sanyi-erplabels:service: ui
spec:ports:- port: 8080name: pagenodePort: 31235type: NodePortselector:app: ui

3)、根据编写的部署文件,执行Kubernetes部署命令

根据前面步骤中编写的Kubernetes发布文件,这里我们根据编写的发布文件直接执行部署命令,具体如下:

 kubectl apply -f .

可以看到部署的SkyWalking服务都已经正常运行!如果是第一次部署,拉取镜像的过程可能会比较慢一点。

4)、查看SkyWalking-UI的Web访问地址

经过上述步骤,我们已经成功将SkyWalking-UI、OAP Server两个服务运行在Kubernetes集群之中。接下来通过SkyWalking-UI服务的映射端口(k8s部署文件中定义是31234端口)访问Web UI,具体可通过http://NodeIP:31234进行访问,例如:

查询SkyWalking-UI所部署的Kubernetes集群Node节点的IP地址$ kubectl describe node kubernetesName:   

如上图所示,此时可以看到SkyWalking已成功运行,由于尚无服务接入所以暂时还看不到有任何监控数据!

后记

如前面所述内容我们已经在Kubernetes环境中将分布式链路追踪系统部署成功了,另外由于还没有服务接入所以暂时还看不到任何链路追踪数据,但是由于篇幅的原因这里就不继续介绍如何将Java微服务接入SkyWalking了,但是这个这个接入过程却是非常有意思的,因为它是我们作为研发人员,进一步理解微服务程序与分布式链路追踪系统集成、交互的关键!这部分我将作为续集在下一篇文章中给大家分享,时间不会太久,期待大家保持关注!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Native AOT发布C# dll 提供给C++调用

Native AOT,即提前本地编译(Ahead-Of-Time Compilation),是一种将托管代码(如 C#)编译为本机可执行文件的技术,无需在运行时进行任何代码生成。 (Native AOT 优缺点截图摘自张善友博…

QT:多ui界面显示

文章目录 1.多ui界面添加2.跳转函数3.返回函数4.Qt5源码工程5.模态显示 1.多ui界面添加 最终生成这个目录 2.跳转函数 void MainWindow::on_pushButton_clicked() {//this->setWindowModality(Qt::WindowModal);test1 *t1 new test1();t1->setParentData(this);this-…

cesium 3dtile ClippingPlanes 多边形挖洞ClippingPlaneCollection

原理就是3dtiles里面的属性clippingPlanes 采用ClippingPlaneCollection,构成多边形来挖洞。 其次就是xyz法向量挖洞 clippingPlanes: new this.ffCesium.Cesium.ClippingPlaneCollection({unionClippingRegions: true, // true 表示多个切割面能合并为一个有效的…

【Python网络爬虫笔记】2-HTTP协议中网络爬虫需要的请求头和响应头内容

1 HTTP 协议整理 HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是用于从万维网(WWW)服务器传输超文本到本地浏览器的传送协议,直白点儿,就是浏览器和服务器之间的数据交互就是通过 HTT…

Echarts散点图(火山图)自定义配置

创建DOM元素 <div><div ref"chat" :style"{width: volcanoDimensions.width,height: volcanoDimensions.height,}" class"chat"></div></div>初始化图表 需要实现&#xff0c;被筛选出的数据&#xff0c;带有label&…

微软企业邮箱:安全可靠的企业级邮件服务!

微软企业邮箱的设置步骤&#xff1f;如何注册使用烽火域名邮箱&#xff1f; 微软企业邮箱作为一款专为企业设计的邮件服务&#xff0c;不仅提供了高效便捷的通信工具&#xff0c;更在安全性、可靠性和功能性方面树立了行业标杆。烽火将深入探讨微软企业邮箱的多重优势。 微软…

33-ESP32-蓝牙篇-00

理解蓝牙技术及其协议栈结构 介绍 在物联网(IoT)领域&#xff0c;蓝牙技术因其低功耗和易用性而成为连接设备的首选无线通信协议之一。ESP32 支持双模蓝牙 4.2&#xff0c;并且已经获得双模蓝牙 4.2 认证和蓝牙 LE 5.0 认证 一、蓝牙技术概述 什么是蓝牙&#xff1f; 蓝牙…

fiddler安卓雷电模拟器配置踩坑篇

一、fiddler端配置 和网页版fiddler一样&#xff0c;需要首先再本机安装证书&#xff0c;可以参考我之前的fiddler浏览器配置文章&#xff0c;前期操作一致&#xff1a; 此处需要注意的是connections里面需要勾选allow remote这个选项&#xff0c;这个主要是为了后来再安卓模拟…

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录&#xff0c;有别于基础语法&#xff0c;很多内容只要求会用就行&#xff0c;无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout&#xff1a; 1.3 string以下是字符串的一些简介&#xff1a;字符串…

【HarmonyOS NEXT】ACL 受限权限申请

关键词&#xff1a;受限开放权限、ACL、鸿蒙 在鸿蒙应用开发过程中&#xff0c;部分权限被受到限制&#xff08;如悬浮窗开发、读取联系人数据、读取公共目录音频文件等权限&#xff09;&#xff0c;但是在我们的应用开发过程中又不得不使用该权限时可向华为申请受限权限&#…

《安富莱嵌入式周报》第346期:开源2GHz带宽,12bit分辨率,3.2Gsps采样率示波,开源固件安全分析器, 开源口袋电源,开源健康测量,FreeCAD

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频&#xff1a; https://www.bilibili.com/video/BV1TYBhYKECK/ 《安富莱嵌入式周报》第346期&#xff1a;开源2GHz带…

Unity3d C# 摄像头检测敌方单位(目标层级)并在画面中标注(含源码)

前言 需要实现的功能是通过一个专门的检测摄像头将出现在摄像头画面内的敌方单位检测出来&#xff0c;并通过框选的UI框在画面中标记出来。检测摄像头支持自动检测和手动控制检测&#xff0c;同时需要实现锁定模式&#xff0c;检测到一个敌方单位直接锁定到对象上等功能。 效…

【计算机网络】核心部分复习

目录 交换机 v.s. 路由器OSI七层更实用的TCP/IP四层TCPUDP 交换机 v.s. 路由器 交换机-MAC地址 链接设备和设备 路由器- IP地址 链接局域网和局域网 OSI七层 物理层&#xff1a;传输设备。原始电信号比特流。数据链路层&#xff1a;代表是交换机。物理地址寻址&#xff0c;交…

从0在自己机器上部署AlphaFold 3

本文介绍如何在自己本地机器上安装AlphaFold 3。 在10月份&#xff0c;Google DeepMind的首席执行官Demis Hassabis和高级研究科学家John M. Jumper所领导的团队&#xff0c;利用AI技术成功预测了几乎所有已知蛋白质的结构&#xff0c;开发出备受赞誉的AlphaFold&#xff0c;并…

大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集

大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO&#xff0c;VOC&#xff0c;COCO格式标注&#xff0c;4070张图片的数据集 数据集分割 4070总图像数 训练组 87&#xff05; 3551图片 有效集 9&#xff05; 362图片 测试集 4% 157图片 预处理 自动定向…

hdlbits系列verilog解答(Exams/m2014 q4a)-86

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节学习如何下图中的锁存器电路。 注意图中电路是锁存器,因此quartus会警告说推导出一个锁存器。 模块声明 module top_module ( input d, input ena, output q); 思路: 锁存器是一种对脉冲电平敏感的存储…

关于node全栈项目打包发布linux项目问题总集

1.用pm2部署nest 说明&#xff1a;如果一开始将nest直接打包放到linux服务器上用pm2执行则会报错&#xff0c;这是因为tsconfig.build.tsbuildinfo文件的路径以及相关依赖问题。 报错会为&#xff1a;什么东西找不到.... 所以建议以下为步骤一步一步配置 将整个nest添加压缩包直…

脉冲动画效果

js实现脉冲动画效果&#xff1a; 鼠标点击时&#xff0c;添加动画类&#xff0c;进而实现动画效果&#xff0c;鼠标离开时&#xff0c;移除动画类&#xff0c;回归静态图效果。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…

ollama部署bge-m3,并实现与dify平台对接

概述 这几天为了写技术博客,各种组件可谓是装了卸,卸了装,只想复现一些东西,确保你们看到的东西都是可以复现的。 (看在我这么认真的份上,求个关注啊,拜托各位观众老爷了。) 这不,为了实验在windows上docker里运行pytorch,把docker重装了。 dify也得重装: Dify基…

清远榉之乡托养机构探讨:自闭症的本质辨析

当人们谈及自闭症时&#xff0c;常常会产生一个疑问&#xff1a;自闭症是精神类疾病吗&#xff1f;今天&#xff0c;清远榉之乡托养机构就来为大家解开这个疑惑。 榉之乡大龄自闭症托养机构在江苏、广东、江西等地都有分校&#xff0c;一直致力于为大龄自闭症患者提供专业的支持…