阿里云服务网格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

相关文章
|
8月前
|
消息中间件 Kafka Apache
微服务消息驱动:构建弹性、可扩展的分布式应用
在当今的软件开发世界中,微服务架构已经成为了构建大型应用的流行方式。随着应用规模的不断扩大,微服务架构引入了一些挑战,其中之一是确保各个微服务之间的通信高效、可靠和可扩展。微服务消息驱动架构应运而生,它为解决这些挑战提供了强大的工具和方法。
|
4月前
|
消息中间件 Kafka
消息队列 MQ:构建高效、可扩展的分布式系统
消息队列 MQ:构建高效、可扩展的分布式系统
|
4月前
|
弹性计算 监控 NoSQL
扩展至千万级用户:阿里云平台的初学者指南
【1月更文挑战第7天】这几天支原体感染了,每天半夜都咳醒,实在撑不住了才断更几天。
|
4月前
|
人工智能
阿里云的向量检索服务是一种高效、易用、可扩展的向量检索工具,适用于多种应用场景
阿里云的向量检索服务是一种高效、易用、可扩展的向量检索工具,适用于多种应用场景,如语义检索、知识库搭建、AI多模态搜索等
269 0
|
6月前
|
Kubernetes API 容器
基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
10894 6
|
7月前
|
负载均衡 网络协议 测试技术
使用eBPF加速阿里云服务网格ASM
服务网格下的Sidecar 代理业务服务的收发请求,并提供业务层面的流量控制(路由)、负载均衡等功能,会引入一定的Latency 延迟。 通过eBPF 技术(部署sidecar 加速组件)将同节点下两个进程间的TCP 报文进行socket 短路可以提升一定的性能,HTTP 场景下QPS 可提升15% 左右, 有效地降低业务请求的Latency 。
913 0
使用eBPF加速阿里云服务网格ASM
|
9月前
|
运维 Kubernetes Cloud Native
服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践
通过本文介绍丽迅物流关于基于阿里云服务网格 ASM 如何加速企业业务云原生化进程的实践经验。
|
9月前
|
弹性计算
阿里云提供了弹性扩展的能力
阿里云提供了弹性扩展的能力
118 1
|
9月前
|
存储 弹性计算 安全
阿里云服务器的灵活可扩展,满足您不断变化的业务需求
阿里云服务器是由阿里巴巴集团一家全球领先的云计算服务提供商阿里云推出的一款云服务器产品。作为云计算行业的领军者,阿里云服务器提供了稳定可靠、高性能、安全可控的云计算解决方案。无论是个人开发者还是大型企业,阿里云服务器都能够满足各种业务需求。
127 0
|
9天前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
32 2