阿里云Kubernetes容器服务Istio实践之集成日志服务Log Service

简介: 阿里云Kubernetes容器服务已经提供了Istio与日志服务Log Service的集成能力,本文通过一个官方示例来重点介绍了Istio与基于阿里云日志服务的分布式追踪系统的整合能力。
+关注继续查看

概述

在前面系列文章中已经介绍了Istio及其各个核心组件,详述了如何利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及保护微服务的开放平台Istio,为应用引入和配置多个相关服务;并且通过一个官方示例演示了如何部署应用到上述Istio环境中,演示了如何设置智能路由、分布式追踪以及Istio 的遥测数据收集、查询及可视化等功能。

回顾这个系列文章请参考:
阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验
阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio
阿里云Kubernetes Service Mesh实践进行时(3): 智能路由
阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪
阿里云Kubernetes Service Mesh实践进行时(5): 遥测数据收集、查询及可视化
阿里云Kubernetes Service Mesh实践进行时(6): 故障诊断与检测工具Weave Scope
阿里云Kubernetes Service Mesh实践进行时(7): 可观测性分析服务Kiali

阿里云Kubernetes容器服务已经提供了Istio与日志服务Log Service的集成能力,本文通过一个官方示例来重点介绍Istio与基于阿里云日志服务的分布式追踪系统的整合能力。

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

回顾 OpenTracing

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

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

阿里云日志服务Log Service与分布式追踪系统Jaeger

日志服务(Log Service,简称LOG/原SLS)是针对实时数据一站式服务,在阿里集团经历大量大数据场景锤炼而成。提供日志类数据采集、消费、投递及查询分析功能,全面提升海量日志处理/分析能力。具体可参见 日志服务

Jaeger 是 Uber 推出的一款开源分布式追踪系统,为微服务场景而生。它主要用于分析多个服务的调用过程,图形化服务调用轨迹,是诊断性能问题、分析系统故障的利器。

Jaeger on Aliyun Log Service 是基于 Jeager 开发的分布式追踪系统,支持将采集到的追踪数据持久化到阿里云日志服务中,并通过 Jaeger 的原生接口进行查询和展示。

图片.png

Jaeger-client

Jaeger-client 为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,客户端库library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent。数据使用 Thrift 序列化,通过 UDP 进行通信。

Jaeger-agent

Jaeger-agent 是一个监听在 UDP 端口上接收 span 数据的网络守护进程,它会将数据批量发送给Jaeger-collector。它被设计成一个基础组件,部署到所有的宿主机上。Jaeger-agent代理将 Jaeger-client 和 Jaeger-collector 解耦,为 Jaeger-client library 屏蔽了路由和发现 collector 的细节。

Jaeger-collector

接收 jaeger-agent 发送来的数据,然后将数据写入后端存储。后端存储是一个可插拔的组件,Jaeger on Aliyun Log Service 增加了对阿里云日志服务的支持。

阿里云日志服务Log Service

Jaeger-collector 会将接收到的 span 数据持久化到日志服务Log Service中。Query 会从日志服务中检索数据。

Query&UI

接收查询请求,从后端存储系统中检索 trace 并通过 UI 进行展示。

准备Kubernetes环境

阿里云容器服务Kubernetes 1.10.4目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。具体过程可以参考创建Kubernetes集群

通过应用目录简便部署Istio

点击左侧的应用目录,在右侧选中ack-istio,在打开的页面中点击参数, 可以通过修改参数配置进行定制化,如下所示:
图片.png

原生 Jaeger 仅支持将数据持久化到 cassandra 和 elasticsearch 中,用户需要自行维护后端存储系统的稳定性,调节存储容量。Jaeger on Alibaba Cloud Log Service 借助阿里云日志服务的海量数据处理能力,让您享受 Jaeger 在分布式追踪领域带来便捷的同时无需过多关注后端存储系统的问题。

阿里云Kubernetes容器服务中整合了日志服务Log Service, 其分布式追踪数据会保存到阿里云日志服务Log Store中,所以在参数配置中,我们将原有的tracing设置为false,即不启用,同时设置tracing-on-sls配置如下所示:

# tracing(jaeger on AliCloud Log Service)
tracing-on-sls:
  enabled: true
  storage:
    type: aliyun-log
    aliyun_sls:
      project: newlogsample
      logstore: mylogstore1
      endpoint: cn-hangzhou.log.aliyuncs.com
      accesskey:
        id: 
        secret:       
.......
tracing:
  enabled: false

tracing-on-sls参数说明如下:

参数名 参数类型 描述
enabled 布尔型 true表示启用,false表示禁用
storage.type 字符串 指定用于存储 Span 的 类型,当前值必须为aliyun-log
storage.aliyun_sls.project 字符串 指定用于存储 Span 的 Project;项目名称只能包含小写字母、数字和连字符(-),且必须以小写字母和数字开头和结尾,长度为 3~63 个字节。
storage.aliyun_sls.endpoint 字符串 指定用于存储 Span 的 Project 所在的 Endpoint
storage.aliyun_sls.accesskey.id 字符串 指定用户标识 Access Key ID
storage.aliyun_sls.accesskey.secret 字符串 指定用户标识 Access Key Secret
storage.aliyun_sls.logstore 字符串 指定用于存储 Span 的 Logstore;须由小写字母、数字、连字符(-)和下划线(_)组成,且以小写字母或者数字开头和结尾,长度为3-63字节。Logstore 名称在其所属项目内必须唯一。

注意的是,如果指定的Project不存在,系统会自动创建一个新project,并且完成相应的初始化工作。

修改之后,在右侧选择对应的集群、命名空间istio-system,指定发布名称,然后点击部署。

几分钟之后,一套用于连接、管理以及安全化微服务的开放平台Istio实例就可以创建出来。

体验Istio

点击左侧的容器组,在右侧可以查看到刚创建的Istio相关容器组信息,如下所示:

图片.png

点击左侧的服务,在右侧可以查看到刚创建的Istio相关服务提供的访问地址,如下所示:

图片.png

部署应用示例

使用 Istio 运行应用程序示例不需要修改应用程序本身,而只需要在支持 Istio 的环境中配置和运行服务, Envoy sidecar 将会注入到每个服务中。

所有的微服务都将与一个 Envoy sidecar 一起打包,拦截这些服务的入站和出站的调用请求,并且提供了一个所需的 hook来完成控制功能,即利用 Istio 控制平面从外部控制整个应用的路由、遥测收集和策略执行。

下载安装istioctl

可以通过以下地址下载,安装之后可以找到示例代码的目录:
https://github.com/istio/istio/releases/

安装示例bookinfo

默认情况下需要手动注入 sidecar,运行下面的命令:

kubectl apply -f <(istioctl kube-inject --debug -f samples/bookinfo/platform/kube/bookinfo.yaml)

其中,istioctl kube-inject 命令用于在创建部署之前修改 bookinfo.yaml 文件,这样 Envoy会作为sidecar被注入到 Kubernetes 资源中。

自动注入Sidecar的功能在最新的阿里云Kubernetes容器服务中已经得到支持,请关注后续文章了解如何启用自动注入Sidecar功能。

上述命令启动四个微服务,如下图所示。3 个版本的reviews的服务 v1、v2、v3 都已启动。
图片.png

运行下面的命令定义Ingress网关:

istioctl create -f samples/bookinfo/networking/bookinfo-gateway.yaml

至此,示例中的微服务及其sidecar、Ingress都会建立,如下:
图片.png

确保所有服务已经正常启动:

kubectl get svc
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   172.19.2.177    <none>        9080/TCP   15m
productpage   ClusterIP   172.19.15.184   <none>        9080/TCP   15m
ratings       ClusterIP   172.19.9.228    <none>        9080/TCP   15m
reviews       ClusterIP   172.19.11.177   <none>        9080/TCP   15m

访问应用程序

运行下面的命令获取Ingress地址信息:

kubectl get svc  istio-ingressgateway -n istio-system

当然,也可以通过阿里云容器服务的界面查看Ingress地址信息,如下所示,点击左侧的服务,在右侧选择命名空间istio-system,就可以找到istio-ingressgateway的信息。

访问示例页面: http://{EXTERNAL-IP}/productpage

图片.png

多次刷新浏览器将在 productpage 中看到评论的不同的版本,它们会按照 round robin(红星、黑星、没有星星)的方式展现。

查看分布式调用链跟踪Jaeger on Aliyun Log Service

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

图片.png

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

图片.png

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

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

图片.png

查看阿里云日志服务Log Service

登录日志服务控制台,选择目标项目,单击项目名称。点击日志消费模式->查询分析->查询,如下所示:

图片.png

日志服务查询分析功能除了提供日志内容的各种语句查询能力以外,还提供以下多种扩展功能优化您的查询。

原始日志:
图片.png

统计图表:
图片.png

总结

阿里云Kubernetes容器服务已经提供了Istio与日志服务Log Service的集成能力,本文通过一个官方示例来重点介绍了Istio与基于阿里云日志服务的分布式追踪系统的整合能力。

欢迎大家使用阿里云上的容器服务,快速搭建微服务的开放治理平台Istio,比较简单地集成到自己项目的微服务开发中。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
Kubernetes Cloud Native 开发者
15分钟在笔记本上搭建 Kubernetes + Istio开发环境-阿里云开发者社区
15分钟在笔记本上搭建 Kubernetes + Istio开发环境-阿里云开发者社区
15分钟在笔记本上搭建 Kubernetes + Istio开发环境-阿里云开发者社区
|
5月前
|
弹性计算 Kubernetes Cloud Native
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(上)
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(上)
|
5月前
|
Web App开发 Kubernetes Cloud Native
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(中)
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(中)
|
5月前
|
Cloud Native 网络协议 安全
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(下)
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(下)
《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(下)
|
7月前
|
Web App开发 弹性计算 Kubernetes
全景剖析阿里云容器网络数据链路(六):ASM Istio
本篇文章主要聚焦在ASM Istio服务网格模式下,被注入pod的数据面流量转发链路情况。istio灵活注入实现了在Pod维度对流量的定制化配置和观测性,带来了业务链路角度实现的更多种的可能。
全景剖析阿里云容器网络数据链路(六):ASM Istio
|
8月前
|
Web App开发 弹性计算 Kubernetes
全景剖析阿里云容器网络数据链路(六)—— ASM Istio
近几年,企业基础设施云原生化的趋势越来越强烈,从最开始的IaaS化到现在的微服务化,客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度,也一直在高速的发展和演进中,这必然对客户对云原生网络的可观测性带来了极高的门槛和挑战。为了提高云原生网络的可观测性,同时便于客户和前后线同学增加对业务链路的可读性,ACK产研和AES联合共建,合作开发ack net-exporter和云原生网络数据面可观测性系列,帮助客户和前后线同学了解云原生网络架构体系,简化对云原生网络的可观测性的门槛,优化客户运维和售后同学处理疑难问题的体验 ,提高云原生网络的链路的稳定性。
436 0
全景剖析阿里云容器网络数据链路(六)—— ASM Istio
|
11月前
|
自然语言处理 Kubernetes 网络协议
在阿里云安装初试 Istio| 学习笔记
快速学习在阿里云安装初试 Istio
172 0
在阿里云安装初试 Istio| 学习笔记
|
Kubernetes 安全 搜索推荐
Istio生态系统ON ASM(4):在阿里云服务网格ASM中集成阿里云云效Flow实现DevOps
在阿里云服务网格(简称 ASM)企业版实例中,兼容 Istio,支持多个 Kubernetes 集群统一流量管理,为容器和虚拟机应用服务提供一致性的通信控制。基于服务网格最新的“数据面KubeAPI访问"能力,能够通过数据面集群的kubeconfig来管理Istio资源。和阿里云Flow等云效工具集成后,可以享受DevOps、GitOps带来的应用发布的便利性,还能够利用Istio细粒度
176 0
Istio生态系统ON ASM(4):在阿里云服务网格ASM中集成阿里云云效Flow实现DevOps
|
运维 Kubernetes 监控
Istio生态系统ON ASM(1):在阿里云服务网格ASM中集成ArgoCD实现GitOps
背景在阿里云服务网格ASM中,支持通过ArgoCD来进行应用程序的发布、更新,简化了运维成本。开发者提交YAML编写的应用程序定义(Deployment、Service)和流量管理(VirtualService、Gateway、DestinationRule)到Git仓库。ArgoCD会监控集群中应用程序当前的Deployment、Service、VirtualService等资源的状态,与Git
482 0
Istio生态系统ON ASM(1):在阿里云服务网格ASM中集成ArgoCD实现GitOps
|
Prometheus 监控 Cloud Native
Istio生态系统ON ASM(2):在阿里云服务网格ASM中集成Argo Rollouts进行金丝雀发布
背景ArgoCD职责主要是监听Git仓库中的应用编排的变化,并集群中应用真实运行状态进行对比,自动/手动去同步拉取应用编排的变更到部署集群中。Argo Rollouts提供了更强大的蓝绿、金丝雀部署能力。在实践中可以将两者结合来提供基于GitOps 的渐进式交付能力。前提条件创建Istio版本为1.12.4.50或更高版本的阿里云服务网格 (ASM) 企业版实例。
264 0
Istio生态系统ON ASM(2):在阿里云服务网格ASM中集成Argo Rollouts进行金丝雀发布
相关产品
容器服务Kubernetes版
推荐文章
更多