一种可观测性微服务链路监控系统设计实现
作者: 陈恒法 黄爱仪 邹竟辉
摘要:为满足当前基于云原生微服务架构软件系统运维的复杂性需求,利用开源软件整合设计实现了一种低成本、高可用、部署方便的可观测性微服务链路监控解决方案,解决了可观测性“三大支柱”中的链路可观测性问题。详细描述了方案的系统构成,部署流程及工作原理,基于Docker容器技术进行系统部署和测试,验证了该系统方案的可行性。
关键词:云原生;运维;可观测性;监控 ;链路跟踪
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2024)22-0038-04
开放科学(资源服务)标识码(OSID)
0 引言
随着云原生技术在软件系统开发领域的不断深入,云原生这种“专注于应用程序容器化,以便在各种服务器上进行部署和编排”的软件构建和部署运行的现代方法,使得原来面向单体架构设计的各类系统监控技术难以全面跟踪和排查基于云原生的软件系统的问题。因此,需要构建起一套可观测性服务监控系统[1]。
本研究探索了基于开源软件组合实现的一种云服务可观测性微服务链路监控系统方案。该系统可以实现对链路数据的关联分析,帮助运维人员衡量、预防、发现、定位、解决业务问题,从而实现运维业务效能的提升。
1 核心概念及技术框架
1.1 可观测性
可观测性(Observability) 是一个来自控制理论的概念,它指的是能够从系统的外部输出推断出系统内部状态的能力。在计算机系统和软件领域,可观测性允许人们通过监控系统和应用程序对外输出的信息,来了解和诊断应用程序内部的状态和运行情况[1]。可观测性通常包括指标(Metrics) 、链路(Traces) 和日志(Logs) 三个方面的信息。
1) 指标(Metrics) 是可观测性中用于衡量和监控系统性能及健康状况的关键数据类型。指标是在一段时间内测量的数值,包括特定可用性、预警性和协助性监控属性,如启动、可达、流量、延时、时间戳、类型等。指标采用结构化的形式,方便查询和优化存储[2]。
2) 链路(Traces) 在可观测性领域主要分为两类:链路拓扑和链路追踪。链路拓扑的核心价值在于通过分析节点间依赖路径与状态,提供强弱依赖梳理、瓶颈点分析、影响面分析、故障传播链分析等能力。链路追踪可追溯请求在分布式系统间流转路径与状态的技术。它通过在分布式应用的接口方法上设置观察点,并在入口节点给每个请求分配一个全局唯一的标识(TraceId) ,来记录请求流经的链路日志[3]。
3) 日志(Logs) 是在特定时间发生的事件的文本记录。日志收集工具与应用程序容器一起运行,从应用程序收集消息,然后把收到的消息转发到中央日志存储以进行汇总和分析。
通过指标、链路、日志数据,运维团队可以更有效地监控基于云原生的分布式部署微服务系统,在运维过程中快速定位问题根源,并采取措施进行修复,从而确保系统的稳定性和可靠性。
1.2 技术路线:SkyWalking+Elasticsearch+SkyWalking UI
目前可以实现云原生的运维服务技术框架有很多。本研究主要从技术成熟度、系统构建成本、部署便利性这三个方面进行评估,选择采用基于SkyWalking+ElasticSearch开源技术框架方案来构建一个基于云原生微服务系统运维的监控系统。该系统是一个能提供分布式追踪、服务网格遥测分析、度量聚合、查询、持久化和可视化一体化解决方案[3]。系统整体架构如图1所示。
整个监控系统由4个部分组成,分别为:
1) 数据采集模块:SkyWalking+Service Mesh。
语言探针(SkyWalking Agent) 和服务网格(Service Mesh) 是获得监控数据的模块。它们以插件方式独立存在,可根据需要从SkyWalking官网上选择需要的模块下载[4]。这些插件可以通过配置文件以非入侵方式集成到其他应用系统中,随相应的应用一起启动工作。以SkyWalking Agent为例,它具备高度自动化能力,目前官网分别提供了支持主流前端技术(Vue.js、Angular.js、React) 和常见后端技术(Java、.NET、Go、Python、PHP、Node.js) 的SkyWalking Agent供下载。SkyWalking Agent能实现系统的链路跟踪、指标探测和日志聚合处理。
2) 数据汇聚和处理模块:SkyWalking。
SkyWalking可作为一个应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos) 架构而设计。它拥有一套非常成熟的指标监测、分布式链路追踪和日志处理功能,提供了多种监控手段。
3) 数据存储模块:ElasticSearch。
在跟踪数据存储方面,SkyWalking支持多种主流的数据存储技术,如ElasticSearch、MySQL、Sharding Sphere、TiDB、H2等。ElasticSearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便地使大量数据具有搜索、分析和探索的能力。它是SkyWalking官方推荐的数据存储方案。
4) 数据可视化展示模块:SkyWalking UI。
SkyWalking UI既是展示监控数据仪表盘,用来实现Skywalking收集到的数据的可视化展示,又是监控系统对采集到的数据进行分析的控制台。系统部署完成后,就可以通过SkyWalking UI提供的仪表盘实现数据呈现及其他相关信息详情查询和展示。
1.3 系统工作流程
该系统是通过语言探针(SkyWalking Agent) 和服务网格(Service Mesh) 从微服务应用中获取服务调用数据。根据获取数据的方式不同,分别采用HTTP或gRPC通信协议与SkyWalking OAP通信,将采集到的监控数据传给Tracing或Metric模块进行预处理,然后传给Analysis模块进行归并和分析,最终数据和结果传给ElasticSearch进行持久化。
系统启动后,用户通过浏览器输入SkyWalking-UI服务端地址,就可以打开数据监控仪表盘页面查看监控数据。仪表盘页面默认提供监控数据的全局概览视图,包含系统整体的服务调用情况、响应时间、吞吐量等关键指标,以可视化的形式展示在不同的窗口中。用户也可以根据需求定制仪表板内容,Query模块会根据定制参数返回响应的查询数据,供仪表盘进行可视化展示。
2 系统部署与运行测试分析
为了详细展示系统的部署及运行测试过程,本研究通过在Docker容器技术创建的虚拟云主机平台上,以链路跟踪监控为例,开展模拟云原生监控系统部署和运行测试实践,展示系统的部署和运行测试过程。在真实生产环境的云主机上部署该系统的过程也基本一样。系统的部署结构如图2所示。
2.1 系统部署
在系统部署之前,需要准备好系统部署的环境,即安装好操作系统云主机。下载部署所需的开源软件。下载开源软件时,要注意查看软件版本的兼容性描述。虽然构成该系统的各开源组件拥有满足多种操作系统的版本,但建议在Linux内核的操作系统上部署,本实践使用的是Ubuntu 20.04 LTS镜像文件创建的云主机,并在此基础上进行系统部署操作。
2.1.1 安装Docker并创建虚拟服务器
安装Docker并根据系统部署需求,通过Ubuntu镜像文件创建出6个容器用于模拟6台服务器。其中一台安装Nginx提供统一的服务访问入口;3台安装Tomcat提供云原生Web微服务,用于部署基于SpringBoot+SpringCloud实现的音乐推荐微服务系统,并作为完成实验测试的微服务系统;一台安装SkyWalking作为数据收集和分析服务器,还有一台安装ElasticSearch作为跟踪数据存储服务器。
Docker、Ubuntu以及微服务系统的安装过程比较简单,相关详细操作过程介绍文章和视频非常多,在这里不做介绍。需要提醒的是,如果采用一台服务器虚拟化为多台服务器,并且原生主机只有一张物理网卡,而又希望每台虚拟主机都有独立的IP地址,实现单网卡多IP方式,那就必须先在原生服务器网卡上绑定多个地址。否则就只能通过端口号来区分不同的虚拟主机。具体操作相关操作可以查看参考文献[5]。为了更接近真实生产环境,这里采用的是单网卡多IP方式。在进行软件的安装部署之前,都必须确保系统中已经安装了与安装软件兼容的JDK。
2.1.2 部署ElasticsSearch服务
ElasticsSearch服务安装比较简单,包括以下4个步骤:
1) 访问Elasticsearch官方下载页面(https://www.elastic.co/downloads/elasticsearch) ,选择适合的版本并下载,本文以Elasticsearch 7.14.0为例。
2) 将下载的Elasticsearch压缩包解压到合适的目录,例如,/amt/elasticsearch。
3) 打开config/elasticsearch.yml根据需要修改配置或使用默认配置,在本实践中使用的是多IP方式,所有需要设置network.host:192.168.0.2,其他参数使用默认值。
4) 通过“./bin/elasticsearch”启动服务。
如果采用Docker镜像的方式来部署ElasticsSearch的话,直接从Docker官网拉镜像然后创建容器,并启动容器就可以了。所有配置开源使用默认配置。
2.1.3 部署SkyWalking服务
SkyWalking服务启动运行需要依赖后端的数据存储服务器,因此在安装部署SkyWalking服务器之前必须先安装和部署ElasticsSearch服务器。SkyWalking服务安装部署过程也很简单,具体过程如下:
1) 下载SkyWalking:访问Apache SkyWalking官方网站下载页面https://skywalking.incubator.apache.org/downloads/,选择合适的版本下载。
2) 解压SkyWalking压缩包到合适的目录,例如,
/amt/skywalking。
3) 配置SkyWalking和SkyWalking UI。编辑config/application.yml文件和bin\webapp\webapp.yml,在本文中需要根据需要配置数据库连接,SkyWalking服务器地址以及SkyWalking Web UI地址。如图3所示。
4) 进入相应目录启动SkyWalking OAP服务(./oapService.sh) 和UI服务(./startup.sh) 。
2.1.4 部署SkyWalking Agent
SkyWalking Agent是一个数据探测引擎,也称为语言探针。它是官方提供的一个可以方便集成到不同应用中的实现数据采集的独立插件,根据具体应用所采取的技术实现不同,官方提供了多种不同的数据引擎供下载[4]。通过配置可以集成到不同的应用系统中。本研究用来链路跟踪测试的系统是一个基于SpringBoot+SpringCloud的微服务系统,项目构建环境使用Maven。因此需要使用到Java Agent数据探测引擎。在项目中集成Java Agent的部署过程如下: