阿里云服务网格ASM之扩展能力(4):在ASM中实现分布式跟踪

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 服务网格ASM集成了阿里云链路追踪服务,为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等能力,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提升开发诊断效率。

本系列文章讲讲述阿里云服务网格ASM的一些扩展能力:

欢迎扫码入群进一步交流:
image

服务网格与分布式跟踪

根据Open Tracing网站的介绍,分布式跟踪(也称为分布式请求跟踪)是一种用于对应用程序进行概要分析和监视的方法,尤其是针对使用微服务架构构建的应用程序。分布式跟踪有助于查明哪里发生故障以及什么原因导致性能下降。
常见的误解是在使用服务网格进行服务跟踪实现时,不需要任何代码的更改。实际上,根据Istio的官方介绍,尽管Istio代理能够自动发送Span,但是应用程序仍然需要传播适当的HTTP标头,以便在代理发送Span信息时,可以将Span正确地关联到单个跟踪中。为此,应用程序需要收集以下标头并将其从传入请求传播到任何传出请求。

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

x-b3头起源于Zipkin项目,标头的B3部分是以Zipkin的原始名称BigBrotherBird命名。在服务调用之间传递这些标头称之为B3传播。根据Zipkin的原理,这些属性通常通过HTTP标头进行传播,并最终传播到下游,以确保将源自同一根的所有活动收集在一起。

阿里云链路追踪服务

阿里云链路追踪 Tracing Analysis 为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。

使用链路追踪之前,首先需要开通链路追踪服务。由于链路追踪依赖日志服务 LOG 和访问控制 RAM 服务,所以也需要开通这两项服务,并授权链路追踪读写您的日志服务数据。
关于开通相关服务和授权的方法,请参见开通相关服务并授权

image.png

为ASM实例启用链路追踪

服务网格ASM集成了阿里云链路追踪服务,为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等能力,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提升开发诊断效率。

在创建ASM实例时启用链路追踪

用户在创建网格时,可以通过勾选“启用链路追踪”来启用ASM的链路追踪能力,在勾选后,还用户还可以设置追踪流量的百分比,设置范围为0.01 - 100.00。

说明:启用该配置时,用户需要提前开通阿里云链路追踪服务

image.png

为已有ASM实例启用链路追踪或调整追踪比例

用户可以随时开启ASM实例的追踪能力或调整链路追踪的百分比。

如果在创建服务网格ASM实例时没有勾选启用OPA插件,可以通过如下方式重启开启。

登录服务网格控制台,在ASM实例详情页的右上角,点击功能设置按钮。

image.png

  • 在弹出的窗口中,可以重新勾选启用或者禁用链路追踪(当然,如果启用的话,仍然是需要确保已经开通了链路服务)。

部署示例

按照文档部署应用到一个ASM服务网格中。查看示例中的以Python 语言实现的productpage服务,则会发现该应用程序使用了OpenTracing库从HTTP请求中提取了所需的标头:

def getForwardHeaders(request):
    headers = {}

    # x-b3-*** headers can be populated using the opentracing span
    span = get_current_span()
    carrier = {}
    tracer.inject(
        span_context=span.context,
        format=Format.HTTP_HEADERS,
        carrier=carrier)

    headers.update(carrier)

    # ...

    incoming_headers = ['x-request-id']

    # ...

    for ihdr in incoming_headers:
        val = request.headers.get(ihdr)
        if val is not None:
            headers[ihdr] = val

    return headers

同样地,查看以Java语言实现的reviews服务:

@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) {

  if (ratings_enabled) {
    JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan);

访问示例

在浏览器地址栏输入_http://{__入口网关服务的IP地址__}/__productpage_,可以看到如下类似页面,刷新页面以实现多次访问效果。

image.png

查看应用列表

应用列表页面展示了所有被监控应用的健康度得分、本日请求数、本日错误数等关键指标。您还可以为应用设置自定义标签并使用标签来筛选。

请按照以下步骤进入应用列表页面。

image.png

查看应用详情

应用详情页面可展示应用在所部属的每一台机器上的关键性能指标、调用拓扑图和调用链路。

  • 登录链路追踪 Tracing Analysis 控制台
  • 在左侧导航栏中单击应用列表,并在应用列表页面顶部选择地域,然后单击应用名称。
  • 在左侧导航栏中单击应用详情,在左侧的机器列表中单击全部或一台机器,然后在概览页签上查看调用拓扑图和关键性能指标。应用详情页面的调用链路页签列出了该应用在所选机器上耗时最长的 100 个调用链路。
    image.png

查看调用链瀑布图

  • 调用链路页签上单击 TraceID,即可在新窗口中打开调用链路页面,并查看该调用链路的瀑布图。
  • 在新窗口中的调用链路页面上,您可以看到调用链路的日志产生时间、状态、IP 地址/机器名称、服务名、时间轴等信息。
  • 注意: IP 地址字段显示的是 IP 地址还是机器名称,取决于应用设置页面上的显示配置。详情请参见管理应用和标签

image.png

将鼠标悬浮于服务名上,还可以查看该服务的时长、开始时间、Tag 和日志事件等信息。

其他具体操作可以参考链路跟踪文档

image.png

相关文章
|
28天前
|
存储 机器学习/深度学习 人工智能
阿里云视觉智能开放平台确实拥有视频目标检测的能力
【2月更文挑战第9天】阿里云视觉智能开放平台确实拥有视频目标检测的能力
64 7
|
2月前
|
人工智能 监控 算法
阿里云加强公共云能力服务香港客户,建立新合作支持各行各业加快数字转型
阿里云加强公共云能力服务香港客户,建立新合作支持各行各业加快数字转型
62 1
|
3月前
电子好书发您分享《阿里云云原生一体化数仓新能力解读》
电子好书发您分享《阿里云云原生一体化数仓新能力解读》
259 2
|
2月前
|
消息中间件 Kafka
消息队列 MQ:构建高效、可扩展的分布式系统
消息队列 MQ:构建高效、可扩展的分布式系统
|
2月前
|
弹性计算 监控 NoSQL
扩展至千万级用户:阿里云平台的初学者指南
【1月更文挑战第7天】这几天支原体感染了,每天半夜都咳醒,实在撑不住了才断更几天。
|
2月前
|
存储 人工智能 Cloud Native
阿里云向量检索服务测评:高效、易用、强大的向量管理与查询能力
摘要:本文对阿里云向量检索服务进行了全面的测评,从其基于自研Proxima内核的高性能、全托管、云原生特性,到简洁易用的SDK/API接口,再到在多种应用场景下的集成能力,为读者提供了一个全面了解阿里云向量检索服务的机会。
1096 0
|
2月前
|
人工智能
阿里云的向量检索服务是一种高效、易用、可扩展的向量检索工具,适用于多种应用场景
阿里云的向量检索服务是一种高效、易用、可扩展的向量检索工具,适用于多种应用场景,如语义检索、知识库搭建、AI多模态搜索等
257 0
|
2月前
|
关系型数据库 MySQL Serverless
评测报告:阿里云 PolarDB MySQL 版 Serverless 能力
本次评测全面评估了阿里云 PolarDB MySQL 版的 Serverless 能力,包括资源弹升速度、资源伸缩广度、稳定性、颗粒度、自动启停以及全局数据强一致性。结果显示,PolarDB 在这些维度上均表现出色,能够快速响应负载变化、灵活调整资源配置、保证业务连续性和稳定性,同时精细控制成本。与同类型产品相比,PolarDB 在多方面具有优势。我们建议阿里云继续优化资源调度算法、拓展边缘场景支持,并加强与生态伙伴的合作,以进一步提升产品竞争力和用户满意度。
|
3月前
|
人工智能 文字识别
阿里云的 口算判题 AI能力(文字识别OCR)接口 返回数据的时候 没有正确答案只有 对错吗?
阿里云的 口算判题 AI能力(文字识别OCR)接口 返回数据的时候 没有正确答案只有 对错吗?
169 0
|
3月前
|
安全 关系型数据库 数据库
上新|阿里云RDS PostgreSQL支持PG 16版本,AliPG提供丰富自研能力
AliPG在社区版16.0的基础上,在安全、成本、可运维性等多个方面做了提升,丰富的内核/插件特性支持,满足业务场景的需求

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版