SkyWalking 为所有的API接口增加 tag

2024-04-16 05:52

本文主要是介绍SkyWalking 为所有的API接口增加 tag,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景胡扯

线上接口报错,接着被 SkyWalking 抓到,然后 SkyWalking 触发告警,最后老板@你,让你辛苦一下,在明早上班前把这个bug 改了,并告诉你你是全公司的希望。谁说不是呢?为公司业务保驾护航,我被责无旁贷。

既然告警都触发了,咱就来看看怎么个事。嘿嘿小样,这下还能让你跑了。(实际上还真的有可能跑了,说多了都是泪)

image.png

我打开 SkyWalking UI 一看,报错服务说要和我试试,我说可以。我一说他啪的一下一个显眼的红色报错直冲我面门,我鼠标一点,当时就全部防住了。防出去以后自然是传统功夫以点到为止,鼠标放在了报错上,没点他。我笑一下,准备收拳。

因为这时间,按传统功夫的点到为止他已经输了,如果我点下去,就直接把他错误堆栈打印出来了,我就鼠标放在错误上没点他。

我收鼠标的时间不打了,他突然袭击抛出上下文,我大意了啊,没有闪。他的上下文给我眼晃了一下,我当时流眼泪了,捂着眼,我说婷婷。上下文怎么没有用户标识。然后两分钟以后就好了,完犊子日志里面也没有。

看来是有备而来,这个服务不讲武德,来骗来偷袭我这个老码农。这好吗?这不好。

总之,就是缺少一些上下文数据,例如用户ID,设备ID这类的数据,我们给补上就行了,给马老师一个闪避的buff。

上菜:附加上下文

看一下官网的文档,怎么样能够给接口添加上下文数据

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>

然后才是第二部附加上下文 tag,我总结了三种方式:

第一种是最直接的,直接调用 ActiveSpan.tag("my_tag", "my_value") 操作接口。特点就是直接到不能再直接了。

@GetMapping("/xxx")
public Result<User> query() {  ActiveSpan.tag("my_key", "my_value");  // 其他代码。。。 
}

第二种是简单的,在接口方法上打上注解 @Trace@Tag。特点是简单到不能再简单了。

@Trace
@Tag(key = "tag1", value = "arg[0]")
@Tag(key = "tag2", value = "arg[1]")
@Tag(key = "username", value = "returnedObj.username")
@Tag(key = "age", value = "returnedObj.age")
public User methodYouWantToTrace(String param1, String param2) {// ...
}

第三种是相对优雅的,在拦截器上使用API统一操作。特点是无侵入。

public class SkyWalkingTraceContextInterceptor implements HandlerInterceptor {  @Override  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {  // 这里太简单粗暴了,别抄哈。只是提供一种思路String token = request.getHeader(TokenParserConfig.HEADER_TOKEN_KEY);  if (StringUtils.isNotBlank(token)) {  ActiveSpan.tag("biz.token", token);  }  }  
}

如果要能够根据 tag 来进行搜索,不要漏掉最后这一步。在配置文件中增加我们的 tag key,或者直接修改环境变量 SW_SEARCHABLE_TAG_KEYS 也行。

searchableTracesTags: ${SW_SEARCHABLE_TAG_KEYS:http.method,http.status_code,rpc.status_code,db.type,db.instance,mq.queue,mq.topic,mq.broker,mq.payload,biz.token}

大功告成!

这篇关于SkyWalking 为所有的API接口增加 tag的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907943

相关文章

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo