更新时间:2024-01-02 gmt 08:00

流量监控-凯发k8国际娱乐官网入口

购买网格时,基础配置 中的“ 可观测性配置”选择对接apm服务,则可以通过流量监控来监测流量概况、组件运行状态、调用链等信息,并在系统业务异常时快速定位到问题点。

约束与限制

  • 流量监控记录的是组件过去24小时内的数据,所以当部分组件删除后并不能及时的在拓扑图上消失,而是会仍然存在一段时间。
  • 企业版网格多集群场景下,只支持集群内部服务之间的流量监控,暂时不支持跨集群服务之间的流量监控。

查看流量监控情况

  1. 登录,单击已对接apm的服务网格名称进入详情页面。
  2. 在左侧导航栏中选择“监控中心”-“流量监控”。
  3. 查看整个系统的监控情况。

    拓扑图中显示了系统处于运行中和未就绪的应用数量。

    图1 流量拓扑
  4. 查看某个组件的监控情况。

    选择服务网格、集群及命名空间,单击拓扑图上的组件,进入组件监控详情页面,如图2所示。

    图2 流量监控详情页
    其中,
    • 流量概况:展示了应用详细的流量信息,包含请求总数、错误计数、平均时延、最大时延等。
    • 部署信息:显示了组件内的所有实例状态及信息。
    • 调用链:通过时间维度和组件版本来查看调用情况,支持使用高级搜索中的选项进行精准搜索。使用istio做服务治理时,无需在微服务代码中进行调用链埋点。但微服务代码在接收和发送请求时需要传递调用链相关的header信息,才能构造成完整的调用链路,详情请参见如何使用istio调用链埋点

如何使用istio调用链埋点

header信息包括如下内容,更多关于调用链的信息请参见。

  • x-request-id
  • x-b3-traceid
  • x-b3-spanid
  • x-b3-parentspanid
  • x-b3-sampled
  • x-b3-flags
  • x-ot-span-context

下面以一个典型的例子来说明如何在接收和发送请求时,通过修改代码来传递调用链相关header信息。

  • python代码示例
    服务接收端在处理请求时,从请求端解析相关header。在调用后端请求时,传递trace相关的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',
        detailsstatus = detailsstatus,
        reviewsstatus = reviewsstatus,
        product = product,
        details = details,
        reviews = reviews,
        user = user)
  • java代码示例

    在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();
    }
    }
分享:
网站地图