微服务全链路跟踪:grpc集成zipkin

微服务全链路跟踪:grpc集成jaeger

微服务全链路跟踪:springcloud集成jaeger

微服务全链路跟踪:jaeger集成istio,并兼容uber-trace-id与b3

微服务全链路跟踪:jaeger集成hystrix

微服务全链路跟踪:jaeger增加tag参数

前言

> 微服务全链路跟踪:grpc集成jaeger中介绍了springboot集成jaeger,在现实使用时很多情况下需要根据业务id来搜索全链路,这里就需要注入tab来方便搜索,

方案

1、直接手动注入

@Controller
@RequestMapping("/demo")
@Api(tags = "demo")
@Slf4j
public class DemoController extends BaseController {
@Autowired
private Tracer tracer;
/**
*
*/
@GetMapping("/getTaskByid")
public ApiResponse getByid(@RequestParam("id") Long id)
{
if (tracer!=null&&tracer.activeSpan()!=null) {
tracer.activeSpan().setTag(“id”, id);
}
return ApiResponse.success(service.selectById(id));
} }

2、通过注解或者aop自动注入
下面主要介绍注解的方式

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JaegerLog { String tagName() default "id";
/**
* 操作对象ID
* @return
*/
String objectIdKey() default "";
} @Slf4j
@Aspect
@Order()
public class JaegerLogAspect {
@Autowired
private Tracer tracer; @Around("@annotation(jaegerLog)")
@SneakyThrows
public Object around(ProceedingJoinPoint point, JaegerLog jaegerLog) {
Object object = null;
Map<string, object> paramsMap = Maps.newHashMap();
try {
paramsMap .put("args", point.getArgs());
object = point.proceed();
paramsMap .put("response", object);
} catch (BusinessException e) {
throw new Exception(e);
}catch (Exception e) {
throw new Exception(e);
}finally {
try{
if (tracer!=null&amp;&amp;tracer.activeSpan()!=null&amp;&amp;StringUtils.isNotBlank(jaegerLog.objectIdKey())) {
String keyValue = getKeyValue(jaegerLog.objectIdKey(), params);
tracer.activeSpan().setTag(jaegerLog.tagName(), keyValue);
}
}catch (Exception e){
log.error(e.getMessage());
} }
return object ;
} private String getKeyValue(String key, Map<string, object> params) {
try {
Object value= JSONPath.eval(params, key);
if (mm != null) {
return value.toString();
}
} catch (Exception e) {
log.error("JSONPath.eval:", e);
}
return null;
} }
@Controller
@RequestMapping("/demo")
@Api(tags = "demo")
@Slf4j
public class DemoController extends BaseController { /**
*
*/
@GetMapping("/getByid")
@JaegerLog(objectIdKey = "args[0]")
public ApiResponse getByid(@RequestParam("id") Long id)
{
return ApiResponse.success(service.selectById(id));
}
/**
*
*/
@PostMapping("/add")
@JaegerLog(objectIdKey = "args[0].id")
public ApiResponse add(@RequestBody Map<string,string> parms)
{
return ApiResponse.success(service.add(parms));
} }

这样就可以自定义参数id来进行jaeger tag注入。
后面就可以根据注入的id来查询全链路结果,如下图:

</string,string></string,></string,>

微服务全链路跟踪:jaeger增加tag参数的更多相关文章

  1. Go微服务全链路跟踪详解

    在微服务架构中,调用链是漫长而复杂的,要了解其中的每个环节及其性能,你需要全链路跟踪. 它的原理很简单,你可以在每个请求开始时生成一个唯一的ID,并将其传递到整个调用链. 该ID称为Correlati ...

  2. Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin

    Zipkin 是一个开放源代码分布式的跟踪系统,由 Twitter 公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集.存储.查找和展现.它的理论模型来自于Google ...

  3. 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh

    微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构   本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...

  4. 微服务之分布式跟踪系统(springboot+zipkin+mysql)

    通过上一节<微服务之分布式跟踪系统(springboot+zipkin)>我们简单熟悉了zipkin的使用,但是收集的数据都保存在内存中重启后数据丢失,不过zipkin的Storage除了 ...

  5. SpringCloud初体验:六、利用 Sleuth 和 Zipkin 给微服务加上链路监控追踪查看功能

    首先:装上 Zipkin 服务,收集调用链跟踪数据,体验时装在了本机docker上, 方便快捷 docker run -d -p : openzipkin/zipkin 安装后访问地址也是 9411端 ...

  6. SpringBoot之微服务日志链路追踪

    SpringBoot之微服务日志链路追踪 简介 在微服务里,业务出现问题或者程序出的任何问题,都少不了查看日志,一般我们使用 ELK 相关的日志收集工具,服务多的情况下,业务问题也是有些难以排查,只能 ...

  7. SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践

    一. 前言 日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK +Filebeat . 话不多说,先看实现的效果图 ...

  8. 全链路跟踪skywalking简介

    该文章主要包括以下内容: skywalking的简介 skywalking的使用,支持多种调用中间件(httpclent,springmvc,dubbo,mysql等等) skywalking的tra ...

  9. 详解ElasticAPM实现微服务的链路追踪(NET)

    前言 Elastic APM实现链路追踪,首先要引用开源的APMAgent(APM代理),然后将监控的信息发送到APMServer,然后在转存入ElasticSearch,最后有Kibana展示:具体 ...

  10. 微服务 Zipkin 链路追踪原理(图文详解)

    一个看起来很简单的应用,可能需要数十或数百个服务来支撑,一个请求就要多次服务调用. 当请求变慢.或者不能使用时,我们是不知道是哪个后台服务引起的. 这时,我们使用 Zipkin 就能解决这个问题. 由 ...

随机推荐

  1. Java的运行机制和JDK,JRE,JVM的区别

    源文件(Java文件)   >  编译器  > 字节码(class文件)  >  JVM(java虚拟机)  >  操作系统  1.java首先利用文本编辑器写java源程序, ...

  2. Ubuntu 18.04安装xdrp以使用远程桌面

    背景 开发环境有一台服务器默认没有屏幕(被我拿走用来拓展屏幕了),有时候需要使用到界面但嫌弃拆显示器太麻烦,因此使用远程桌面来解决这个需求. 做法 安装xrdp sudo apt install -y ...

  3. Gitlab的安装和使用

    安装和配置必要的依赖项 yum install dnf sudo dnf install -y curl policycoreutils openssh-server #将SSH服务设置成开机自启动 ...

  4. 【ClickHouse】5:clickhouse集群部署

    背景介绍: 有三台CentOS7服务器安装了ClickHouse HostName IP 安装程序 程序端口 centf8118.sharding1.db 192.168.81.18 clickhou ...

  5. 3款C#开源且实用的工具类库,工作效率提升利器!

    前言 在日常工作开发中工具类库是软件开发中不可或缺的一部分,它们通过提供代码重用.通用功能.隐藏复杂性.提高代码质量.扩展性等方面的优势,帮助开发者更高效.更稳定地构建软件应用程序.今天大姚给大家分享 ...

  6. MongoDB分片+副本集高可用集群的启停步骤

    ■■ 集群启动步骤 1.先启动各节点的 config server mongod -f ${MongoDir}/conf/config.conf 2.再启动各节点的 shard server mong ...

  7. leetcode简单(数组,字符串,链表):[1, 9, 13, 14, 20, 21, 26, 27, 35, 58]

    目录 1. 两数之和 9. 回文数 13. 罗马数字转整数 14. 最长公共前缀 20. 有效的括号 21. 合并两个有序链表 26. 删除有序数组中的重复项 27. 移除元素 35. 搜索插入位置 ...

  8. oeasy教您玩转vim - 29 - # 垂直翻页

    ​ 垂直翻页 回忆上节课内容 我们上次了解了横向滚动的相关信息 横滚幅度 - sidescroll 横滚留位 - sidescrolloff 自动换行 - wrap g j.g k 可以逐行上下移动 ...

  9. Java 网络编程(TCP编程 和 UDP编程)

    1. Java 网络编程(TCP编程 和 UDP编程) @ 目录 1. Java 网络编程(TCP编程 和 UDP编程) 2. 网络编程的概念 3. IP 地址 3.1 IP地址相关的:域名与DNS ...

  10. Python 利用argparse模块实现脚本命令行参数解析

    利用argparse模块实现脚本命令行参数解析 By:授客 QQ:1033553122 #代码实践1 study.py内容如下 #!/usr/bin/env python # -*- coding:u ...