Trace链异常检测汇总

        微服务应用与单块应用完全不同,一个微服务系统少则有几十个微服务组成,多则可能有上百个服务。比如BAT级别的互联网公司,一般都超过上百个服务,服务之间的依赖关系错综复杂,如果没有有效的监控手段,那么出现问题很难快速排查,最终会导致业务损失。在微服务监控领域,当分布式系统发生故障时,由于服务之间复杂且动态的互相依赖关系,诊断与定位故障根因往往是非常困难的, 调用链监控是比较有效的手段,它不仅可以实时监控服务调用性能,也可以实时跟踪服务的依赖关系,出现问题的时候,通过调用链监控,可以帮助我们快速定位问题和排障,可以说微服务离不开调用链监控。

假设有3个服务,service1, service2, service3. 他们之间是有调用关系的。当外部请求进来的时候:用户请求先到service1, service1调用redis缓存(红色小方块),redis返回service1数据。service1调用service2,service2调用mysql,mysql返回service2数据。service2调用service3, service3返回给service2service2返回给service1service1返回给用户。

架构知识

微服务系统一般采用K8S(Kubernetes)微服务架构,在这个架构下,与trace链相关的概念有三个:pod,node,service,通常做trace链异常定位时,需要知道是pod级别还是node级别或者service级别的故障,并且需要知道对应的编号(如node-1)。

Kubernetes创建了一个Pod来放置你的应用实例,pod是Kubernetes上最小部署单元。Pod是Kubernetes中的一个抽象概念,一个Pod包含了一组应用容器(比如Docker或者rkt)和这些容器共用的资源。pod模拟出了一个应用运行所需要的“逻辑主机”;一个Pod总是运行在一个Node上。在Kubernetes中一个Node是一个执行具体工作的机器,它可用是虚拟机也可用是物理机,这个取决于所在的集群。每个Node都由Master统一管理。每个Node上面可用有多个Pod,Kubernetes Master会自动在Node之间处理调度相关的处理。Master自动调度会记录每个Node上的可用资源。

按故障粒度来分的话,service最粗糙,node次之,pod最细粒度,node可以理解成一个物理虚拟机,pod可以理解成一个虚拟机上的容器(如docker这种),每个service可以调用不同虚拟机上的容器服务(一个service包含3-4个pod),但是这个3-4pod不一定部署在一台虚拟机上(分布式系统的特点,能最大程度利用资源)。

trace链实现异常检测与根因定位

Trace链做异常检测时,是以每条trace链作为研究对象或一个样本,由于trace调用结构有差异性,所以需要先要确定trace的常用标准模式,然后在常用标准模式下构建模型训练集去判断是否异常;判断完一条trace链异常之后需要做根因定位,根因定位的研究对象是trace链上的每一个节点(span、service等视数据粒度而定),一般定位结果[cmdb_id, fault_type, prob, topk],其中cmdb_id可以理解为是哪个级别(pod、node、service)的故障,fault_type(结合metic指标,如容器类故障、磁盘故障等),prob指故障概率,topk是指出现故障的前K个节点,这个取K不一定根据异常分数,也需要考虑调用顺序。

trace链构建算法输入

Trace链中一个样本可以是一个trace也可以是一个span,当样本为一个trace时,特征一般为trace下子节点(span、operation等)的时延、日志、状态码信息,当以span作为子节点时,每条trace的节点长度不一致(除非采取类似于词向量embedding的方式编码成等长的向量),导致模型输入特征长度不一致,需要构建多个trace异常检测模型对trace链进行异常检测,由于实际数据中的标签缺乏,通常问题会定义为无监督、半监督的问题。一般来说,适用span作为一个样本时,主要是用来做根因检测,由于trace链数据频率高且多,所以做根因定位时不应用较为复杂的方法,通常会对每个trace模式下的span进行统计上异常判断。

1)对每一个trace_id进行LOUDS编码(30年前,现在有surf),LOUDS利用每个trace下的服务(span_id、operation)进行编码形成调用树,调用树表示调用结构,可以还原调用关系,除此之外会对trace_id和operation进行重新编码、去重,对每一个operation,存储其时延信息。

2)在训练集上分别统计normal和fault的trace调用模式,筛选调用次数多(>5000次)的作为调用的关键模式,目的为了提高搜索匹配效率

3)实时检测时,对一定时间间隔内(5分钟内)的调用信息中的每一个trace先进行编码,与调用模式库进行匹配(只匹配标准模式),对于标准模式匹配上的调用树,导出对应trace模式下的训练集,先进行无监督或半监督的异常检测,判断待检测trace链是否异常。如若异常,则对trace链从上至下进行时延6_sigma进行异常检测,超出6sigma的视为异常,同时统计历史样本中该服务的次数与异常次数,将其比值作为后验概率,加入trace链异常检测理论上能搞提高检测效率,因为新来一条trace不一定都要做根因分析。

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

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

相关文章

基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

PCL 点到三角形的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 给定三角形ABC和点P,设Q为描述ABC上离P最近的点。求Q的一个方法:如果P在ABC内,那么P的正交投影点就是离P最近的点Q。如果P投影在ABC之外,最近的点则必须位于它的一条边上。在这种情况下,Q可以通过计算线段AB、…

vue项目初始化和部署

目录 1. 技术简介... 2 2. 安装Node.js. 3 3. 全局安装Vue CLI (脚手架工具) 5 4. 创建一个新的Vue项目... 6 5. 在阿里云虚拟机安装和配置Nginx. 9 6. 将Vue项目打包部署到Nginx下... 14 7. 访问部署的项目... 14 1. 技术简介 Vue.js(通常简称为Vue&#x…

【亲测有效】微信公众号设置菜单栏显示,未开启自定义菜单,微信公众平台自定义菜单接口开发

微信公众平台自定义菜单接口开发 问题:运营人员在设置微信公众号设置菜单栏显示,未开启自定义菜单解决方案(微信公众平台自定义菜单接口开发):自定义菜单-创建接口请求链接完整代码第一步:在WeChat类里添加代码情况一:没有WeChat类情况,如果已有请看情况二情况二:已有…

以诚待人,用心做事,做到最好,追求更好

无数个日日夜夜,终于换来了这样一份努力的证明。 2023年,收获满满,前一阵子拿到了证书,忘记拍照了,今天抽空记录一下 收获!又得到一份肯定,这份荣誉证书将伴随我一直为了进步而奋斗&#xff1a…

electron 打不同环境的包

我用的打包工具: electron-builder 1、在package.json 文件的同级下创建2个js文件 electron-builder-test.config.js electron-builder.config.js electron-builder-test.config.js const basejson require(./electron-builder.config.js); module.exports {extraMetada…

CSS面试题常用知识总结day03

大家好我是没钱的君子下流坯,用自己的话解释自己的知识 前端行业下坡路,甚至可说前端已死,我还想在前段行业在干下去,所以从新开始储备自己的知识。 从CSS——>Javascript——>VUE2——>Vuex、VueRouter、webpack——>…

基于Spring Boot的旅游管理系统设计与实现

基于Spring Boot的旅游管理系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 旅游方案,用户通过旅游方案可以查看方案编号…

python 04字典映射

1.创建字典 (1)通过自己的输入创建字典 字典用大括号,至此,小括号( )表示元组,中括号[ ]表示列表,大括号{ }表示字典,python中最常用的三种数据结构就全了 (2)通过其他…

书生·浦语大模型实战营 | 第2次学习笔记

前言 书生浦语大模型应用实战营 第二期正在开营,欢迎大家来学习。(参与链接:课程升级,算力免费,书生浦语实战营第二期学员招募|活动预告https://mp.weixin.qq.com/s/YYSr3re6IduLJCAh-jgZqg) …

git上传到本地仓库

摘要:本地初始化init仓库,进行pull和push;好处是便于利用存储设备进行git备份 git init --bare test.git 随便到一个空的目录下git clone 然后使用git上传 把git仓库删除之后再clone一次验证一下是否上传成功: 如果在ubantu上面没…

leetcode.707. 设计链表

题目 题意: 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的…

Redis安装说明2

Redis安装说明 1.3.2.指定配置启动 如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(/usr/local/src/redis-6.2.6),名字叫redis.conf: 我们先将这个配置文件备份一…

原创【matcap材质在ue4中的实现办法】

matcap材质在ue4中的实现办法 2023-08-29 15:34 https://www.bilibili.com/video/BV1GR4y1b76n/?spm_id_from333.337.search-card.all.click&vd_sourced76b773892c830a157c0ccc97ba78411 评论(0)

Sora是什么?Sora怎么使用?Sora最新案例视频以及常见问题答疑

Sora 是什么? 2024年2月16日,OpenAI 在其官网上面正式宣布推出文本生成视频的大模型Sora 这样说吧给你一段话, 让你写一篇800字的论文,你的理解很可能都有偏差,那么作为OpenAi要做文生视频到底有多难,下面…

聊聊公众号最让我不爽的两个痛点

本文首发于 Python猫 微信公众号最让我不爽的地方有两个,而且有很多人虽然也不爽,却不知道原因。 本文想聊聊公众号的两个痛点,因为我经常收到私信问这两个问题,本文算是一次集中的回复吧。 第一个不爽的点是公众号会屏蔽外链&…

vulhub打靶记录——Corrosion2

文章目录 主机发现端口扫描ssh—22search openssh EXP web服务—8080目录扫描登录tomcat后台 提权切换用户查看用户权限寻找SUID命令破解登录密文 总结 主机发现 使用nmap扫描局域网内存活的主机,命令如下: nmap -sP 192.168.151.0/24192.168.151.1&am…

1分钟带你学会使用NumPy对数组的级联合并操作

1.np.concatenate() ​参数是列表或元组 级联的数组维度必须相同 可通过axis参数改变级联的方向 注意,np.concatenate函数要求所有输入数组在沿着连接轴的维度上具有相同的形状 # 导包import numpy as np​# 创建两个二维数组n1 np.random.randint(0,100,size…

中非绿色能源合作走深走实

近日,第十六届非洲能源大会在南非立法首都开普敦举行,探讨实现非洲能源转型的可持续解决方案。近年来,中国与非洲国家不断加强绿色能源合作,促进双方优势资源互补,逐步探索合作共赢的绿色能源合作方案。 势头良好 近年…

[lesson10]C++中的新成员

C中的新成员 动态内存分配 C中的动态内存分配 C中通过new关键字进行动态内存申请C中的动态内存申请是基于类型进行的delete关键字用于内存释放 new关键字与malloc函数的区别 new关键字是C的一部分malloc是由C库提供的函数new以具体类型位单位进行内存分配malloc以字节位单位…