StoreView SQL,让数据分析不受地域限制

作者:章建(处知)

引言

日志服务 SLS 是云原生观测和分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务。SLS 提供了多地域支持【1】,方便用户可以根据数据源就近接入 SLS 服务,减少不必要网络延迟以及公网费用。然而,如果需要将不同地域的数据进行联合统筹分析时,该怎么办呢?

SLS 近期推出的 StoreView 功能,可以协助用户便捷地进行跨域、跨 project 的查询和统计分析。StoreView 允许将多个 project 下(支持跨域)的 logstore 数据组合成一个虚拟的 logstore 使用,用户可以像使用一个 logstore 那样,使用 StoreView 进行各种查询分析。

数据准备

下面以 4 个 demo projects 对几个常遇到的场景进行说明,这 4 个 projects 来自不同的地域,信息如下:

其中,每个 project 都包含一个名为 user-queries 的 logstore,包含的核心字段如下:

字段名称类型含义
requestId字符串请求的唯一ID
status整数请求状态,200,400, 500等
latencyMs整数请求延迟
resultRows整数返回的结果行数
prcessedBytes整数处理的原始数据量(字节)
prcessedRows整数处理的原始数据量(行数)
query字符串SQL的具体内容

如何进行全域分析?

主要问题

在支持 StoreView 之前,如果需要对多个地域的 logstore 数据进行整体分析,则需要通过 ETL 任务先将各个地域的 logstore 数据同步到中心化的 logstore下,即需要为上面 4 个 demo project 下的 logstore 按照如下步骤创建同步 logstore 数据的加工任务(具体参考数据加工概述【2】)。

所有加工任务创建成功后,就可以使用中心化的 logstore centralized-user-queries 进行统计分析了。

可以看到,上面的操作非常繁琐,需要为每个 logstore 创建加工任务。另外,这种方式会导致数据存储量放大,即每个 logstore 的存储量会增加一倍,而且还有公网流量,从而导致产生额外费用。因此,通过加工任务的方式将多个地域的数据同步到一个 project 下,不仅费时费力,还费钱。

现在的做法

鉴于通过 ETL 任务将多地域的数据同步到一个 project 下的缺点,SLS 推出了 StoreView 功能,允许将不同地域、不同 project 下的多个 logstore 进行组合,形成一个虚拟的 logstore。用户基于 StoreView 对跨域、跨 project 的多个 logstore 数据进行统筹分析下时,就像对单个 logstore 进行分析一样简单。进入任意一个 project,参考文档数据集(StoreView)概述【3】 ,创建如下 StoreView 定义。

创建好上面的 StoreView 定义后,就可以进入对应的查询分析页面进行操作了。通过下面 SQL 语句,可以在 StoreView 下实现和加工中心化 logstore 查询分析一样的效果。

可以看到,相比于为每个 logstore 创建加工任务,创建 StoreView 非常简单。同时,使用 StoreView 进行数据分析时,不会存在 ETL 任务同步数据延迟的问题,因为它是实时地读取底层每个 logstore 的数据。

StoreView SPL 特性

StoreView 除了能够高效地解决数据因地域隔离导致查询分析不方便的问题外,它还集成了 SPL 句法加工数据的能力(参看 SPL 句法【4】,当前 StoreView 仅支持 extend、project 以及 where 三种指令)。基于 SPL 丰富的函数以及算子,StoreView 可以实现诸多 logstore 本身不具备的能力,下面将从数据可见性控制、查询式 ETL 处理以及异构数据 schema 对齐等方面展开介绍。

数据可见性控制

对于 logstore 中的数据,有时我们想控制数据行级别的可见性,比如对于运维人员,我们想让他们只有权限看到报错的 queries 信息(方便他们监控系统的异常情况),但无权限查看正常的 queries。对于普通 logstore 而言,目前无法做到行级别的可见性控制(当前授权仅支持以 logstore 为粒度),但采用 StoreView 后,却非常容易实现这一点,比如我们可以创建如下图所示的 StoreView。

上面的 StoreView 中额外定义了一个查询过滤,它限定了返回没有匹配 status 为 200 的数据。通过下的 SQL 结果,可以清楚地看到,从 failed_user_queries 这个 StoreView 中只能看到错误的 queries 统计结果,而成功 queries(status 为 200)全部被过滤掉了。

因此,如果有行级别的数据可见性管理需求,StoreView 正好可以派上用场。

查询式 ETL 处理

有时候,logstore 中可能会包含一些敏感信息,我们并不想让团队中普通组员看到(但允许他们查看其他非敏感的字段信息)。比如,对于 user-queries 这个 logstore,我不想让所有人看到 sourceIp 以及 userId 这两个用户敏感信息,那该怎么处理呢?

按照之前的做法,可以通过数据加工任务对原始的 logstore 数据进行脱敏后,保存到另外一个 logstore 中,然后再将这个新的 logstore 开放给普通成员。虽然这样操作也能满足需求,但这不仅操作复杂,而且会增加额外的存储成本。基于 StoreView 的 SPL 能力,很容易满足这个需求,我们可以创建如下一个 StoreView。

通过下面的执行结果可以看到,无论是查询还是 SQL 分析,都看不到 sourceIp 和 userId 的原始内容。

可以看到,通过 StoreView 集成的 SPL 能力,可以非常便捷地对原始数据进行各种加工处理。相对于传统的 ETL 加工任务,StoreView SPL 定义更新更为灵活,修改后立刻对查询分析可见,而加工任务更新后,仅仅会作用于新写入源 logstore 中的数据。

异构数据 schema 对齐

在 SQL 场景下,StoreView 这个虚拟表支持的字段是所有底层 logstore 开启了统计分析字段的超集。对于多个 logstore 中同名但类型不同的分析字段,会归一化到 varchar 类型。但对于名称不同、含义相同的字段,怎么进行统一分析呢?比如,下面的场景中,统计每个 project 下 query 的平均延迟,结果发现 sls-cn-guangzhou-queries 对应的结果为 null,这是为什么呢?

经过分析发现,原来 sls-cn-guangzhou-queries 中的 query 数据并不包含 latencyMs 这个字段,它的数据中对应的字段名称实际上为 latency。针对这种情况,我们仍然可以通过 SPL 的 extend 算子解决这种问题,即为 latency 字段增加一个 alias 字段(当前 SPL 会默认将所有字段作为 varchar 处理,下面 SPL 中进行了类型转换)。

经过上面的操作后,SQL 的执行结果就符合预期了,具体如下所示。

StoreView meta 字段

StoreView SQL 提供了 project 以及 logstore 两个 meta 字段,它们分别表示数据原始所对应的 project 以及 logstore 名称。用户可以基于这两个 meta 字段来识别 StoreView 中结果的来源。比如,我们可以通过以下 SQL 来对比分析每个 project 下一天的处理数据量。

结语

通过上面的实例分析可以看到,SLS StoreView 功能为用户提供了极为便捷的跨 project 查询和分析能力,用户不再需要通过创建加工任务来汇聚数据,节省了用户的使用成本。当前,控制台直接 SQL 分析以及大盘展示已经支持 StoreView(告警目前还不支持,后续也会考虑放开)。当然,因为跨 project 进行查询和分析,会涉及到跨域读取数据,整个处理链路受网络影响可能较大。后期我们会不断完善 StoreView 的易用性、稳定性和性能,让用户基于 StoreView 就能轻松愉悦地查询分析全地域的数据,真正做到数据分析不受地域边界的限制。

【1】多地域支持

https://help.aliyun.com/zh/sls/product-overview/supported-regions

【2】数据加工概述

https://help.aliyun.com/zh/sls/user-guide/data-processing-new-edition-overview?spm=a2c4g.11186623.help-menu-28958.d_2_6_0_0.6f4067a2X0smir

【3】数据集(StoreView)概述

https://help.aliyun.com/zh/sls/user-guide/dataset-storeview-overview?spm=a2c4g.11186623.help-menu-28958.d_2_4_0.25fa2a1cwcy7dW

【4】SPL 句法

https://help.aliyun.com/zh/sls/user-guide/spl-overview/?spm=a2c4g.11186623.help-menu-28958.d_2_13.6778a945BHmS0U&scm=20140722.H_2536529._.OR_help-T_cn~zh-V_1

点击此处,体验日志服务 SLS StoreView 功能

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

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

相关文章

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…

Golang——10、日志处理和正则处理

日志处理和正则处理 1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer捕获panic 2、正则处理2.1、正则表达式语法大全2.2、基本匹配2.3、常见函数使用2.4、从html提取汉字demo 1、logx日志处理 1.1、logx简介 logx 是 go-zero 框架中用于日志记…

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…

C++八股 —— 单例模式

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

软件工程:如何做好软件产品

1、什么是产品 从项目到产品 产品:满足行业共性需求的标准产品。即要能够做到配置化的开发,用同一款产品最大限度地满足不同客户的需求,同时让产品具有可以快速响应客户需求变化的能力。 好的产品一定吸收了多个项目的共性,一定是…

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…

sqlsugar WhereIF条件的大于等于和等于查出来的坑

一、如下图所示,当我用 .WhereIF(input.Plancontroltype > 0, u > u.Plancontroltype (DnjqPlancontroltype)input.Plancontroltype) 这里面用等于的时候,返回结果一条数据都没有。 上图中生成的SQL如下: SELECT id AS Id ,code AS …

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…

React从基础入门到高级实战:React 实战项目 - 项目四:企业级仪表盘

React 实战项目:企业级仪表盘 欢迎来到 React 开发教程专栏 的第 29 篇!在前 28 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和实时通信等核心内容。这一次,我…

STM32----IAP远程升级

一、概述: IAP,全称是“In-Application Programming”,中文解释为“在程序中编程”。IAP是一种对通过微控制器的对外接口(如USART,IIC,CAN,USB,以太网接口甚至是无线射频通道&#…

模拟搭建私网访问外网、外网访问服务器服务的实践操作

目录 实验环境 实践要求 一、准备工作 1、准备四台虚拟机,分别标号 2、 防火墙额外添加两块网卡,自定义网络连接模式 3、 关闭虚拟机的图形管理工具 4、关闭防火墙 5、分别配置四台虚拟机的IP地址,此处举一个例子(使用的临…

删除远程已经不存在但本地仍然存在的Git分支

1. 获取远程分支列表 首先,确保你获取了远程仓库的最新分支信息: git fetch -p -p 参数会自动清理本地仓库中那些在远程已经被删除的分支的引用。 2. 查看本地分支与远程分支的对比 运行以下命令来查看哪些本地分支没有对应的远程分支: …

GIT(AI回答)

在Git中,git push 命令主要用于将本地分支的提交推送到‌远程仓库‌(如GitHub、GitLab等)。如果你希望将本地分支的改动同步到另一个‌本地分支‌,这不是 git push 的设计目的。以下是正确的替代方法: 方法1&#xff1…

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…

React - 组件通信

组件通信 概念:组件通信就是组件之间数据传递,根据组件嵌套关系不同,有不同的通信方法 父传子 —— 基础实现 实现步骤 父组件传递数据 - 在子组件标签上绑定属性子组件接收数据 - 子组件通过props参数接收数据 声明子组件并使用 //声明子…

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建

目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程.   本…

计算机视觉顶刊《International Journal of Computer Vision》2025年5月前沿热点可视化分析

追踪计算机视觉领域的前沿热点是把握技术发展方向、推动创新落地的关键,分析这些热点,不仅能洞察技术趋势,更能为科研选题和工程实践提供重要参考。本文对计算机视觉顶刊《International Journal of Computer Vision》2025年5月前沿热点进行了…

互联网大厂Java求职面试:云原生与微服务架构的深度探讨

互联网大厂Java求职面试:云原生与微服务架构的深度探讨 第一轮提问 面试官: “郑薪苦,假设我们要设计一个大规模电商平台的微服务架构,你会如何设计其订单服务?” 郑薪苦: “首先,我会采用…

STM32实战:数字音频播放器开发指南

基于STM32的数字音频播放器/效果器是个很棒的项目!这涉及到多个嵌入式开发的关键技术点。下面我为你拆解实现方案和关键学习内容: 系统架构概览 [SD Card] -> [File System (FATFS)] -> [Audio Decoder (WAV/MP3)] -> [DSP Processing (EQ, R…

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…