当前位置: 首页 > 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…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...