范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Java应用日志如何与Jaeger的trace关联

  欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览经过《Jaeger开发入门(java版)》的实战,相信您已经能将自己的应用接入Jaeger,并用来跟踪定位问题了,本文将介绍Jaeger一个小巧而强大的辅助功能,用少量改动大幅度提升定位问题的便利性:将业务日志与Jaeger的trace关联在正式开始前,咱们先来看一个具体的问题:一次web请求可能有多条业务日志(log4j或者logback配置的那种),这和您写代码执行log.info的次数有关,假设有10条,那么十次请求就有一百条业务日志;通过jaeger发现这十次请求中有一次耗时特别长,想定位一下具体原因,现在问题来了:一共有100条业务日志,到底哪些是和Jaeger中耗时长的哪一次请求有关?您可能会说:有些业务特征如user-id,咱们可以写入span的tag或者log中,这样通过span查到user-id,再去日志中查找含有此user-id的日志即可,这样确实可以,但未必每条日志都有user-id,所以并非最佳方式好在Jaeger官方给出了一种简单有效的方案:基于MDC,Jaeger的SDK在日志中注入trace相关的变量关于MDC关于sl4j的MDC不是本篇的重点,因此只把本篇用到的特性简单说说即可,经验丰富的您如果对MDC已经了解,请跳过此节 在sl4j的配置文件中可以配置日志的格式,例如logback的配置文件如下,可见模板中新增了一段内容 [user-id=%X{user-id}] :                      INFO                                            %d{HH:mm:ss} [%thread] %-5level %logger{10} [user-id=%X{user-id}] %msg%n             utf-8              再来看一段日志的代码,先调用 MDC.put 方法将一个键值对写入当前线程的诊断上下文map(diagnostic context map),键名和上面的模板中配置的%X{user-id} 一模一样:@GetMapping("/test")     public void test() {         MDC.put("user-id", "user-" + System.currentTimeMillis());         log.info("this is test request");     }现在把代码运行起来,打印日志看看,如下所示,之前模板中配置的 %X{user-id} 已被替换成了user-1632122267618 ,就是代码中MDC.put 设置的值:15:17:47 [http-nio-18081-exec-6] INFO  c.b.j.c.c.HelloConsumerController [user-id=user-1632122267618] this is test request以上就是MDC的基本功能:对日志模板中的变量进行填充,填充的内容可以用 MDC.put 方法随意设置;此刻聪明的您应该能猜到jaeger官方的方案是如何实现的了,没错,就是借助MDC将trace信息填充到日志模板中,这样每行日志都有了trace信息,咱们在jaeger web页面中感兴趣的任何一次trace,都能找到对应的日志了 关于Jaeger的官方方案Jaeger的官方方案如下图所示,SDK已经把 traceId 、spanId 、sampled 写入当前线程的诊断上下文map(diagnostic context map),只要日志模板中配置上述三个变量,就会在所有业务日志中输出它们具体的值:
  看起来似乎非常简单,那就动手编码试试吧 编码实战jaeger与MDC的关联只是个小功能,没必要大张旗鼓的新建项目,基于《Jaeger开发入门(java版)》的代码继续开发即可,也就是说修改两个子工程jaeger-service-consumer和jaeger-service-provider的源码,让它们的业务日志打印出Jaeger的trace信息首先从 jaeger-service-provider 工程开始,增加一个标准的logback日志配置文件logback.xml ,如下所示,日志模板中已添加了traceId 、spanId 、sampled 变量:<?xml version="1.0" encoding="UTF-8"?>        logback                                 INFO                                            %d{HH:mm:ss} [%thread] %-5level %logger{10} [traceId=%X{traceId} spanId=%X{spanId} sampled=%X{sampled}] %msg%n             utf-8                                   再去检查配置类,确认JaegerTracer实例化时用了MDCScopeManager参数,如下所示,咱们在上一章已经这么做了,可以维持不变: package com.bolingcavalry.jaeger.provider.config;  import io.jaegertracing.internal.MDCScopeManager; import io.opentracing.contrib.java.spring.jaeger.starter.TracerBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class JaegerConfig {     @Bean     public TracerBuilderCustomizer mdcBuilderCustomizer() {         // 1.8新特性,函数式接口         return builder -> builder.withScopeManager(new MDCScopeManager.Builder().build());     } }接下来是在业务代码中随意加几行打印日志的代码,如下图红框所示:
  接下来继续修改 jaeger-service-consumer 子工程,具体步骤与刚才改造 jaeger-service-provider 时一模一样,就不多占用篇幅赘述了,记得在业务代码中随意加几行日志,如下图红框:
  开发完成,开始验证吧 验证像《Jaeger开发入门(java版)》那样操作,将 jaeger-service-consumer 和jaeger-service-provider 编译构建制作成docker镜像用docker-compose将所有服务启动,然后通过浏览器访问 jaeger-service-consumer 的服务,多访问几次打开jaeger的web页面,可以看到多次请求的trace,咱们随机选择一个,鼠标点击下图红框中的圆点:
  此时会跳转到该trace的详情页,注意页面的url,如下图红框,里面的 2037fe105d73f4a5 就是traceid:
  用 2037fe105d73f4a5 搜索 jaeger-service-provider 的日志,由于应用部署在docker中,咱们要用docker log和grep命令组合来过滤,如下所示,咱们代码写的日志都打印出来了,并且红框中就是traceid等关键信息
  再去查看 jaeger-service-consumer 的日志,如下图红框,本次请求相关的日志也可以通过traceid搜索到
  至此,本篇实战就完成了,Jaeger的web页面上的任何一个trace,现在都能轻易找到与之对应的所有业务日志,这在定位问题时简直是如虎添翼的效果,如果您的系统用了ELK或者EFK来汇总所有分布式服务的日志,那就更高效了 欢迎关注头条号:程序员欣宸学习路上,你不孤单,欣宸原创一路相伴...

小儿消化不良?试试这几种中成药!大山楂丸的药物组成为山楂炒麦芽及六神曲(麸炒),能开胃消食可用于因食积内停所导致的小儿消化不良,这种情况小孩子会出现脘腹胀闷,食欲不振等症状。需要注意该药适合三周岁以上的孩子使用。备孕怀不上,别再傻傻做试管了,中医一方专治不孕症!很多久备不孕的女性,去医院做了大大小小的检查,结果夫妻双方都没问题,却迟迟不见宝宝的到来,究竟是哪个环节出了问题?中医认为,不孕症的主要病机为肾气不足冲任气血失调,肾虚肝郁痰湿瘀血河北多地回应天然气限购中燃公司被指气源合同量不足中新经纬1月5日电越冷越停气限购致无法正常使用近日,多位网民留言投诉遭遇天然气限购停气问题,河北省多地官方作出回应。中燃公司自称资金紧张,从上游采购气量减少。人民网领导留言板栏目截16家上市公司预计2022年净利润增幅超100来源经济参考报部分公司2022年年度业绩预告数据来源WindWind数据显示,截至1月5日记者发稿时,A股市场共有98家公司发布了2022年年度业绩预告。其中,68家公司业绩预喜,优酷出头鸟?视频平台悄然收紧账号管理1月4日,针对优酷账号登录相关问题引发的热议,优酷回应称,会员服务仅可用作个人观看,不得以转让出租借用分享出售等方式提供给他人,考虑到绝大多数用户的使用习惯,优酷VIP协议规定,用真实记录新能源车100天能耗,不吹不黑9月24日提了比亚迪唐dmp旗舰6座版(插混),至今整整100天,经历了夏季的尾巴整个秋季以及初冬季。为确保大家看的直观,只选择上下班同样的路程,城市道路正常驾驶,用第四季度即10法国品牌WIKO助力华为!首款新机本月发支持5G鸿蒙生态头条创作挑战赛法国品牌WIKO助力华为!首款新机本月发支持5G鸿蒙生态wiko华为名为WIKO的神秘厂商你听说过吗?日前,法国科技品牌WIKO在微博首次亮相,国内官网同步上线,根据python处理Excel,从此爱上pythonpython能干的事情太多,对于小白来说,只能望洋生叹,不过不要灰心,看看我是如何使用python处理Excel的,你就能理解python的简单和高效。一Excel文件1文件路径F2022年推出的那些优秀的潜水手表2022年的潜水手表市场可谓是百花齐放,我们看到了众多标志性作品的改进版本,也见到了一些品牌开始顺应小尺寸的潮流,除此之外,更是迎来了两位超重量级深潜选手潜水表的设计理念在未来显然热情洋溢非凡之红这样穿搭更出彩大面积使用洋红的造型穿搭确实很难,较好的解决方案是一定程度的多露肤,或通过不同材质的混搭及在色彩深浅上稍作变化调整,而让整体造型显得更有层次感。与洋红相近的颜色如火龙果色紫红色玫红舒淇惊艳回归成大赢家!穿黑裙拍宝格丽广告,风情万种美到词穷舒淇每一次的亮相都能惊艳到我们,不久前舒淇为宝格丽拍摄的最新广告正式曝光,身穿黑色长裙的搭配搭配满身华丽的珠宝,整个人珠光宝气太有气场了,而波浪的披肩长发也让舒淇看上去更有魅力,简
最美家政人朱春南希望姐妹们身体健康,家政行业员工制早日实行我是朱春南,曾获评2020年上海市劳动模范荣誉称号被评选为全国总工会2021年最美家政人。在上海做家政十多年,从钟点工到如今服务涉外家庭,我坚持不断学习提升自我,并考入了上海开放大34岁美国女歌手穿沙滩装秀大码身材,并霸气喊话这身体就是艺术据美媒好莱坞生活1月7日报道,1月6日,34岁的美国女歌手莉佐(Lizzo)发布了一段最新视频,视频中她穿着沙滩装自信展示自己的大码身材,并抨击了社交媒体上那些不切实际的审美标准,清晨起床后的10分钟内有6大疾病预兆,中医专家提供的这几个方法可收藏很多慢性疾病在侵害我们的健康之前,都会表现出一些征兆,如果能识别并且采取措施处理,就能尽可能避免大病的发生。清晨起床后的10分钟内身体通常会发出6大信号,也许就是疾病预警信号,一定114分钟71分!他从全美第二高中生沦为次轮秀,如今开启逆袭之路面对没有锡安英格拉姆和麦科勒姆的鹈鹕,独行侠以127117轻松取胜,独行侠新秀贾登哈迪也久违的获得了连续出场的机会。今日的比赛,哈迪获得了生涯第二高的出战时间,一共登场20分51秒好吃又下饭!大叔教你马铃薯炖无骨鸡腿,简单易学,家人都喜欢马铃薯炖无骨鸡腿,好吃又下饭。食材无骨鸡腿排3片马铃薯2颗青葱2根蒜瓣5瓣油12小匙鸡腿腌料白胡椒粉12小匙五香粉12小匙素蚝油2大匙1冷冻无骨鸡腿排放冷藏低温解冻,拆封后洗过,用9种健康的绿汁食谱,味道和看起来一样好但是,当你在蔬菜和水果之间取得平衡时,绿色果汁可以成为搭配早餐的绝佳小吃或早晨提神饮品。它们是维生素矿物质和植物营养素的丰富来源,可以为您的健康做各种美妙的事情。所有这些深绿色蔬菜可恶!为什么我没有早点发现这个食谱,没有烤箱的快看关注大胖友图图,每天都能看到新奇,简单,美味又实用的食谱哦我是真的后悔没有早点知道这个食谱!原来没有烤箱也是可以做芝士烤红薯的!真的太简单了,你们有机会看到这个食谱的话一定要试试啊7分险胜!北京首钢击败南京同曦,利夫19分16篮板,曾凡博爆发第二阶段开始之后,北京首钢成为了黑马,解立彬的执教虽然还有一些问题,但也算是渐入佳境。南京同曦这边西热力江禁赛,球队并没有受到太多的影响,成绩也稳定在季后赛区。最终北京首钢在三节落苹果手表测出萝卜心率68次分,纸巾80次分!专家给出解释近日,包括苹果在内的多个知名品牌的智能手表手环给火腿肠速溶咖啡盒水果蔬菜等物品监测出血氧饱和度及心率等数据,引发网友热议。到底咋回事?苹果手表测出萝卜心率官方客服可能是设备比较灵敏平安夜读有一种坚持叫人民警察电波无形,平安相随当我们回望过去的时候,总会被自己的坚持所感动。因为,在每一段逝去的岁月里,不可能永远都是阳光雨露,还会有风霜雨雪,或许很难得到鲜花与掌声,但一定会遇到暗障和荆棘,冬天要多吃包菜,教你新吃法,不炒不炖不凉拌,一顿一大锅不够吃冬天要多吃包菜,教你新吃法,不炒不炖不凉拌,一顿一大锅不够吃。包菜又叫甘蓝,物美价廉,23块钱就能买到一颗。包菜的营养也很丰富,含有丰富的矿物质与微量元素,经常吃包菜,能够轻而易举