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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 阿里云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服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2天前
|
运维 测试技术 持续交付
持续集成与持续部署(CI/CD):提高软件开发效率的关键实践
【5月更文挑战第8天】CI/CD是提升软件开发效率的关键实践,包括持续集成和持续部署。CI通过频繁集成代码并自动化构建、测试,早发现错误;CD则自动将通过测试的App部署到生产环境,缩短交付周期。自动化流程能降低人为错误,保障软件质量,减少运维成本。Jenkins、Travis CI、GitLab CI/CD和Docker是常见的CI/CD工具。通过这些工具和实践,可优化开发流程,推动项目成功。
|
3天前
|
C++
JNI Log 日志输出
JNI Log 日志输出
12 1
|
3天前
|
存储 运维 大数据
聊聊日志硬扫描,阿里 Log Scan 的设计与实践
泛日志(Log/Trace/Metric)是大数据的重要组成,伴随着每一年业务峰值的新脉冲,日志数据量在快速增长。同时,业务数字化运营、软件可观测性等浪潮又在对日志的存储、计算提出更高的要求。
|
4天前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
10天前
|
敏捷开发 运维 测试技术
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】在数字化转型的浪潮中,企业对软件交付速度和质量的要求日益提高。自动化运维作为提升效率、确保稳定性的关键手段,其重要性不言而喻。本文将探讨如何利用容器技术构建一个高效的自动化运维体系,实现从代码提交到产品上线的持续集成(CI)与持续部署(CD)。通过分析现代容器技术与传统虚拟化的差异,阐述容器化带来的轻量化、快速部署及易于管理的优势,并结合实例讲解如何在实际环境中搭建起一套完善的CI/CD流程。
|
10天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。
|
10天前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
87 1
|
10天前
|
中间件 测试技术 API
探索自动化测试工具的新边界:Selenium与Appium的集成实践
【4月更文挑战第30天】 随着移动应用和Web应用的不断融合,传统的自动化测试工具需要适应新的测试环境。本文将详细分析Selenium和Appium这两款流行的自动化测试工具的集成实践,探讨如何构建一个能够同时支持Web和移动端应用的自动化测试框架。通过对比两者的技术架构、功能特性以及在实际项目中的集成过程,我们旨在为读者提供一个清晰的指导,帮助他们在复杂的应用环境中实现高效、稳定的自动化测试流程。
|
10天前
|
运维 Kubernetes 持续交付
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】 在快速发展的云计算时代,传统的运维模式已无法满足敏捷开发和快速迭代的需求。本文将介绍如何利用容器技术搭建一套高效自动化运维系统,实现软件的持续集成(CI)与持续部署(CD)。文章首先探讨了现代运维面临的挑战,接着详细阐述了容器技术的核心组件和工作原理,最后通过实际案例展示了如何整合这些组件来构建一个可靠、可扩展的自动化运维平台。
|
11天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版