Azure Data Explorer(Kusto)学习笔记

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: Azure在2018年推出了Data Explorer产品,提供实时海量流数据的分析服务(非流计算),面向应用、网站、移动端等设备。以下是对于该产品的解读和学习笔记。

Azure Data Explorer 指南

Azure在2018年推出了Data Explorer产品,提供实时海量流数据的分析服务(非流计算),面向应用、网站、移动端等设备。

用户可以查询,并交互式地对结果进行分析,以达到提升产品、增强用户体验、监控设备、用户增长等目的。其中提供一些机器学习函数,能够进行异常、模式识别、并且发现数据中的趋势。

该服务面向秒-分钟级拿到结果的场景,类OLAP,对TP场景不敏感。

产品起源

Azure Data Explorer(ADE)内部代号叫Kusto,在Kusto之前,Azure对监控和分析场景散落在各产品中,例如:Log Analytics、Application Insight,Azure Monitor,Time Series Insight,这些产品在用不同的技术架构来解决不同数据源等问题,例如:

  • 通过PerfCounter和Event通过流数据进行聚合告警
  • 利用通用计数器写入时序数据库,配置实时Dashboard
  • 把应用数据写到数仓做深入分析

ADE的目标是对上层预定义计算、后计算做一层抽象:将原始数据进行通用存储,保留一段时间(例如几个月),对这些多样化数据进行快速的多维分析。

ADE在微软的内部代号为Kusto,由以色列研发团队提供。Azure Log Analytics开始选型是Elastic Search,每年付1M$用来获得支持,但效果不好,因此在2015年时对日志、Metric场景使用Kusto来提供,包括之前在cosmosDB中的分析工作。

image

截止 September 2018 的数据:

  • hundreds of teams within Microsoft
  • 41 Azure regions as 2800 Engine+DM cluster pairs
  • about 23000 VMs.
  • overall data size stored in Kusto and available for query is 210 petabytes
  • 6 petabytes ingested daily.
  • around 10 billion queries per month.

可以推测平均存储时间为:210 (PB) / 6 (PB) = 35 天

产品定义

面向数据类型是Immutable Data,特点是AppendOnly,并且大部分都是Semi-Structure Data,例如User Click Log,Access Log等。Big Data理论中90%都是这类数据,这也是Big Data理论数字化并洞察物理时间的基础。

从Facebook等数据来看,2017年时每天用户产生的视频(UGC)大约在10PB,但用户点击产生的日志量已经远远超过10PB这量,对视频网站而言,内容数据增量少于点击日志的增量已成为通用的规律。

image

Azure在宣传时这样定义自己的产品:

image

fast, fully managed data analytics service for real-time analysis on large volumes of data streaming from applications, websites, IoT devices, and more.

产品主要解决三类问题:

  • Customer Query (Advance Hunting)
  • Interactive UI (前者封装)
  • Background Automation(定时任务)

也有一些解释基于几个交互式产品来解释:底层是实时OLAP,上层是Jupiter(交互式) + Kibana(可视化)

image

从产品定位角度考虑,ADE处于中间层次(利用人的交互式分析能力进行发掘与探索):

  • integrates with other major services to provide an end-to-end solution 
  • pivotal role in the data warehousing flow by executing the EXPLORE step of the flow on terabytes of diverse raw data

image

除此之外ADE(Kusto)是

  • azure application insight, log analytics 基础
  • 为Azure Monitor, Azure Time Series Insights, and Windows Defender Advanced Threat Protection提供数据服务
  • 提供REST API, MS-TDS, and Azure Resource Manager service endpoints and several client libraries

数据模型与API

ADE以实例方式给用户付费,用户购买一组实例后可以创建:

  • Database
  • Table:存储实例,包含Schema(表结构和字段类型),Mapping(如何从CSV、Avro等格式映射)
  • Functions:自定义函数,利用scalar语言可以定义自定义方法,方便后期处理

image

整个API只有一组接口,通过类KQL方法来管理控制流与数据流,控制流以"."作为开头,例如 ".create table"。数据分析语言除了KQL外还支持SQL:

以下是一些案例:

创建:
.create table MyLogs ( Level:string, Timestamp:datetime, UserId:string, TraceId:string, Message:string, ProcessId:int32 ) 

创建或追加:
.create-merge tables MyLogs (Level:string, Timestamp:datetime, UserId:string, TraceId:string, Message:string, ProcessId:int32), MyUsers (UserId:string, Name:string)

.alter column ['Table'].['ColumnX'] type=string
更改列行为后,之前数据会变成Null,建议把数据筛选出来写入新的Table

映射关系:
.create table MyTable ingestion csv mapping "Mapping1" '[{ "Name" : "rownumber", "DataType":"int", "Ordinal" : 0},{ "Name" : "rowguid", "DataType":"string", "Ordinal" : 1 }]’ 
.create table MyTable ingestion json mapping "Mapping1" '[{ "column" : "rownumber", "datatype" : "int", "path" : "$.rownumber"},{ "column" : "rowguid", "path" : "$.rowguid" }]'

数据写入(ingestion)与导出(Export)

数据写入有三种方式:

  1. 其他数据源,例如CSV(Event Hub等)
.ingest into table T ('adl://contoso.azuredatalakestore.net/Path/To/File/file1.ext;impersonate') with (format='csv’)
  1. 通过Query从一个Table输出 ,有四种模式(set, append, set-or-replace, set-or-append),提供异步接口
.set RecentErrors <| LogsTable | where Level == "Error" and Timestamp > now() - time(1h)
  1. Inline方式,直接通过算子生成
.ingest inline into table Purchases <| Shoes,1000 Wide Shoes,50 "Coats, black",20 "Coats with ""quotes""",5

数据导出有2个大类:

  1. 导出到存储(Storage):
.export async compressed to csv ( h@"https://storage1.blob.core.windows.net/containerName;secretKey", h@"https://storage1.blob.core.windows.net/containerName2;secretKey" ) with ( sizeLimit=100000, namePrefix=export, includeHeaders=all, encoding =UTF8NoBOM ) 
<| myLogs | where id == "moshe" | limit 10000
  1. 导出到另外一个表(Table):
.export async to sql MySqlTable 
h@"Server=tcp:myserver.database.windows.net,1433;Database=MyDatabase;Authentication=Active Directory Integrated;Connection Timeout=30;" 
<| print Id="d3b68d12-cbd3-428b-807f-2c740f561989", Name="YSO4", DateOfBirth=datetime(2017-10-15)

控制流

Cursor 概念

数据导入时会有一个区块的概念,代表同一批数据,其中会有一个顺序的游标(Cursor),类似Kafka中每个Partition中数据唯一的位置。通过Cursor可以获得数据的唯一位置,Cursor以Ingestion Time为主(与字段无关),如果需要使用Cursor功能必须打开IngestionTime这个Feature。

以下例子就表示再倒入前后获取到某一个Cursor,在写入某些数据后,可以通过Cursor打印出当前位置后的数据。

.set table Employees policy ingestiontime true

Employees | where cursor_after('')

Employees | where cursor_after('636040929866477946') // -> 636040929866477950
Employees | where cursor_after('636040929866477950') // -> 636040929866479999
Employees | where cursor_after('636040929866479999') // -> 636040939866479000

系统管理与控制

提供状态查询,就不赘述了:

  • Diagnostics(Cluster Status,Capacity)
  • Journal(metadata operations performed on the Kusto database)
  • Queries(.show running queries )
  • Commands
  • Commands and Queries
  • Ingestion Failure

当前支持角色

Role Permissions
Database admin Can do "anything" in the scope of a particular database.
Database user Can read all data and metadata of the database; additionally, can create tables (thus becoming the table admin for that table) and functions in the database.
Database viewer Can read all data and metadata of the database.
Database ingestor Can ingest data to all existing tables in the database, but not query the data
Database unrestrictedviewer Can query all tables in the database which have the RestrictedViewAccess policy enabled.
Database monitor Can execute .show commands in the context of the database and its child entities.
Table admin Can do anything in the scope of a particular table.
Table ingestor Can ingest data in the scope of a particular table, but not query the data.

DataShard(extent 管理)

由于是列存储系统,数据写入时都以一大段数据DataShard(Extent)方式来组织。每个Table由若干Extent组成,每一批导入数据都为一个Extent。

image

每个Extent:

  • 都是immutable,不可更改
  • 由一系列定义好的列组成
  • 每个列存储可以切分为Segments,Segments由Block组成

image

Extent有如下属性:

  • Ingestion Time:代表生成时间,生命周期后的回收也以该时间为准
  • Retention:生命周期,先写入的Extent会被先回收
  • Extent有Cache能力,可以设置:默认Caching策略中最新的数据会更热
  • 如果执行Sampling:优先会选择最新的Extent
  • Extent对用户可以见,可以通过打标方式管理,例如:
Tagging(用来管理Extent)

.ingest ... with @'{"tags":"[\"drop-by:2016-02-17\"]"}' .drop extents <| .show table MyTable extents where tags has "drop-by:2016-02-17" 

Purge

Kusto在第一天设计的时候,默认不支持局部删除,只支持Retention。但GDPR出现后增加了局部删除功能,但不建议用户使用(建议用户通过倒部分数据进入另外Table方式解决),从描述看是类似一个Merge过程。

  1. Phase 1: 通过查询条件指定数据
  2. Phase 2: (Soft Delete) :对特定数据标记Version,时间在秒级到小时级,对特定操作会有Version(可以撤销)
  3. Phase 3: (Hard Delete) :完全删除,5天后进行,最长30天

Policy

  1. Cache vs Retention
set query_datascope="hotcache"; T | union U | join (T datascope=all | where Timestamp < ago(365d) on X
SoftDeletePeriod = 56d
hot cache policy = 28d
  1. Row Order

生态

image

分析流

包括查询语法与机器学习函数,之前整理过一个PPT(见附件),以PPT为主

技术架构

建议参见白皮书,里面详细阐述了数据,计算能力和Cache相关的底层技术。

价格说明

存储网络单独计费,计算部分通过购买实例方式进行,提供两种类型:存储优化、计算优化)。坦白来说价格不便宜,并且不提供按量的方式(LogAnalytics提供按量付费模式,可以认为需要个性化ADE的用户不差钱吧)。

实例 VCPU 存储 LINUX VM 价格 AZURE 数据资源管理器加价 即付即用总价
L4 4 678 GB SSD ~$250.390/月 ~$321.20/月 ~$571.59/月
L8 8 1.3 TB SSD ~$500.780/月 ~$642.40/月 ~$1,143.18/月
L16 16 2.7 TB SSD ~$1,002.29/月 ~$1,284.80/月 ~$2,287.09/月
实例 VCPU 存储 LINUX VM 价格 AZURE 数据资源管理器加价 即付即用总价
D11 v2 2 76 GB SSD ~$108.77/月 ~$160.60/月 ~$269.37/月
D12 v2 4 153 GB SSD ~$218.270/月 ~$321.20/月 ~$539.47/月
D13 v2 8 307 GB SSD ~$436.540/月 ~$642.40/月 ~$1,078.94/月
D14 v2 16 614 GB SSD ~$873.080/月 ~$1,284.80/月 ~$2,157.88/月

参考资料

技术白皮书:

目录
相关文章
|
9月前
|
安全 数据库 C#
阿里云最新域名注册和续费、云虚拟主机、企业邮箱收费价格表参考
域名,云虚拟主机,企业邮箱是阿里云旗下的基础产品,2025年截止目前阿里云平台注册.com域名的收费标准是85元,新用户首次注册可享受一定的优惠。本文为大家介绍2025年阿里云在域名注册与续费、云虚拟主机、以及企业邮箱方面的最新收费标准与优惠政策,帮助用户更好的了解自己所需产品的收费标准,以供参考。
|
前端开发 JavaScript UED
什么是组件化设计
【10月更文挑战第22天】什么是组件化设计
|
存储 安全 前端开发
数字货币交易所系统开发技术方案规则
数字货币交易所系统的开发涉及市场调研、功能需求、性能与安全、技术选型、系统设计、通信数据流、开发实现及测试调优等多个环节。本文档概述了各环节的关键技术方案和规则,旨在指导开发者构建高效、安全的数字货币交易平台。
|
UED 索引
震惊!大文件上传也能如此丝滑?揭秘断点续传黑科技,让你的文件传输快如闪电,再也不用担心中断烦恼!
【8月更文挑战第4天】互联网的发展使大文件上传成为应用常见需求,但易受网络等因素影响中断。断点续传技术将文件分块,每块独立上传,若中断可续传未完成部分,提升效率和体验。实现包括文件分块、初始化上传、逐块上传与校验、服务器合并文件,及处理续传逻辑。通过客户端与服务器协作,优化上传流程,适应网络波动,确保数据完整性。随着技术进步,断点续传方案将更高效可靠。
981 13
|
存储 缓存 自然语言处理
面试官问:Redis 是并发安全的吗?怎么做到的?
Redis作为一个非常成功的数据库,提供了非常丰富的数据类型和命令,使用这些,我们可以轻易而高效地完成很多缓存操作,可是总有一些比较特殊问题或需求需要解决,这时候可能就需要我们自己定制自己的 Redis 数据结构和命令。
面试官问:Redis 是并发安全的吗?怎么做到的?
|
Prometheus 监控 Cloud Native
微服务的监控与可观测性
【8月更文第29天】在微服务架构中,确保每个服务的健康状态和性能表现是非常重要的。为了达到这一目标,我们需要实施一套完整的监控和可观测性方案。本篇文章将介绍如何通过日志、指标和追踪来监测微服务的状态和性能,并提供相应的代码示例。
1122 0
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
安全 网络安全 数据安全/隐私保护
深入理解IP劫持及其对网络安全的影响
【8月更文挑战第24天】
1055 0
|
开发工具
IDEA中的Ctrl+c不好使的问题解决
IDEA中的Ctrl+c不好使的问题解决
1266 1
|
存储 安全 API
对象存储OSS产品常见问题之批量删除异常如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
443 0