SkyWalking 自定义Span并接入告警

图容易被CSDN吞掉,我在掘金也发了:https://juejin.cn/post/7361821913398837248

我就是这么膨胀

最近在做 OpenAI API 套壳,当我使用 okhttp-sse 这个库进行流式内容转发的时候,我发现有些回调方法 SkyWalking 不能抓取到。这就出问题了。SLA 天天100%,整得我都不好意思说出来我的服务SLA比阿里、腾讯这些公司还牛X。

image.png

搞得我挺膨胀的,有一天有一个不知名的测试小伙子来和我说怎么回答没出来的时候,我是怀疑的。直接就给他来了一个三连:

  • 你会用吗?
  • 你网络行不行?
  • 哥,先别报老板,我看看。

我打开 SkyWalking 看到 SLA 100%,这时候我又膨胀了:

  • 你真的会用吗?
  • 你网络真的行吗?
  • 哥,你咋报群里给老板看了,我马上查还不行吗?

还好服务有日志,我一查果然芭比Q了。okhttp-sse 回调的时候报错了,但这个时候 SkyWalking 还显示 HTTP Status: 200。但是日志确实有报错,回答也确实没有。

有错就要认,挨打要立正

这不,测试小哥告老板去了。我们再不解决掉问题估计明天会因为左脚先进入公司而提取假期。解决问题的第一步,应该先弄清楚问题出在哪里?你面无表情的话语不剩多少意义,就当我求求你,给我一些说明。

image.png

来简单梳理一下 SSE 的工作流程:

没有 OpenAI 的时候是这样的
image.png

有了 OpenAI 之后是这样的

image.png

问题大概知道了,当连接建立的时候,服务端就返回了 200。那 SkyWalking 也无能为力呀。

image.png

服务端:服务真的报错的,你就探测 HTTP Status 是 200 了不起啊?

SkyWalking:按规范办事就是了不起。 OAI/OpenAPI-Specification: The OpenAPI Specification Repository (github.com)

image.png

自定义 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,我就不截图了,放张表情包凑合一下。

image.png

接入告警

自定义 Span 之后是能在链路追踪里看到了,但是怎么加告警呢?别急,看我操作。

image.png

还是不看我操作了,看吴晟大佬操作吧。

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)

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

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

相关文章

在no branch上commmit后,再切换到其他分支,找不到no branch分支的修改怎么办?

解决办法 通过git reflog我们可以查看历史提交记录&#xff0c;这里的第二条提交&#xff08;fbd3ea8&#xff09;就是我在no branch上的提交。 再通过git checkout -b backup fbd3ea8&#xff0c;恢复到上次提交的状态&#xff0c;并且为其创建个分支backup&#xff0c;此时…

跳出框架:Facebook的创新策略与社交影响

1. 引言 在数字化时代&#xff0c;社交媒体如同一面镜子&#xff0c;反映出我们社会的多元性和变革。Facebook&#xff0c;作为这面镜子中最明亮的一个&#xff0c;不仅改变了人们的日常生活&#xff0c;更深刻地塑造了社交、文化和经济的面貌。本文将深入探讨Facebook的创新策…

使用Python的subprocess标准模块Popen()函数打开文件

使用Python的subprocess标准模块Popen()函数打开文件 subprocess模块是Python标准库中用于创建和管理子进程的标准模块。其中Popen()这个函数Python标准模块subprocess中的Popen()函数用处非常广泛&#xff0c;它用于创建新的进程&#xff0c;执行外部命令&#xff0c;并与它们…

java中的泛型(二)——泛型接口以及泛型方法

在上一篇文章中&#xff0c;简要地对泛型的概念以及泛型类的使用进行了说明。除了在泛型类之外&#xff0c;泛型还可以在接口和方法中使用。 泛型接口 对于泛型接口&#xff0c;它的声明方式为: public interface 接口名 <泛型>{泛型定义的抽象方法}。这个声明方式和泛型…

网络安全实训Day15

写在前面 电子垃圾&#xff0c;堂堂恢复连载。本来不想分天数梳理了&#xff0c;但是最后要写实训报告&#xff0c;报告里还要有实训日记记录每日学的东西&#xff0c;干脆发这里留个档&#xff0c;到时候写报告提供一个思路。 网络空间安全实训-渗透测试 渗透测试概述 定义 一…

[Android14] SystemUI的启动

1. 什么是System UI SystemUI是Android系统级应用&#xff0c;负责反馈系统及应用状态并与用户保持大量的交互。业务主要涉及的组成部分包括状态栏(Status Bar)&#xff0c;通知栏(Notification Panel)&#xff0c;锁屏(Keyguard)&#xff0c;控制中心(Quick Setting)&#xff…

北京车展创新纷呈,移远通信网联赋能

时隔四年&#xff0c;备受瞩目的2024&#xff08;第十八届&#xff09;北京国际汽车展览会于4月25日盛大开幕。在这场汽车行业盛会上&#xff0c;各大主流车企竞相炫技&#xff0c;众多全球首发车、概念车、新能源车在这里汇聚&#xff0c;深刻揭示了汽车产业的最新成果和发展潮…

Rust中的函数指针

什么是函数指针 通过函数指针允许我们使用函数作为另一个函数的参数。函数的类型是 fn &#xff08;使用小写的 ”f” &#xff09;以免与 Fn 闭包 trait 相混淆。fn 被称为 函数指针&#xff08;function pointer&#xff09;。指定参数为函数指针的语法类似于闭包。 函数指…

前端到全栈进阶之“前端框架”

从前端入门到全栈-系列介绍 你会学到什么&#xff1f; 可能学不到什么东西&#xff0c;该系列是作者本人工作和学习积累&#xff0c;用于复习 系列介绍 现在的 Web 前端已经离不开 Node.js&#xff0c;我们广泛使用的 Babel、Webpack、工程化都是基于 Node 的&#xff0c;各…

react useEffect中window.removeEventListener没生效问题解决

在useEffect中写入window.removeEventListener没有生效&#xff0c;代码如下 useEffect(() > {const handleResize () > {console.log(window.innerWidth, window.innerHeight);};window.addEventListener(resize, handleResize);return () > {window.removeEventLi…

TiDB-PCTP考试复习

前言&#xff1a;本文仅作学习交流使用&#xff0c;对应《TiDB 数据库管理&#xff08;303&#xff09;》 补充&#xff1a;本文章仅用于个人学习&#xff0c;未经PingCAP书面许可&#xff0c;任何单位或个人不得将文档内容用于商业目的&#xff0c;或对本文章进行转载、编辑、…

商城数据库88章表36~39

schooldb库——utf8字符集——utf8_general_ci排序规则 先创建库&#xff0c;再去使用下列的DDL语句。 &#xff08;36&#xff09;DDL——操作记录表 CREATE TABLE huang_log_operates (operateid int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,staffid int(11) NOT NUL…

使用Keil移植工程时修改单片机型号参数

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 当使用Keil对STM32系列单片机开发时&#xff0c;如果使用的是库函数&#xff0c;那么不同型号单片机的工程项目文件是可以直接移植的。只需要按照下面的步骤修改对应的芯片&#xff0c;就可以直接将工程移植过去&a…

RabbitMQ(高级)笔记

一、生产者可靠性 &#xff08;1&#xff09;生产者重连&#xff08;不建议使用&#xff09; logging:pattern:dateformat: MM-dd HH:mm:ss:SSSspring:rabbitmq:virtual-host: /hamllport: 5672host: 192.168.92.136username: hmallpassword: 123listener:simple:prefetch: 1c…

hive启动beeline报错

问题一在zpark启动集群报错 出现上面的问题执行以下代码 chmod 777 /opt/apps/hadoop-3.2.1/logs 问题二启动beeline报错 执行 cd /opt/apps/hadoop-3.2.1 bin/hadoop dfsadmin -safemode leave 问题三执行查询语句报错 执行 set hive.exec.mode.local.autotrue;

flutter 解决ExpandableText组件三个点调整颜色问题

文章目录 前言一、相关代码总结 前言 最近写flutter项目&#xff0c;在使用ExpandableText时解决了一些问题&#xff0c;下面是解决方案&#xff0c;希望帮助到大家。 一、相关代码 1、代码如下&#xff1a; 2、我们设置linkColor就能设置ExpandableText三个点的颜色 Expand…

Spring Boot Admin

概述 Spirng Boot Admin 登录页面 Spring Boot Admin是一个用于管理Spring Boot应用的监控工具,它允许你查看和管理多个Spring Boot应用实例。用于应用信息进行界面化的展示&#xff0c;常常辅助我们开发人员快速查看服务运行状态在微服务架构中&#xff0c;Spring Boot Admin通…

微信小程序:6.事件

什么事事件 事件就是渲染层到逻辑层的通讯方式&#xff0c;比如提交表单&#xff0c;按钮点击都可以看作一个事件。 小程序中常用的事件 事件对象属性列表 当事件回调时&#xff0c;会收到一个事件对象event&#xff0c;他详细属性如夏表所示&#xff1a; target和curren…

微信小程序关于主包大小不能超过1.5MB的问题

常规的解决办法有以下几种 1、把资源文件改成远程服务器的&#xff0c;比如png这些 2、进入如图的分析页面&#xff0c;能明确知道你哪个插件包太大&#xff0c;我这里之前echart的包就1mb&#xff0c;现在给他缩减到了500kb的样子 3、解决vant等npm包太大的问题&#xff0c…

map与forEach的区别

JavaScript中的map和forEach都是数组原型上的方法&#xff0c;它们都可以用来遍历数组&#xff0c;但是它们之间存在一些基本的区别&#xff1a; 1.map方法&#xff1a; map会创建一个新数组&#xff0c;其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。 它返回…