Azure Data Explorer(Kusto)查询与分析
执行 KQL 查询并管理 Azure Data Explorer 资源,以便针对日志、遥测和时间序列数据开展快速且可扩展的大数据分析。
Skill 激活触发条件
当用户提出以下要求时,立即使用此 skill:
- "查询我的 Kusto 数据库中符合 [数据模式] 的数据"
- "显示 Azure Data Explorer 中过去一小时内的事件"
- "分析我的 ADX 集群中的日志"
- "在 [数据库] 中运行 KQL 查询"
- "我的 Kusto 数据库中有哪些表?"
- "显示 [表] 的架构"
- "列出我的 Azure Data Explorer 集群"
- "按 [维度] 聚合遥测数据"
- "基于我的日志创建时间序列图表"
关键指标:
- 提及 "Kusto"、"Azure Data Explorer"、"ADX" 或 "KQL"
- 日志分析或遥测分析请求
- 时间序列数据探索
- IoT 数据分析查询
- SIEM 或安全分析任务
- 针对大型数据集的数据聚合请求
- 性能监控或 APM 查询
概述
此 skill 支持查询和管理 Azure Data Explorer(Kusto)。这是一项针对日志和遥测数据进行优化的快速、高度可扩展的数据探索服务。Azure Data Explorer 使用 Kusto 查询语言(KQL),可对数十亿条记录实现亚秒级查询性能。
核心能力:
- 查询执行:针对海量数据集运行 KQL 查询
- 架构探索:发现表、列和数据类型
- 资源管理:列出集群和数据库
- 分析:聚合、时间序列、异常检测、机器学习
核心工作流
- 发现资源:列出订阅中可用的集群和数据库
- 探索架构:检索表结构以了解数据模型
- 查询数据:执行 KQL 查询以进行分析、筛选和聚合
- 分析结果:处理查询输出,以获得洞察并生成报告
查询模式
模式 1:基础数据检索
使用简单筛选从表中获取最近的记录。
KQL 示例:
Events
| where Timestamp > ago(1h)
| take 100
适用于:快速数据检查、最近事件检索
模式 2:聚合分析
按维度汇总数据,以获得洞察并生成报告。
KQL 示例:
Events
| summarize count() by EventType, bin(Timestamp, 1h)
| order by count_ desc
适用于:事件计数、分布分析、前 N 项查询
模式 3:时间序列分析
分析不同时间窗口内的数据,以识别趋势和模式。
KQL 示例:
Telemetry
| where Timestamp > ago(24h)
| summarize avg(ResponseTime), percentiles(ResponseTime, 50, 95, 99) by bin(Timestamp, 5m)
| render timechart
适用于:性能监控、趋势分析、异常检测
模式 4:联接与关联
合并多个表以进行跨数据集分析。
KQL 示例:
Events
| where EventType == "Error"
| join kind=inner (
Logs
| where Severity == "Critical"
) on CorrelationId
| project Timestamp, EventType, LogMessage, Severity
适用于:根因分析、关联事件跟踪
模式 5:架构发现
在查询前探索表结构。
Tools: kusto_table_schema_get
适用于:了解数据模型、规划查询
关键数据字段
执行查询时,常见字段模式如下:
- 时间戳:事件时间(日期时间)- 使用
ago()、between()和bin()进行时间筛选 - EventType/Category:用于分组的分类字段
- CorrelationId/SessionId:用于跟踪相关事件
- Severity/Level:用于按重要性筛选
- Dimensions:用于分组和筛选的自定义属性
结果格式
查询结果包括:
- 列:字段名称和数据类型
- 行:与查询匹配的数据记录
- 统计信息:行数、执行时间、资源利用率
- 可视化:图表渲染提示(时间图、条形图等)
KQL 最佳实践
🟢 性能优化:
- 尽早筛选:在联接和聚合之前使用
where - 限制结果大小:使用
take或limit减少数据传输 - 时间筛选:对于时序数据,始终按时间范围进行筛选
- 索引列:优先筛选索引列
🔵 查询模式:
- 使用
summarize进行聚合,而不是单独使用count() - 使用
bin()对时序数据进行时间分桶 - 使用
project仅选择所需列 - 使用
extend添加计算字段
🟡 常用函数:
ago(timespan):相对时间(ago(1h)、ago(7d))between(start .. end):范围筛选startswith()、contains()、matches regex:字符串筛选parse、extract:从字符串中提取值percentiles(),avg(),sum(),max(),min(): Aggregations
最佳实践
- 始终包含时间范围筛选条件,以优化查询性能
- 对探索性查询使用
take或limit,以避免产生大型结果集 - 使用
summarize进行聚合,而不是在客户端处理 - 将常用查询作为函数存储在数据库中
- 使用物化视图处理重复聚合
- 监控查询性能和资源消耗
- 应用数据保留策略以管理存储成本
- 使用流式引入进行实时分析(延迟低于 1 秒)
- 与 Azure Monitor 集成以获取运维洞察
使用的 MCP 工具
| 工具 | 用途 | |------|---------| | kusto_cluster_list | 列出订阅中的所有 Azure Data Explorer 群集 | | kusto_database_list | 列出指定 Kusto 群集中的所有数据库 | | kusto_query | 对 Kusto 数据库执行 KQL 查询 | | kusto_table_schema_get | 获取指定表的架构信息 |
必填参数:
subscription:Azure 订阅 ID 或显示名称cluster:Kusto 群集名称(例如,"mycluster")database:数据库名称query:KQL 查询字符串(用于查询操作)table:表名(用于架构操作)
可选参数:
resource-group:资源组名称(用于列出操作)tenant:Azure AD 租户 ID
回退策略:Azure CLI 命令
如果 Azure MCP Kusto 工具失败、超时或不可用,则使用 Azure CLI 命令作为回退方案。
CLI 命令参考
| 操作 | Azure CLI 命令 | |-----------|-------------------| | 列出群集 | az kusto cluster list --resource-group <rg-name> | | 列出数据库 | az kusto database list --cluster-name <cluster> --resource-group <rg-name> | | 显示群集 | az kusto cluster show --name <cluster> --resource-group <rg-name> | | 显示数据库 | az kusto database show --cluster-name <cluster> --database-name <db> --resource-group <rg-name> |
通过 Azure CLI 执行 KQL 查询
对于查询,请使用 Kusto REST API 或直接使用群集 URL:
az rest --method post \
--url "https://<cluster>.<region>.kusto.windows.net/v1/rest/query" \
--body "{ \"db\": \"<database>\", \"csl\": \"<kql-query>\" }"
何时回退
在以下情况下切换到 Azure CLI:
- MCP 工具返回超时错误(查询时间 > 60 秒)
- MCP 工具返回 "service unavailable" 或连接错误
- 使用 MCP 工具时身份验证失败
- 已知数据库中有数据,但响应为空
常见问题
- 访问被拒绝:验证数据库权限(查询至少需要查看者角色)
- 查询超时:使用时间筛选条件优化查询、缩小结果集或延长超时时间
- 语法错误:验证 KQL 语法——常见问题:缺少管道符、运算符不正确
- 结果为空:检查时间范围筛选条件(可能过于严格),并验证表名
- 未找到群集:检查群集名称格式(不含 ".kusto.windows.net" 后缀)
- CPU 使用率过高:查询范围过大——添加筛选条件、缩短时间范围并限制聚合操作
- 摄取延迟:流式数据可能会有 1-30 秒的延迟,具体取决于摄取方式
用例
- 日志分析:应用日志、系统日志、审计日志
- IoT 分析:传感器数据、设备遥测数据、实时监控
- 安全分析:SIEM 数据、威胁检测、安全事件关联
- APM:应用性能指标、用户行为、错误跟踪
- 商业智能:点击流分析、用户分析、运营 KPI