博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪
阅读量:6989 次
发布时间:2019-06-27

本文共 1925 字,大约阅读时间需要 6 分钟。

概述

注意:在使用阿里云Kubernetes容器服务Istio 1.0的过程中,如果遇到类似CRD版本问题,请参考我们提供的。 我们会持续更新遇到的问题及其解决方法。

本系列前面文章中已经介绍了利用阿里云Kubernetes容器服务,如何快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。

本文通过一个示例演示了如何在启用了Istio的应用中使用分布式追踪系统Jaeger。

在由单体架构迁移至微服务时,传统的监视工具往往无法提供跨越不同服务的可见性。因此就有必要引入分布式跟踪的工具。

为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。OpenTracing 已进入 CNCF,正在为全球的分布式追踪,提供统一的概念和数据标准。它通过提供平台无关、厂商无关的 API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

Jaeger 是 下的一款开源分布式追踪系统,兼容 OpenTracing API。

图片.png

Istio分布式调用链跟踪

Jaeger收集启用了Istio的应用程序的调用链信息,点击阿里云容器服务页面中左侧服务栏,找到 tracing 服务,如下:

图片.png

点击 tracing 服务的外部地址,会看到如下一个Jaeger UI页面:

图片.png

Jaeger UI显示了分布式服务追踪信息的结果,右上角显示的时刻和持续时间散点图用可视化方式呈现了结果,并提供了向下挖掘能力。

用户可以选择用多种不同视图对追踪结果进行可视化,例如追踪时段内的直方图,或服务在追踪过程中的累积时间:

图片.png

除了使用默认的时序渲染方式,还可以通过其他视图渲染为有向无环图或关键路径图:

图片.png

实现原理

尽管Istio代理能够自动发送spans,但他们需要一些标识来将整个调用链关系联系起来。应用程序需要传入合适的HTTP header信息,便于代理发送span信息到Jaeger时,span可以准确地把每次调用关联起来。

为此,应用程序需要从传入的请求中收集如下的header信息并将其传入到每个传出请求:

x-request-idx-b3-traceidx-b3-spanidx-b3-parentspanidx-b3-sampledx-b3-flagsx-ot-span-context

示例服务中的productpage应用(Python应用)从HTTP请求中提取所需的header信息:

def getForwardHeaders(request):    headers = {}    user_cookie = request.cookies.get("user")    if user_cookie:        headers['Cookie'] = 'user=' + user_cookie    incoming_headers = [ 'x-request-id',                         'x-b3-traceid',                         'x-b3-spanid',                         'x-b3-parentspanid',                         'x-b3-sampled',                         'x-b3-flags',                         'x-ot-span-context'    ]    for ihdr in incoming_headers:        val = request.headers.get(ihdr)        if val is not None:            headers[ihdr] = val            #print "incoming: "+ihdr+":"+val    return headers

在应用程序中调用其他服务时,这些header信息会被传播下去形成一个调用链。

总结

我们可以利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。本文通过一个示例演示了如何在启用了Istio的应用中使用分布式追踪系统Jaeger。 欢迎大家使用阿里云上的容器服务,快速搭建微服务的开放治理平台Istio,比较简单地集成到自己项目的微服务开发中。

转载地址:http://cvzvl.baihongyu.com/

你可能感兴趣的文章
用java从hadoop中读数据
查看>>
实现首页分类栏按样式循环显示
查看>>
ActiveMQ 初试
查看>>
log4j xml 配置 自定义使用版
查看>>
才发觉---
查看>>
.net实现日志文件重命名且保留历史日志文件
查看>>
ORA-28000: the account is locked-的解决办法
查看>>
Spring中@Transactional(rollbackFor = Throwable.class)的作用
查看>>
js 实现多线程
查看>>
MySQL学习笔记之四:并发控制和事务机制
查看>>
c#基础重点:面向对象基础
查看>>
android之JNI开发步骤总结
查看>>
Activity工作流-插件安装(一)
查看>>
LVS详解
查看>>
RabbitMQ 简介
查看>>
我的友情链接
查看>>
shell 检查是否是root用户
查看>>
我的友情链接
查看>>
高仿花田ios版标签移动效果《IT蓝豹》
查看>>
NYOJ15 括号匹配(二)
查看>>