当前位置:网站首页>Who says cat can't do link tracking? Stand up for me
Who says cat can't do link tracking? Stand up for me
2020-11-06 01:29:00 【Yin Jihuan】
background
Link tracking , We have a lot of options . Common are zipkin,pinpoint,skywalking,jaeger etc. .
It's basically based on Google 《Dapper A tracking system for large-scale distributed systems 》 This paper developed .
Today, let's talk about Cat How to implement link tracking in , Never used Cat You can check this article of mine 《 Stay up late : One article for you to understand Cat Distributed monitoring 》 Get to know .
stay Cat It is convenient to see the total time consumption and business operation of each request , The time consumption of database operations . The call between services can also be monitored by means of embedding points .
Here's the picture , As you can see, one was initiated within the request RPC Call to ,callRPC The first record . Time consuming 11ms, But this RPC Where is the time spent inside the service , You can't view it directly here , You can only check it in another service , Not very convenient .

In detail, I drew a picture to illustrate the current problem :

As can be seen from the above figure , A request passes through multiple services , Each service has a buried point for remote or local calls , In this way, the exceptions and performance indicators of the call can be monitored .
The next part is in Cat Let's take a look at the scenarios of these indicators ,Cat Data presentation in is presented in terms of project dimensions , So each service has its own monitoring data .
If I want to know about that request , Where is the slowest in the whole link , Where does it take , I have to go separately 4 This information can only be seen in the following services , Is not intuitive .
Realization way
As shown in the figure below :
From gateway to service , From service to service , We need to Trace Only when the information is transmitted can the whole link be concatenated . Only when they are connected together can they be in Cat View the time-consuming information of the whole link in the .

The effect that this article needs to realize is that it can be at the entrance of the request ( gateway ), See all the services that this request passed through , Time spent in each service .
To connect the whole request , There must be a unique request identifier , Generally we call it traceId. The rest of the work is to pass the link related information layer by layer .
First, receive the request header information in the filter of each service , From gateway to service A, So service A This information needs to be received and passed on to the next service .
HTTP Request message tree construction :
// Building a remote message tree if(request.getHeader(CatConstantsExt.CAT_HTTP_HEADER_ROOT_MESSAGE_ID) != null){CatContext catContext = new CatContext();catContext.addProperty(Cat.Context.ROOT,request.getHeader(CatConstantsExt.CAT_HTTP_HEADER_ROOT_MESSAGE_ID));catContext.addProperty(Cat.Context.PARENT,request.getHeader(CatConstantsExt.CAT_HTTP_HEADER_PARENT_MESSAGE_ID));catContext.addProperty(Cat.Context.CHILD,request.getHeader(CatConstantsExt.CAT_HTTP_HEADER_CHILD_MESSAGE_ID));Cat.logRemoteCallServer(catContext);}
When passing the message tree information to the next service, it depends on how you call it , If you use Feign perhaps RestTemplate You can use interceptors to deliver .
public class FeignRequestInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {CatContext catContext = new CatContext();Cat.logRemoteCallClient(catContext,Cat.getManager().getDomain());template.header(CatConstantsExt.CAT_HTTP_HEADER_ROOT_MESSAGE_ID, catContext.getProperty(Cat.Context.ROOT));template.header(CatConstantsExt.CAT_HTTP_HEADER_PARENT_MESSAGE_ID, catContext.getProperty(Cat.Context.PARENT));template.header(CatConstantsExt.CAT_HTTP_HEADER_CHILD_MESSAGE_ID, catContext.getProperty(Cat.Context.CHILD));}}
If I use theta Dubbo You can use Dubbo Of Filter To achieve the same effect .
The final effect is shown in the figure below , Called articles/newest Interface , Gateway forwards request to article-provider service ,article-provider Call... Again user-provider Of users/uid Interface to get user information , most important of all user-provider We can also see the time consuming of these operations here , Very convenient .

Complete source reference : https://github.com/yinjihuan/kitty
About author : Yin Jihuan , Simple technology enthusiasts ,《Spring Cloud Microservices - Full stack technology and case analysis 》, 《Spring Cloud Microservices introduction Actual combat and advanced 》 author , official account Ape world Originator . Personal wechat jihuan900 , Welcome to hook up with .
I have compiled a complete set of learning materials , Those who are interested can search through wechat 「 Ape world 」, Reply key 「 Learning materials 」 Get what I've sorted out Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC Sub database and sub table , Task scheduling framework XXL-JOB,MongoDB, Reptiles and other related information .

版权声明
本文为[Yin Jihuan]所创,转载请带上原文链接,感谢
边栏推荐
- 零基础打造一款属于自己的网页搜索引擎
- Python基础变量类型——List浅析
- Using NLP and ml to extract and construct web data
- Calculation script for time series data
- IPFS/Filecoin合法性:保护个人隐私不被泄露
- JVM memory area and garbage collection
- Python Jieba segmentation (stuttering segmentation), extracting words, loading words, modifying word frequency, defining thesaurus
- 6.6.1 localeresolver internationalization parser (1) (in-depth analysis of SSM and project practice)
- OPTIMIZER_ Trace details
- ES6学习笔记(五):轻松了解ES6的内置扩展对象
猜你喜欢

仅用六种字符来完成Hello World,你能做到吗?

Tool class under JUC package, its name is locksupport! Did you make it?

Brief introduction of TF flags

Windows 10 tensorflow (2) regression analysis of principles, deep learning framework (gradient descent method to solve regression parameters)

一篇文章带你了解CSS3 背景知识

一篇文章教会你使用HTML5 SVG 标签

vue-codemirror基本用法:实现搜索功能、代码折叠功能、获取编辑器值及时验证

前端都应懂的入门基础-github基础

Arrangement of basic knowledge points

Three Python tips for reading, creating and running multiple files
随机推荐
EOS创始人BM: UE,UBI,URI有什么区别?
ES6学习笔记(二):教你玩转类的继承和类的对象
Vite + TS quickly build vue3 project and introduce related features
Arrangement of basic knowledge points
Wow, elasticsearch multi field weight sorting can play like this
Common algorithm interview has been out! Machine learning algorithm interview - KDnuggets
零基础打造一款属于自己的网页搜索引擎
Summary of common algorithms of binary tree
Python filtering sensitive word records
一篇文章教会你使用Python网络爬虫下载酷狗音乐
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
keras model.compile Loss function and optimizer
If PPT is drawn like this, can the defense of work report be passed?
ES6学习笔记(五):轻松了解ES6的内置扩展对象
Recommendation system based on deep learning
git rebase的時候捅婁子了,怎麼辦?線上等……
Python + appium automatic operation wechat is enough
Analysis of etcd core mechanism
教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化
[JMeter] two ways to realize interface Association: regular representation extractor and JSON extractor