通过流量监控可以监控流量概况、组件运行状态、调用链等信息,并在系统业务异常时快速定位到问题点。
Header信息包括如下内容,更多关于调用链的信息请参见https://istio.io/docs/tasks/telemetry/distributed-tracing/。
下面以一个典型的例子来说明如何在接收和发送请求时,通过修改代码来传递调用链相关Header信息。
def getForwardHeaders(request): headers = {} if 'user' in session: headers['end-user'] = session['user'] incoming_headers = ['x-request-id', 'x-b3-traceid', 'x-b3-spanid', 'x-b3-parentspanid', 'x-b3-sampled', 'x-b3-flags', 'x-ot-span-context' ] return headers @ app.route('/productpage') def front(): product_id = 0# TODO: replace default value headers = getForwardHeaders(request) user = session.get('user', '') product = getProduct(product_id) detailsStatus, details = getProductDetails(product_id, headers) reviewsStatus, reviews = getProductReviews(product_id, headers) return render_template( 'productpage.html?fromacct=525a03cf-8bd2-4921-b724-84ea259121fb&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905', detailsStatus = detailsStatus, reviewsStatus = reviewsStatus, product = product, details = details, reviews = reviews, user = user)
在java Rest接口上除了解析一般业务参数外,需要从header中解析trace相关信息。同样在调用下一个服务时传递该header信息。
@GET @Path("/reviews/{productId}") public Response bookReviewsById(@PathParam("productId") int productId, @HeaderParam("end-user") String user, @HeaderParam("x-request-id") String xreq, @HeaderParam("x-b3-traceid") String xtraceid, @HeaderParam("x-b3-spanid") String xspanid, @HeaderParam("x-b3-parentspanid") String xparentspanid, @HeaderParam("x-b3-sampled") String xsampled, @HeaderParam("x-b3-flags") String xflags, @HeaderParam("x-ot-span-context") String xotspan) { int starsReviewer1 = -1; int starsReviewer2 = -1; if (ratings_enabled) { JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan); if (ratingsResponse != null) { if (ratingsResponse.containsKey("ratings")) { JsonObject ratings = ratingsResponse.getJsonObject("ratings"); if (ratings.containsKey("Reviewer1")){ starsReviewer1 = ratings.getint("Reviewer1"); } if (ratings.containsKey("Reviewer2")){ starsReviewer2 = ratings.getint("Reviewer2"); } } } } String jsonResStr = getJsonResponse(Integer.toString(productId), starsReviewer1, starsReviewer2); return Response.ok().type(MediaType.APPLICATION_JSON).entity(jsonResStr).build(); } }
你好,我是A哥(YourBatman)。 如何给Module模块单独增加依赖?如何知道哪些Module...
OBS 提供同时支持允许白名单访问和阻止黑名单访问的配置,防止盗链。 前提条件 ...
微服务和分布式的区别什么?有什么特点?微服务设计是为了不因为某个模块的升级和B...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
包年包月 到期预警 包年包月的资源会在到期前7天开始每隔一天(即到期前第7、5、...
最近在研究性能优化的时候,看到了 golang runtime 包下的一个文档HACKING.md觉...
在不久前的「GOTC 全球开源技术峰会·上海站」活动现场 CNCF 云原生计算基金会总...
有一个朋友前几年通过猎头进入一家公司做研发负责人,他之前在一个软件外包企业...
应用聚类算法比选择最佳算法要容易得多。 每种类型都有其优缺点,如果您想要一个...
点击观看视频 https://v.qq.com/x/page/h0735obgulo.html 成立于1996年的海升集...