利用Vector和鸿鹄搭建微服务应用的可观测性平台

news2024/11/16 17:46:41

一. 背景

1.1 什么是微服务应用

微服务应用由一组具有自治性的服务所组成,每一个服务只提供一类服务,这些服务一起协作以提供复杂的业务功能。相比于传统的单体应用,微服务应用是高度分布式的。如下图所示,即为一个典型的微服务应用:

图片

如上图所示,微服务一般具有以下几个大的特征:

自治性(Autonomy)

健壮性 (Resilience)

透明性 (Transparency)

自动化 (Automation)

一致性 (Alignment)

本篇文章我们重点聊一下透明性特征。在微服务应用中,当错误发生的时候,工程师需要及时地被告知。在微服务应用中,一个请求会跨越多个微服务,而这些微服务可能由不同的团队来开发。

这就需要每一个微服务具有透明性和可观测性,来保证工程人员在运营过程中,能够观测和诊断问题。在实际的系统开发和运营过程中,一般需要收集大量的数据来确保微服务的健康度,这些数据一般会涉及:

(1)业务、运营和基础设施的指标 

(2)应用日志 

(3)请求追踪

1.2 可观测性 (Observability)

可观测性平台的四大支柱包含:指标、追踪、日志和可视化。

1.2.1 指标类数据

指标类数据一般指的是定期收集的一类数据,数据类型为数字,通常我们会关注最小值、最大值、平均值和百分位值。指标类数据通常能够反应系统和应用的效能,比如某个微服务资源利用超过阈值的时候,可以触发告警,以帮助DevOps人员诊断问题和采取进一步地行动。

1.2.2 追踪

追踪(Tracing)是相关的分布式事件组成的序列。一般我们在网关层产生一个唯一的请求ID,这个请求ID会跨越所有的请求参与者,所以追踪其实就是一组带有请求ID的日志的组合。每一个记录带有追踪和调试的信息,比如入口时间、延迟信息等。

1.2.3 日志

日志指的是带有时间戳的事件,它可以包含各种信息,比如请求的确认信息、请求失败产生的错误信息等。

1.2.4 可视化

可视化能够帮助你更好的理解所收集的数据,能够最大地提高你洞察系统的能力。在工程团队中,除了自动化以提高运营效率外,很多问题的发现需要人工干预,从而相关的仪表板实时展示数据是非常有用的功能。

总的来说,在微服务应用下,搭建可观测性平台是一项挑战性的任务。我们需要知道全局信息。我们需要从独立的信息中组装全局的视图,以帮助运维人员掌握全局。本文借助于国产大数据分析平台鸿鹄来一步一步展示如何搭建可观测性平台。

二. 鸿鹄介绍

鸿鹄提供了从数据的导入、解析、存储、分析计算到数据可视化的一系列开箱即用的服务。每个数据处理阶段的能力都较为完善和强大。

数据采集和导入部分,可以轻松对接Vector/Kafka等数据源,也可接收标准REST API, HTTP等各类API的数据推送。

数据分析部分,采用标准的SQL查询语言,对于大部分技术人员来说,容易上手且技能通用,平台内置了100多种标量函数和表函数、视图、查找表等;并支持跨库和异构数据关联,可以满足各类业务分析需求。

可视化部分,提供大量开箱即用的图表类型,丰富的输入选择和钻取功能,多样化的图表协作编辑体验。

值得一提的是,鸿鹄的自主研发的读时建模引擎,可以快速导入和存储异构数据,支持动态调整数据模型和分析参数,无需固化模型和分析流程。当业务分析场景有变化时,只需调整SQL分析语句,快速响应。

经过初步的调研了解,鸿鹄基本符合我们搭建可观测性场景的需求。

三. 解决方案

3.1 系统架构

图片

基于鸿鹄简单易用的数据采集功能,可以非常容易地搭建如上的日志采集系统,方案说明如下:

每一个微服务会动态地部署到Kubernetes的节点上,每个微服务的输出会以kubernetes_logs格式存放在运行的节点上。

Vector Agent以DaemonSet的形式部署在每个节点上

鸿鹄内置了Vector接口,配置打开即可

Vector Agent对日志进行解析、丰富和转换后,最终会持续地拉日志到鸿鹄

3.2 数据接入

鸿鹄具备多种数据接入功能,内置的Vector和Kafka数据接入功能,大大方便了企业收集数据,导入鸿鹄分析平台进一步挖掘数据价值的便利性。基于以上的采集系统,具体操作步骤如下:

3.2.1 启用鸿鹄数据收集接口

3.2.1.1 进入:鸿鹄 -> 数据导入 -> 从外部数据源导入

图片

3.2.1.2 配置Vector接口,选择数据集范围(本文会创建datalog数据集)

图片

3.2.1.3 选择数据集和数据源类型,生成和下载Vector配置模版,以备后续配置Vector使用

图片

3.2.2 配置及安装Vector

图片

按照Vector的设计(如上图),Data Pipeline分为三个阶段:确定数据源、对数据做转换和数据汇集。以下是实际运行的配置文件(考虑到信息安全性,对部分做了脱敏处理)。这个配置主要包含了确定采集的数据源、数据如何被加工转换(多行处理、如何进一步解析和抽取数据、丰富数据以满足鸿鹄的需求)和数据最终汇集到鸿鹄,相信大家不难理解。

图片

有了Vector的配置文件,就可以安装Vector了。本文的方案需要采集运行在Kubernetes上的微服务的日志,Vector将会用Helm命令来安装,具体命令如下:

图片

如果需要详细了解Vector Helm chart,可参考 Vector Helm Chart(https://github.com/vectordotdev/helm-charts/tree/develop/charts/vector)

3.2.3 验证数据

数据进入到鸿鹄之后,如下图所示,系统会对数据进行索引构建和原始数据存储,之后用户即可制作仪表板和即时分析。

图片

当我们的数据,进入鸿鹄后,可以打开鸿鹄做查询确认。

打开鸿鹄-》查询-》高级查询,执行简单的SQL,即可看到即时的数据:

图片

图片

3.3 应用场景

3.3.1 统计各个服务发生的所有事件

图片

3.3.2 统计外部请求

在统计一些指标时,经常需要用时间段来分类统计。鸿鹄在这个的处理逻辑非常得方便,只要对时间进行一定的转换,然后基于转换后的时间,直接聚类分析即可。

图片

3.3.3 统计请求的处理时间

基于微服务应用,每个请求会跨越一个或者多个容器,计算请求的处理时间,需要叠加一个或者多个容器的处理时间。我们的应用在一开始就考虑了这一点,请求在进入应用网关的时候,就会被分配一个request_id, 随后request_id会记录在各种应用的日志中。基于这个实现,利用鸿鹄提供的窗口函数,基于request_id聚类事件后,大致可以计算出每个request的处理时间。

图片

3.3.4 API网关日志的输出

微服务系统中,网关至关重要。目前主流的网关都是基于Nginx和Envoy的各种实现。我们在业务部署中,这两种类型的网关都会涉及。本文只涉及如何监控Nginx网关,以后有机会可以谈谈如何用鸿鹄来监控基于Envoy的网关。对于Nginx,鸿鹄已经有现成的案例,制作仪表板只要导入仪表盘的Nginx配置文件即可。

进入 鸿鹄 --> 仪表板 --> 新建仪表板 --> 导入配置文件即可

图片

3.3.5 最终效果图

3.3.5.1 Nginx网关监控

图片

3.3.5.2 应用监控

图片

四. 使用感受

经历了安装、数据导入、数据分析和数据可视化的整个过程中,鸿鹄系统在国产化大数据产品中,给人耳目一新的感觉。相比其它同类产品,鸿鹄优势体现在:

产品的KISS原则:鸿鹄大数据系统设计简单,用户上手方便。从数据导入、分析和可视化来看,系统内聚性好,大部分情况下,用户无需查看文档,即可开始分析数据。

强大的分析功能:鸿鹄采用扩展的SQL语句来处理结构化、半结构化和非结构化的数据,能够利用标量函数和表函数对原始数据进行丰富和转换,帮助用户深度挖掘数据的价值。

适应数据分析业务的需要:鸿鹄系统提供了读时建模功能,从业务角度来说满足了一份原始数据,可以满足不同业务部门的分析需求。

鸿鹄大数据分析平台,随着社区版的发布、用户和生态的不断扩大,产品功能必然会越来越丰富 -- 不忘初心,以成鸿鹄之志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式软件—RK3568开发环境搭建

一、RK3568 1.1 开发板特点 BSP比较大,对于电脑内存和存储空间要求高 1.2 BSP BSP(Board Support Package,板级支持包),类似于PC系统中BIOS和驱动程序的集合,BSP包含的范围更广,除了外设驱动…

20.2 HTML 常用标签

1. head头部标签 <head>标签用于定义网页的头部, 其中的内容是给浏览器读取和解析的, 并不在网页中直接显示给用户. <head>标签通常包含以下一些常见的子标签: - <title>: 定义网页的标题, 在浏览器的标题栏或标签页上显示. - <meta>: 用于设置网页的…

Kotlin知识点

Kotlin 是 Google 推荐的用于创建新 Android 应用的语言。使用 Kotlin&#xff0c;可以花更短的时间编写出更好的 Android 应用。 基础 Kotlin 程序必须具有主函数&#xff0c;这是 Kotlin 编译器在代码中开始编译的特定位置。主函数是程序的入口点&#xff0c;或者说是起点。…

java+springboot+mysql大学图书共享交流平台

项目介绍&#xff1a; 使用javassmmysql开发的大学图书共享交流平台&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 用户&#xff1a;主要是前台功能使用&#xff0c;包括注册、登录&#xff1b;查看图书交流&#xff08;…

[学习笔记]全面掌握Django ORM

参考资料&#xff1a;全面掌握Django ORM 1.1 课程内容与导学 学习目标&#xff1a;独立使用django完成orm的开发 学习内容&#xff1a;Django ORM所有知识点 2.1 ORM介绍 ORM&#xff1a;Object-Relational Mapping Django的ORM详解 在django中&#xff0c;应用的文件夹…

陪玩接单小程序开发方案详解

陪玩接单小程序有哪些功能呢&#xff1f;游戏陪玩&#xff0c;电竞游戏发布需求&#xff0c;接单平台小程序开发。 一 推单师推单&#xff0c;陪玩师接单&#xff0c;推单师派单&#xff0c;在线支付。 二 陪玩师接单&#xff0c;我的陪玩订单&#xff0c;我的钱包&#xff0c;…

2.获取DOM元素

获取DOM元素就是利用JS选择页面中的标签元素 2.1 根据CSS选择器来获取DOM元素(重点) 2.1.1选择匹配的第一个元素 语法: document.querySelector( css选择器 )参数: 包含一个或多个有效的CSS选择器 字符串 返回值: CSS选择器匹配的第一个元素&#xff0c;一个HTMLElement对象…

docker基础7——harbor私有仓库

文章目录 一、基本了解二、搭建私有仓库2.1 基于官方镜像搭建2.2 基于harbor 一、基本了解 大部分企业都会搭建一个内部使用得私有仓库&#xff0c;用于保存docker镜像&#xff0c;包括镜像的层次结构和元数据。 Docker Registry分类&#xff1a; 企业版EE。官方docker hub仓库…

【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU

早上百度搜“神经网络KPU”&#xff0c;查到与非网的一篇文章《一文读懂APU/BPU/CPU/DPU/EPU/FPU/GPU等处理器》&#xff0c;介绍各种处理器非常详细&#xff0c;关于“KPU”的内容如下&#xff1a; KPU Knowledge Processing Unit。 嘉楠耘智&#xff08;canaan&#xff09;号…

了解11种常见的字符编码格式及其使用场景,让数据传输不再出现问题

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 前言 在有一次SDK开发中&#xff0c;…

选读SQL经典实例笔记14_层次查询

1. 结果集 1.1. sql select empno,mgrfrom emp order by 2EMPNO MGR ---------- ----------7788 75667902 75667499 76987521 76987900 76987844 76987654 76987934 77827876 77887566 78397782 7…

React之生命周期

React之生命周期 旧版本&#xff0c;函数组件是没有生命周期的。新版本中通过useEffect触发函数的生命周期 一、基于类组件的生命周期 React的组件生命周期分为挂载阶段、更新阶段和销毁阶段。因为React的state不具有Vue的响应式&#xff0c;所以并没有create阶段 1、挂载阶段&…

Linux学习之循环处理位置参数

for处理位置参数 loopPositionFor.sh里边的内容如下&#xff1a; #!/bin/bash# show learningfor inputString in $* doif [ "${inputString}" "good" ];thenecho "learning"fi donechmod urx loopPositionFor.sh给当前用户把loopPositionFor…

linux NDK交叉编译rtmp 与 ffmpeg+rtmp交叉编译(v7a,v8a) 完成流程

最近在学RTMP,记录一下完成的编译流程 我是mac 电脑,但是mac上编译一直通过不了,后来才换到服务器上编译, 其实mac也能编译,只是最开始踩到坑里面了… 这里记录一下linux编译完整流程 环境: NDK: android-ndk-r17cFfmpeg: ffmpeg4.2.2 (高版本也可以编译)system: mac 1. …

HCIA实验四

一.实验要求&#xff1a; 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4与其他所有直连设备间均使用共有IP&#xff1b; 2、R3 - R5/6/7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个网络配置OSPF环境&#xff0c;IP基于172.16.0.0/16网段划分&#x…

分享5个AI办公新玩法,1行Python代码免费实现!

大家好&#xff0c;这里是程序员晚枫&#xff0c;小破站也叫这个名。 随着ChatGPT的兴起&#xff0c;AI办公也越来越火&#xff0c;今天给大家分享5个AI办公的第三方库&#xff0c;不仅全部免费而且都可以用1行Python代码启动。 赶紧去看看吧&#xff01; 1、智能聊天机器人…

关于minio的简单使用

最近在学习minio相关知识&#xff0c;小小的记录一下学习内容 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等…

【自动化测试】Selenium IDE脚本编辑与操作

之前&#xff0c;我们录制脚本时是录制鼠标和键盘的所有在浏览器的操作&#xff0c;那么脚本会出现多余的步骤&#xff0c;有时候我们需要手动填写脚本或修改脚本&#xff0c;所以我们有必要对selenium IDE脚本编辑与操作有所了解&#xff1b;&#xff08;采用录制的方式很容易…

如何解决大数据下滚动页面卡顿问题

原文合集地址如下&#xff0c;有需要的朋友可以关注 本文地址 合集地址 前言 之前遇到不分页直接获取到全部数据&#xff0c;前端滚动查看数据&#xff0c;页面就听卡顿的&#xff0c;当然这和电脑浏览器性能啥的还是有点关系。但根源还是一次性渲染数据过多导致的&#xf…

【Git】初始化仓库配置与本地仓库提交流程

目录 一、仓库配置邮箱与用户名 二、本地仓库提交流程 一、仓库配置邮箱与用户名 【Git】Linux服务器Centos环境下安装Git与创建本地仓库_centos git仓库搭建_1373i的博客-CSDN博客https://blog.csdn.net/qq_61903414/article/details/131260033?spm1001.2014.3001.5501 在…