当前位置: 首页 > news >正文

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

一、需求描述

在上一篇《利用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团队能精确的掌握进出站的相关流量指标和访问异常信息。

四、期待的改善

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

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

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

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

相关文章:

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

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

vscode 前端开发插件 2023

自己记录 安装vscode后必装插件 chinesegit 必装没啥可说 随时更新 1.CSS Navigation CTRL点击类名可跳转到对应样式位置。 如果是scss less的话。css peak插件无法生效 2.GitLens — Git supercharged 可以看到每一行的git提交记录。 3.Auto Rename Tag 可以同步更新…...

使用docker部署Wordpress

文章目录 1.创建网络2.创建volume存储3.拉取镜像4.创建mysql容器mysql修改密码 5.创建wordpress容器6.访问localhost:80就可以直接使用啦 1.创建网络 docker network create --subnet172.18.0.0/24 pro-net2.创建volume存储 # mysql 存储 docker volume create volume_mysql…...

7.31黄金最新行情走势分析及多空交易策略

近期有哪些消息面影响黄金走势?黄金多空该如何研判? ​黄金消息面解析:上周有重磅数据美联储加息的消息,黄金受其影响波动比较频繁,总体空间40美金。但这个过程跌宕起伏。收线来看黄金在连续上涨三周后迎来一根小阴十…...

Spring框架——AOP注解方式

目录 Spring框架的AOP技术(注解方式) 通知类型 Spring框架的AOP技术(注解方式) 1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包* 先引入Spring框架开发的基本开发包com.springsource.org.apache.commo…...

Java 日志(Logging)如何创建和捕获日志消息和文件

Java允许我们通过日志记录过程来创建和捕获日志消息和文件。 在Java中,日志记录需要框架和API。Java在java.util.logging程序包中具有内置的日志记录框架。 Java 日志组件 下图显示了Java Logging API(java.util.logging)的核心组件和指定…...

em3288 linux_4.19 lvds+tp调试

一、显示配置\rk3288_linux4.19\kernel\arch\arm\boot\dts\rk3288-evb-act8846.dtspanel {compatible "simple-panel";backlight <&backlight>;bus-format <MEDIA_BUS_FMT_RGB666_1X18>;enable-gpios <&gpio1 24 GPIO_ACTIVE_HIGH>;ena…...

Linux 之 systemctl

systemctl 可以控制软件&#xff08;一般指服务&#xff09;的启动、关闭、开机自启动 能被systemctl 管理的软件&#xff0c;一般也称 服务 系统内置服务均可被 systemctl 控制第三方软件&#xff0c;如果 自动注册了 可被systemctl 控制第三方软件&#xff0c;如果没有自动…...

【技巧】通过 CMD 走代理下载 Vue

通过 CMD 走代理下载 Vue 在学习或者工作中&#xff0c;有时上网走的是代理模式&#xff0c;就是在浏览器里面配置代理服务的那种。后来在下载 Vue 组件的时候显示请求超时。此时才发先&#xff0c;浏览器代理只能在浏览器里生效&#xff0c;cmd 中不生效&#xff0c;那该怎么办…...

VSCode C/C++多文件编译配置

多文件编译备忘&#xff0c;带注释的地方都需要注意&#xff01;&#xff01;&#xff01; launch.json文件 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387&quo…...

Autosar通信入门系列05-聊聊一帧Can/CanFD报文发送时间?

本文框架 1. 概述2. 一帧CAN报文发送时间计算3. 一帧CanFD报文的传输时间计算3.1 标准CAN与CANFD两者间的区别3.2 CANFD报文传输时间计算 1. 概述 本篇我们一起看下一帧Can报文发送需要多长时间&#xff0c;下述文章里我们会首先计算下Can分别对应的字节数&#xff0c;再根据传…...

【phaser微信抖音小游戏开发002】hello world!

执行效果&#xff1a; 将以下代码文本内容&#xff0c;放入到game.js中即可。目录结构如下图 import ./js/libs/weapp-adapter import ./js/libs/symbolGameGlobal.window.scrollTo () > { };//防止真机出错 import Phaser from ./js/phaser//引入Phaservar {windowWidth, …...

2023.07.29 驱动开发DAY6

通过epoll实现一个并发服务器 服务器 #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/epoll.h…...

网工必须掌握的5种组网技术,你会了吗?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、VLAN技术 1、VLAN是什么&#xff1f; 2、VLAN的作用 ①提高网络安全性 ②提高了网络的灵活性性 ③增强了网络的健壮性 二、D…...

webpack中文文档

基本安装 首先我们创建一个目录&#xff0c;初始化 npm&#xff0c;然后 在本地安装 webpack&#xff0c;接着安装 webpack-cli&#xff08;此工具用于在命令行中运行 webpack&#xff09;&#xff1a; mkdir webpack-demo cd webpack-demo npm init -y npm install webpack …...

【Linux指令篇】--- Linux常用指令汇总(克服指令繁杂问题)

文章目录 前言&#x1f31f;一、Linux基本指令&#x1f31f;二、ls指令&#x1f30f;2.1.语法&#xff1a;&#x1f30f;2.2.功能&#xff1a;&#x1f30f;2.3.常用选项&#xff1a; &#x1f31f;三、pwd指令&#x1f30f;3.1.语法&#xff1a;&#x1f30f;3.2.功能&#xf…...

硬盘的分类

目前常见的硬盘种类主要有以下2种&#xff1a; 机械硬盘&#xff08;HDD&#xff09; 机械硬盘&#xff08;HDD&#xff09;是一种利用旋转磁盘和读写头来存储和访问数据的存储设备。它由磁盘、读写头、电机和控制电路等组成&#xff0c;磁盘通常是一种铝合金或玻璃材质的圆盘&…...

el-upload批量手动上传,并用form表单校验上传文件

手动上传设置:auto-upload"false" <el-formref"formData"class"formWidth":model"formData"label-width"120px":rules"rules"><el-form-itemlabel"数据"class"uploadClass"required…...

牛客网Verilog刷题——VL52

牛客网Verilog刷题——VL52 题目答案 题目 请编写一个十进制计数器模块&#xff0c;当mode信号为1&#xff0c;计数器输出信号递增&#xff0c;当mode信号为0&#xff0c;计数器输出信号递减。每次到达0&#xff0c;给出指示信号zero。模块的接口信号图如下&#xff1a; 模块的…...

4-7月预测价差方向准确率统计

月度 预测价差方向准确率 4月 33.6% 5月 28.4% 6月 25.7% 7月 34.2% 4-7月合计 30.6% 准确率计算公式&#xff1a; 其中&#xff0c; D&#xff1a;价差方向预测值&#xff08;1:实时>日前&#xff0c;0:实时日前&#xff0c;-1&#xff1a;实时<日前&#x…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...