用途
azure-kusto-graph 用于在 Kusto 中从表格数据构建和查询图。它把自然语言转换为“边优先”的图构建模式和图查询算子,帮助用户用 KQL 表达图结构、模式匹配、路径查找和连通分量分析。
该技能不是自然语言到 KQL 的通用转换器。输入通常应是一个可用的 KQL 查询(其结果是用户希望转换为图的数据),再加上对目标图结构的自然语言描述。只有当自然语言请求能直接映射到已知表且列明显时,才支持基本的自然语言源请求。通用自然语言转 KQL 请使用专门的查询生成技能(单独提供)。
主要能力
- make-graph:从表构建图。语法为
Edges | make-graph SourceId --> TargetId with Nodes on NodeId。Edges 是每行代表一条边的表格源;SourceId --> TargetId 是包含源和目标节点 ID 的列;with Nodes on NodeId 是可选的按 ID 连接的节点属性表。支持多个节点表:with Nodes1 on Id1, Nodes2 on Id2。出现在边中但节点表中缺失的节点会得到空属性。 - graph-match:查找模式。语法为
G | graph-match (a)-[e]->(b) where <constraints> project <output>。支持命名/匿名节点与边、左右方向与任意方向、可变长度(如-[e*1..5]->)、多跳模式、星型模式,以及 cycles 控制(all | none | unique_edges,默认 unique_edges)。 - graph-shortest-paths:查找最短路径。语法为
G | graph-shortest-paths (start)-[e*1..20]->(end) where ... project Path = e, Length = array_length(e)。要求至少一个可变长度边;output = any(默认,每对一条路径)或 output = all(所有等长最短路径);可变长度边属性以动态数组返回。 - graph-to-table:将图导出为表。支持导出 nodes、edges 或两者;可包含节点哈希 ID(with_node_id=Id)和边端点 ID(with_source_id=Src with_target_id=Tgt)。
- graph-mark-components:查找连通分量。为每个节点分配 ComponentId,同一连通分量中的节点共享同一 ID。
- graph() 函数:查询持久化图。
graph("MyGraphModel")取最新快照,graph("MyGraphModel", "Snapshot_2025_01")取指定快照,graph("MyGraphModel", true)从模型定义创建临时图。
使用方式
边优先方法的基本模式:
- 定义边(EDGES)-> src --> dest,带关系类型/属性;
- 定义节点查找(NODE LOOKUPS)-> 每个节点 ID 的显示名、类型、属性;
- 合并边类型(如有多种关系);
- 合并节点查找(如有多种节点类型);
- 调用 make-graph:
edges | make-graph Source --> Target with nodes on nodeId。
临时图在查询执行期间动态创建,无需设置,适合临时分析、探索和原型设计。持久化图用于大规模、可复用的图,存储在数据库元数据中,支持快照以进行历史比较。
创建持久化图模型使用 .create-or-alter graph_model,创建快照使用 .make graph_snapshot,查询快照使用 graph("SecurityGraph") | graph-match ...。管理命令包括 .show graph_models、.show graph_model、.show graph_snapshots、.drop graph_snapshot、.drop graph_model。
安全提示:创建或修改图模型和快照会修改数据库。在执行 .create-or-alter graph_model 或 .make graph_snapshot 前,应始终展示确切命令并与用户确认。所有控制命令(.drop、.create-or-alter graph_model、.make graph_snapshot)都会修改或删除数据库对象,不应自动执行,必须展示确切命令、集群、数据库和受影响对象,并要求用户明确确认。
在 Kusto Explorer 中可视化:查询结束于 make-graph(不接 graph-match)可触发 Kusto Explorer 的交互式图可视化窗口。要展平回表用于仪表板或导出,可通过 graph-match | project 或 graph-to-table 管道。
适用场景
- 从表格数据构建图(make-graph)
- 在数据中查找模式、路径或关系
- 使用 graph-match、graph-shortest-paths、graph-to-table、graph-mark-components
- 创建持久化图模型或快照
- 询问临时图与持久化图的区别
- 安全与威胁狩猎:认证图(谁从何处登录了什么)、横向移动检测(共享受损主机的用户)、最短攻击路径、连通分量(发现孤立集群)
- 与 IRQL 配合:使用 azure-kusto-irql 技能的选择器(Get_*)作为数据源,提供统一模式;azure-kusto-irql-graph 技能的 Lift_To_Graph 用于带图标和节点折叠的丰富可视化
限制
- 不是自然语言到 KQL 的通用转换器;输入通常应是可用的 KQL 查询结果加自然语言图结构描述。
- 基本自然语言源请求仅在能直接映射到已知表且列明显时支持。
- 临时图受查询内存限制;持久化图面向企业级规模。
- Lift_To_Graph、Graph_Render_View 和 Graph_Fold_By_Property 是存储函数,不是内置算子;它们预部署在 kc7001 示例集群上,其他集群可能需要部署。
- 在 Kusto Explorer 中打开查询(仅 Windows)是可选便利功能;默认工作流是在聊天中输出 KQL,让用户手动复制到 Kusto Explorer 或 VS Code Kusto 扩展。自动启动仅限选择加入。
MCP 工具
- kusto_query:执行 KQL 查询,包括 make-graph、graph-match 和管理命令
- kusto_table_schema_get:在构建边/节点投影前发现表列
- kusto_cluster_list:列出可用的 ADX 集群
- kusto_database_list:列出集群中的数据库