SkyWalking 自定义Span并接入告警
图容易被CSDN吞掉,我在掘金也发了:https://juejin.cn/post/7361821913398837248
我就是这么膨胀
最近在做 OpenAI API
套壳,当我使用 okhttp-sse
这个库进行流式内容转发的时候,我发现有些回调方法 SkyWalking
不能抓取到。这就出问题了。SLA 天天100%,整得我都不好意思说出来我的服务SLA比阿里、腾讯这些公司还牛X。
搞得我挺膨胀的,有一天有一个不知名的测试小伙子来和我说怎么回答没出来的时候,我是怀疑的。直接就给他来了一个三连:
- 你会用吗?
- 你网络行不行?
- 哥,先别报老板,我看看。
我打开 SkyWalking
看到 SLA 100%,这时候我又膨胀了:
- 你真的会用吗?
- 你网络真的行吗?
- 哥,你咋报群里给老板看了,我马上查还不行吗?
还好服务有日志,我一查果然芭比Q了。okhttp-sse
回调的时候报错了,但这个时候 SkyWalking
还显示 HTTP Status: 200
。但是日志确实有报错,回答也确实没有。
有错就要认,挨打要立正
这不,测试小哥告老板去了。我们再不解决掉问题估计明天会因为左脚先进入公司而提取假期。解决问题的第一步,应该先弄清楚问题出在哪里?你面无表情的话语不剩多少意义,就当我求求你,给我一些说明。
来简单梳理一下 SSE 的工作流程:
没有 OpenAI
的时候是这样的
有了 OpenAI
之后是这样的
问题大概知道了,当连接建立的时候,服务端就返回了 200。那 SkyWalking
也无能为力呀。
服务端:服务真的报错的,你就探测 HTTP Status 是 200 了不起啊?
SkyWalking:按规范办事就是了不起。 OAI/OpenAPI-Specification: The OpenAPI Specification Repository (github.com)
自定义 Span
涉及到自定义的问题,不要犹豫一把梭这个库就行了。
the toolkit, such as using maven or gradle | Apache SkyWalking
注意:依赖版本和你使用的 java-agent
版本保持一致
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>${skywalking.version}</version>
</dependency>
导入依赖之后,就创建一个Span,有多种方式可以创建:
@Trace(operationName = "{name}")
ActiveSpan.setOperationName("{name}")
设置完 OperationName
之后,保险起见应该在 SkyWalking UI 查一下这个 span 在不在?
如果你真的去看就会发现真的有这个Span,我就不截图了,放张表情包凑合一下。
接入告警
自定义 Span 之后是能在链路追踪里看到了,但是怎么加告警呢?别急,看我操作。
还是不看我操作了,看吴晟大佬操作吧。
Can skywalking display the metrics(such as resp_time or cpm)of a logic endpoint, in the service dashboard (not endpoint dashboard)? · apache/skywalking · Discussion #10864 (github.com)
The Logic Endpoint | Apache SkyWalking
总结一下就是,加个 tag
:
@Tag(value = "x-le", key = "{\"logic-span\":true}")
ActiveSpan.tag("x-le", "{\"logic-span\":true}")
加完 tag
之后这个 Span
就是一个有证的 Endpoint
了,它可以在SkyWalking UI 中查询到。也能使用 OAL 表达式里面指标来进行告警操作。
贴个示例:
reaction_stream_failure_rule:expression: sum((endpoint_sla / 100) < 100) >= 1period: 3silence-period: 1include-names:- 'Reaction/stream in fake-service'message: 'SSE回答异常'
我还写过一篇告警配置的文章,来宠幸一下她吧:https://juejin.cn/post/7344567669893021736
Ref
the toolkit, such as using maven or gradle | Apache SkyWalking
The Logic Endpoint | Apache SkyWalking
Can skywalking display the metrics(such as resp_time or cpm)of a logic endpoint, in the service dashboard (not endpoint dashboard)? · apache/skywalking · Discussion #10864 (github.com)
相关文章:

SkyWalking 自定义Span并接入告警
图容易被CSDN吞掉,我在掘金也发了:https://juejin.cn/post/7361821913398837248 我就是这么膨胀 最近在做 OpenAI API 套壳,当我使用 okhttp-sse 这个库进行流式内容转发的时候,我发现有些回调方法 SkyWalking 不能抓取到。这就…...

代理IP,助力海外社媒运营!
社交媒体在营销中的作用不仅仅是传播信息,更是明确品牌定位、建立品牌形象、加强用户互动、提升市场竞争力的重要途径。因此很多外贸从业人员都会使用海外社媒平台进行客户的寻找和开发,这也意味着他们需要深入了解目标市场的文化、价值观、语言习惯和消…...

手撕spring框架(3)
手撕spring框架(3) 相关系列 手撕spring框架(1) 手撕spring框架(2) 手撕spring框架(4) InitializingBean 接口详解 什么是 InitializingBean 接口? InitializingBean 接…...
Swift手撸轮播效果
一、创建ScrollView objcMembers class LSLottieAnimView: UIView, UIScrollViewDelegate {private var scrollView: UIScrollView UIScrollView()func addScrollView() {scrollView.showsHorizontalScrollIndicator falsescrollView.isPagingEnabled true// 自定义framesc…...

数据分析——业务数据描述
业务数据描述 前言一、数据收集数据信息来源企业内部数据源市场调查数据源公共数据源和第三方数据源 二、公司内部数据客户资料数据销售明细数据营销活动数据 三、市场调查数据观察法提问法实验法 四、公共数据五、第三方数据六、数据预处理七、数据清洗丢弃部分数据补全缺失的…...

【哈希表】Leetcode 14. 最长公共前缀
题目讲解 14. 最长公共前缀 算法讲解 我们使用当前第一个字符串中的与后面的字符串作比较,如果第一个字符串中的字符没有出现在后面的字符串中,我们就直接返回;反之当容器中的所有字符串都遍历完成,说明所有的字符串都在该位置…...

(三)JVM实战——对象的内存布局与执行引擎详解
对象的内存布局 对象的实例化 对象的创建方式 - new的方式 - Class的newInstance():反射的方式 - Construct的newInstance() - clone:实现Cloneable接口,默认浅拷贝 - 使用反序列化:将二进制流转化为内存对象 创建对象的步骤 - 判断对象对应的类是否加载、链接、初…...

微信视频号如何变现呢,视频号涨粉最快方法
今天给大家带来的是视频号分成计划 视频号流量主这个项目,可以说这是目前的一个蓝海赛道,做的人也少,外面开的培训也很少,作为副业还是比较适合个人的,如果想批量操作这个项目,也比较适合工作室的。而且这…...

数智先锋 | 多场景数据治理案例,释放数据要素生产力
数据作为第五大生产要素,成为释放新质生产力的关键基础。 当前各个行业数字化建设如火如荼,全力挖掘数据价值以驱动行业高质量应用发展。数据治理成为数据要素价值发挥的重要基础和前提。 数据治理不单是技术问题,不是依赖工具就能解决的&a…...

UE5 audio capture 回声问题 ||在安卓上有爆鸣声
参考视频 0.基本步骤 【UE4_蓝图】录制麦克风声音/系统声音并输出保存WAV文件_ue4录音-CSDN博客 1.步骤 1.创建Sound Submix A 2. 右键新建Sound Submix B 3.把B的两个参数调为-96 4.audio capture的Base Submix,把前面提到的A赋值进去 5.开始录制输出和完成录制…...
第 10 场蓝桥杯小白入门赛题解
1.五一礼物【算法赛】 - 蓝桥云课 (lanqiao.cn) #include <iostream> using namespace std; int main() {cout<<"51"<<endl;return 0; }2.合成贤者之石【算法赛】 - 蓝桥云课 (lanqiao.cn) 假设黄水晶的个数是 x x x,那蓝水晶个数肯定是 x − 1 …...
抖音视频评论区用户采集 根据视频链接批量获取用户信息
要批量获取抖音视频评论区用户的信息,可以通过抖音开放平台的接口来实现。 首先,你需要在抖音开放平台注册开发者账号,并创建一个应用。然后,使用抖音开放平台提供的接口,可以根据视频链接获取视频的详细信息…...

C++ 多态(一)
一、多态定义 同一种操作作用于不同的对象时,可以产生不同的行为。在面向对象编程中,多态性是指通过继承和重写实现的,同一个方法在不同的子类中可以表现出不同的行为。多态性可以提高代码的灵活性和可扩展性,使得程序更易于维护…...

[Linux][网络][TCP][一][TCP基础][TCP报头]详细讲解
目录 1.TCP头部格式2.TCP协议的特点3.TCP如何封装与分用4.通过序列号和确认应答号提高可靠性1.32位序列号2.32位确认应答号3.保证可靠性4.为什么序列号和确认应答号是单独的字段 5.窗口大小1.TCP的发送和接收缓冲区2.窗口大小 6.连接管理机制 1.TCP头部格式 TCP全称为"传输…...

java-函数式编程-函数对象
定义 什么是合格的函数?无论多少次执行函数,只要输入一样,输出就不会改变 对象方法的简写 其实在类中,我们很多参数中都有一个this,被隐藏传入了 函数也可以作为对象传递,lambda就是很好的例子 函数式接口中…...

致远oa实时获取第三方自定义组件实现
背景 最近的一个需求不好处理,甲方没有准确的数据支撑,各种问题踢皮球,所以有时间实现一个实时获取数据的组件 需求 为了实现方便,封装了一个第三方数据实时展示的组件 只要修改配置,就可以实现字段的删除增加&…...

【Linux-点灯烧录-SD卡/USB烧写】
目录 1. 烧写方式2. 烧写之代码编译2.1 led.s->led.o2.2 led.o->led.elf2.3 led.elf->led.bin2.4 反汇编:led.elf->led.dis 3. 烧写之烧录到SD卡上:3.1 开启烧录软件权限:3.2 确定SD卡的格式:FAT323.3 烧录到SD卡上3.…...
PostgreSQL自带的命令行工具06- pg_isready
PostgreSQL自带的命令行工具06- pg_isready 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777pg_isready 是 Po…...

【请投票】嘉立创EDA中LED发光二极管是否应有统一的引脚定义?
LED发光二极管的引脚定义应该是唯一的吗? 从下面原理图可以看到,器件型号仅尾缀不同,R代表RED红色发光二极管,W代表WHITE指白色发光二极管,是同一家制造商KENTO, 左侧红色发光二极管的1脚是阴极K,2脚是阳极…...

LT6911UXB HDMI2.0 至四端口 MIPI DSI/CSI,带音频 龙迅方案
1. 描述LT6911UXB 是一款高性能 HDMI2.0 至 MIPI DSI/CSI 转换器,适用于 VR、智能手机和显示应用。HDMI2.0 输入支持高达 6Gbps 的数据速率,可为4k60Hz视频提供足够的带宽。此外,数据解密还支持 HDCP2.2。对于 MIPI DSI / CSI 输出࿰…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...