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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 服务网格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

相关文章
|
7天前
|
Kubernetes 大数据 调度
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,本文介绍了如何在阿里云ACK集群中部署Kmesh作为Sidecarless数据面并连接ASM控制面。
|
19天前
|
Kubernetes 调度 容器
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,其中Sidecarless模式如Istio Ambient、ACMG和Kmesh等,可减少延迟和资源消耗。Kmesh基于eBPF技术,通过内核空间拦截流量,结合Waypoint Proxy处理L7流量,实现高效的服务治理。本文介绍了如何在阿里云ACK集群中部署Kmesh并连接ASM控制面,包括安装步骤、检查服务状态和流量调度示例。
|
5月前
|
Cloud Native 容器 Kubernetes
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
本文简要讨论了使用流量泳道来实现全链路流量灰度管理的场景与方案,并回顾了阿里云服务网格 ASM 提供的严格与宽松两种模式的流量泳道、以及这两种模式各自的优势与挑战。接下来介绍了一种基于 OpenTelemetry 社区提出的 baggage 透传能力实现的无侵入式的宽松模式泳道,这种类型的流量泳道同时具有对业务代码侵入性低、同时保持宽松模式的灵活特性的特点。同时,我们还介绍了新的基于权重的流量引流策略,这种策略可以基于统一的流量匹配规则,将匹配到的流量以设定好的比例分发到不同的流量泳道。
73529 16
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
|
5月前
|
负载均衡 测试技术 网络安全
阿里云服务网格ASM多集群实践(一)多集群管理概述
服务网格多集群管理网络打通和部署模式的多种最佳实践
|
4月前
|
人工智能 自然语言处理 安全
使用阿里云服务网格高效管理LLM流量:(一)流量路由
ASM支持通过LLMProvider和LLMRoute资源管理大型语言模型流量。LLMProvider负责注册LLM服务,LLMRoute负责设定流量规则,应用可灵活切换模型,满足不同场景需求。
|
4月前
|
Cloud Native 测试技术 开发者
阿里云服务网格ASM多集群实践(二):高效按需的应用多环境部署与全链路灰度发布
介绍服务网格ASM提出的一种多集群部署下的多环境部署与全链路灰度发布解决方案。
|
5月前
|
人工智能 安全 Go
使用阿里云服务网格 ASM LLMProxy 插件保障大模型用户数据安全
本文介绍如何使用ASM LLMProxy动态为LLM请求添加API_KEY、使用模式匹配以及私有大模型判别请求敏感信息并根据判别结果拒绝请求等功能,帮助用户提升LLM场景下的安全水位。
|
5月前
|
负载均衡 Kubernetes 算法
服务网格 ASM 负载均衡算法全面解析
在本文中,笔者将解析服务网格的多种负载均衡算法的实现原理和使用场景,为服务网格负载均衡算法的选择提供参考。
|
Kubernetes API 容器
基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
10972 13
|
Kubernetes Cloud Native 安全
基于阿里云服务网格流量泳道的全链路流量管理(一)严格模式流量泳道
灰度发布是一种常见的对新版本应用服务的发布手段,其特点在于能够将流量在服务的稳定版本和灰度版本之间时刻切换,以帮助我们用更加可靠的方式实现服务的升级。
29957 19