利用鸿鹄可观测性监控Istio Ingress网关

news2024/12/29 9:45:49

一、需求描述

在上一篇《利用Vector和鸿鹄搭建微服务应用的可观测性平台》中,阐述了微服务的基本概念、优点及如何利用鸿鹄来处理分布式应用的日志。本文将进一步讨论微服务架构面临的问题、服务网格及鸿鹄处理Istio Gateway的独特优势。

1.1 微服务架构面临的挑战

1.1.1 云基础设施并不总是可靠

无论是公有云还是私有云,都由成千上万的硬件和软件构成。理论上,或多或少存在不可用的组件。而我们的微服务一般会部署在云上,工程师在构建微服务时,一般都会假设基础设施是非永久的且部分基础设施甚至是不可用状态。所以在架构中,必须前瞻性地考虑云基础设施的非永久性特征。

1.1.2 必须确保服务之间通信的弹性

因为云基础设施的不可靠性,在设计微服务系统的时候,需要考虑服务本身的弹性,确保部分基础设施不可用的情况下,还能持续对外提供服务。业界目前一般有如下的解决方案:

  • 客户端负载均衡: 提供多个服务端点,由客户端决定如何调用

  • 服务发现机制:定期的更新健康的服务端点

  • 短路:对于非正常的服务,实施一定时间的隔离

  • 限制措施:对连接数、线程数、会话数等进行限制

  • 超时:对API请求的时长,设置超时机制

  • 重试及重试控制:失败重试及限制最大重试次数或一定时间范围内的重试次数

  • 请求有效期限:如果请求返还超时,则丢弃,不做进一步处理

1.1.3 实时了解系统状态

我们需要实时的知道服务之间的调用关系、某个典型服务当前的负载、失败是否在预期之内、如果服务挂了系统如何表现等。总的来说,运营一个微服务平台,除了微服务本身,利用指标类数据、日志、追踪来把握整个系统的全局是必不可少的一环。

1.2 传统的解决方案:应用程序库

早期的时候,为了解决如上的问题,业界一般采用应用程序库(如下),以方便开发人员快速地开发和实现非功能性的需求,但带来的坏处是应用程序必须和某个语言绑定。

  • Hystrix:用于短路及限流

  • Ribbon:用于客户端负载均衡

  • Eureka:服务注册和发现

  • Zuul:动态服务代理

1.3 现代的解决方案:服务网格

服务网格是一种透明的、独立于程序之外的、用于处理网络通信的分布式基础设施,它由数据平面和控制平面所组成,如下图所示:

图片

微服务架构集成服务网格后,对日志收集和监控也带来了进一步要求;分析上述拓扑图,我们需要收集对应的Istio Proxy日志及进一步做关联分析,经过了解,这也是鸿鹄平台所擅长的。

二、解决方案

2.1 系统架构

图片

相比于上一篇《利用Vector和鸿鹄搭建微服务应用的可观测性平台》, 此方案引入了Istio服务网格的概念,除了采集应用程序本身的日志之外,需要采集Istio Ingress Gateway和Istio Proxy的日志,以得到对全局服务网格的洞察性。

2.2 数据接入

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

2.2.1 启用鸿鹄数据收集接口

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

图片

2.2.1.2 配置Vector接口,选择数据集范围

图片

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

图片

2.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)

2.3 数据加工

2.3.1 创建数据源

鸿鹄系统提供了常用的数据源类型,比如json、csv、nginx、syslog等,以方便用户开箱即用地接入数据。本文提到的Istio Ingress Gateway网关本身是基于Envoy实现的,为了更好的说明后续步骤,让我们首先来介绍下Istio Gateway日志的格式。

根据文档 Envoy Access Log(https://istio.io/latest/docs/tasks/observability/logs/access-log/),默认格式如下:

图片

图片

根据如上的信息,Envoy的日志包含了丰富的信息,为了后续方便分析和处理,需要单独创建数据源,如下图。

图片

2.3.2 字段加工

字段加工是鸿鹄的核心功能,也就是在读时模式下,对字段进行进一步抽取和丰富,以满足各种业务部门对同一数据以不同视角分析的需要。那接下去以Envoy Access Log为例,看看鸿鹄是怎么做的。

2.3.2.1 打开高级搜索窗口

图片

从搜索窗口可以看到,此数据包含266279条数据,因为没有对数据进行读时抽取,共用0.9s时间。

2.3.2.2 点击 “抽取新字段”,进入字段抽取向导页面

图片

2.3.2.3 编辑正则表达式,抽取所需的字段

选择抽取规则为正则抽取,正则表达式如下图所示

图片

图片

按向导保存抽取规则,即可看到数据源类型增加了一条读时抽取规则。

图片

2.3.2.4 支持多重可持续抽取

鸿鹄系统支持多重可持续性抽取,也就是基于新字段的基础上,可以再抽取再产生字段,比如拿UserAgent字段来说,可以再抽取,获取user_agent_os、user_agent_os_version、user_agent_name、user_agent_version等新字段。能够在读时支持字段多重可持续抽取,鸿鹄在这块应该是属于一枝独秀的。

图片

2.3.2.5 验证读时抽取规则

打开高级搜索, 我们可以看到同样的数据规模,搜索时间有一定的增加,但期望的字段已经成功抽取,可以进一步分析和形成所需仪表盘。

图片

2.4 数据展示

2.4.1 查询加速

前面数据加工部分,我们讲述了如何利用鸿鹄的读时建模机制来动态抽取字段。在数据展示环节,大概率会对同一数据源做搜索,这样就会大概率降低页面展现的效果。鸿鹄系统充分地考虑这一点,提供了几种机制来提高搜索加速。本文会比较细致的讲述预存查询功能。

创建预存查询

进入高级查询  --> 查询 --> 点击“另存为” --> 选择预存查询, 注意红框部分

图片

从预存查询中搜索

进入高级查询  --> 利用saved_search表函数从预存查询中进行查询。

从结果来看,利用预存查询,性能提高了4-5倍。

图片

2.4.2 展示效果

图片

图片

图片

三、鸿鹄价值

鸿鹄平台提供了一整套从数据导入、二次加工及仪表盘快速生成的一整套解决方案,方便用户能快速构建监控平台。本文着重提到的几个核心功能,围绕数据工程师的日常工作,对数据收集、收据探索、数据展示做了高度封装和抽象,减少了使用者的门槛。

3.1 技术优势

自建数据源类型:在大数据领域,存在各种半结构化和非结构化的数据,每一个数据源类型,对应的处理逻辑不尽相同。鸿鹄允许用户非常方便地定义特有的数据源类型,且对每个类型可以灵活定义ingest time和search time的抽取规则。

读时模式:满足了基于同一数据源,不同视角审视的需求。大大地减轻了数据采集端的复杂度。功能上,鸿鹄可满足不同机制的抽取规则,从简单的JSON规则、键值对规则到复杂的正则抽取规则。

查询加速:在数据展示阶段,考虑到用户大概率会对同一数据同时做查询,必然会牺牲性能的前提下,鸿鹄提供了一系列加速查询的方案,以提高页面展示的效果。

3.2 应用价值

精确定位问题,提高开发效率:比如本次使用中,我们对浏览器类型做了分析,发现某一个浏览器类型名字有错误,汇报给开发人员后,结合鸿鹄的日志,开发人员很快定位了问题,及时修复了客户端类型名字错误。

即时监控Envoy网关, DevOps团队能精确的掌握进出站的相关流量指标和访问异常信息。

四、期待的改善

本文体验了鸿鹄几个高级核心功能,能够非常方便地满足业务的需求。从个人角度来看,以下几个部分觉得可以改善以提高用户的友好性:

  • 数据抽取正则规则:自动划取字段和手工输入,这两个功能可以合并在一个功能页面上,减少用户切换操作页面。

  • 数据抽取正则表达式性能:鸿鹄社区中提供了高效正则表达式匹配文档来指导用户更高效地使用正则来做数据加工,避免正则性能陷阱。对于用户,我们期待的更多。非常期望,在将来的版本中,鸿鹄本身就可以对正则进行分析,以辅助用户修正性能不高的表达式,从而提供使用的友好性。

  • 更多的案例支撑加速查询的最佳实践:物化试图和预存查询是鸿鹄系统提供两个加速查询的高级功能,在初次使用过程中,比较难以取舍该用哪个方案来加速查询。相信随着社区的发展,会有越来越多的实际案例来指导用户在这个环节的最佳实践。

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

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

相关文章

学习委员之作业管理系统—前端部分

拯救学习委员之作业管理系统—前端部分 项目背景 学习委员收集作业的过程,繁琐且曲折,作者充分理解并体谅为大家服务的苦逼学习委员,以此为出发点和灵感,设计并开发了此套作业管理系统,希望能帮助各位提高效率&#…

语义检索系统【三】:基于Milvus 搭建召回系统抽取向量进行检索,加速索引

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

[openCV]基于拟合中线的智能车巡线方案V4

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表"""newDir d…

Linux(四)--包软件管理器与Linux上软件的下载示例

一.包软件管理器【yum和apt】 1.先来学习使用yum命令。yum:RPM包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题。通过yum命令我们可以轻松实现软件的下载,查找,卸载与更新等管理软件的操作。 最常用…

线程池-手写线程池Linux C简单版本(生产者-消费者模型)

目录 简介手写线程池线程池结构体分析task_ttask_queue_tthread_pool_t 线程池函数分析thread_pool_createthread_pool_postthread_workerthread_pool_destroywait_all_donethread_pool_free 主函数调用 运行结果 简介 本线程池采用C语言实现 线程池的场景: 当某些…

Delphi 开发的QR二维码生成工具,开箱即用

目录 一、基本功能: 二、使用说明: 三、操作演示gif 四、下载链接 在日常的开发中,经常需要将一个链接生成为二维码图片,特别是在进行支付开发的时候,因为我们支付后台获取了支付链接,需要变成二维码扫…

设计模式行为型——解释器模式

目录 什么是解释器模式 解释器模式的实现 解释器模式角色 解释器模式类图 解释器模式举例 解释器模式代码实现 解释器模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是解释器模式 解释器模式(Interpreter Pattern)属于行为型模式&…

SOLIDWORKS中的弹簧设计指南

SOLIDWORKS是一款广泛使用的三维计算机辅助设计软件,可以用于设计各种机械零件和组件,包括弹簧。在SOLIDWORKS中设计弹簧需要注意一些关键点,本文将为您介绍SOLIDWORKS中的弹簧设计指南。 1. 弹簧类型 按受力性质,弹簧类型包括压…

小程序云开发快速入门(1/4)

前言 从上次完成了码仔备忘录本地版本后,码仔就养成了每天记录备忘录的好习惯,每周早上会记录下自己要做的任务,然后晚上在复盘一下今天的计划是否完成。 有一天,码仔看到它最喜欢的码妞在一旁愁眉苦脸。 码仔:“怎么…

5个设计师必备的绘画工具,不看错亿

在设计工作中,绘画工具是设计师经常会用到的设计工具,今天本文将与大家分享5个好用的绘画工具,一起来看看吧! 1、即时灵感 即时灵感是一款非常受欢迎的绘画工具,它为设计师提供了自由的绘画方式,也提供了…

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

091.粉刷房子

一、题目 剑指 Offer II 091. 粉刷房子 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public:int minCost(vector<vector<int>>& costs) {int row costs.size();int col costs[0].size();if (row 1)return min(min(costs[0][0], cos…

Liunx开发工具

Liunx开发工具 1.Linux编辑器-vim使用1.1vim的基本概念1.2vim的基本操作1.3命令模式命令集1.3.1光标定位1.3.2光标移动1.3.3文本复制1.3.4文本操作 1.4插入模式命令集1.5底行模式命令集 2.vim配置3.sudo配置4.Linux编辑器-gcc/g使用4.1背景知识4.2gcc如何操作 5.函数库5.1函数库…

ES6 - generator和async函数

一、前言 ES6 诞生以前&#xff0c;异步编程的方法&#xff0c;大概有下面四种。 回调函数事件监听发布/订阅Promise 对象 回调函数本身并没有问题&#xff0c;它的问题出现在多个回调函数嵌套会造成回调地狱&#xff0c;非常不利于代码的维护和逻辑混乱等问题&#xff1b; …

数论分块学习笔记

准备开始复习莫比乌斯反演&#xff0c;杜教筛这一部分&#xff0c;先复习一下数论分块 0.随便说说 数论分块可以计算如下形式的式子 ∑ i 1 n f ( i ) g ( ⌊ n i ⌋ ) \sum_{i1}^{n}f(i)g(\lfloor\frac{n}{i}\rfloor) ∑i1n​f(i)g(⌊in​⌋)。 利用的原理是 ⌊ n i ⌋ \lf…

StarRocks数据库部署全记录(保姆式帮助你初次体验StarRocks)

因业务需要&#xff0c;特此了解StarRocks产品和部署。 接触过程中发现指导资料很稀少&#xff0c;本人将结合官方的手册其他开源博主指导&#xff0c;将第一次接触到的概念和部署流程梳理&#xff0c;得出本文。 已有的资源中对细节介绍欠缺&#xff0c;导致我本人整个过程中花…

fifo读写的数据个数

fifo IP核设置读写个数 如果不勾选精确值&#xff0c;则统计的当前写入和待读出的数据为估计值&#xff0c;可能会相差2个左右。且fifo设计的wr_data_count. wr_data_count&#xff1a;当前的fifo中剩余已经写入的数据。 rd_data_count&#xff1a;当前的fifo中剩余可以读出…

Codeforces Round 855 (Div. 3) E题题解

文章目录 [ Unforgivable Curse (hard version)](https://codeforces.com/contest/1800/problem/E2)问题建模问题分析方法1分析性质1.分析操作对元素位置的影响2.分析可以使用操作的元素可以与相邻元素交换位置的作用代码 方法2通过DFS得到相互可以交换位置的字符集合代码 方法…

vue3和typescript_组件

1 components下新建myComponent.vue 2 页面中引入组件&#xff0c;传入值&#xff0c;并且绑定事件函数。 3

原型链污染,nodejs逃逸例子

文章目录 原型链污染原型链污染原理原型链污染小例子 原型链污染题目解析第一题第二题 Nodejs沙箱逃逸方法一方法二 原型链污染 原型链污染原理 原型链 function test(){this.a test; } b new test;可以看到b在实例化为test对象以后&#xff0c;就可以输出test类中的属性a…