直接用graph-match运算符配合离线状态标记可快速定位组织架构图中的离线分支节点,需基于status=="offline"等属性匹配根节点,并通过图遍历识别其下无在线子节点的整片静默区。

直接用 graph-match 运算符配合离线状态标记,就能快速定位组织架构图中的离线分支节点。
确认离线状态的标识方式
离线分支通常由某个明确属性体现,比如:
- 节点属性 status == "offline" 或 isActive == false
- 边属性 connectionState == "broken"
- 或通过时间戳判断:如 lastHeartbeat < ago(7d)
确保图数据中已存有这类可查询字段,否则需先补全元数据。
编写匹配离线子图的 pattern
离线分支本质是“以某个离线节点为根、向下全部不可达或无活跃子节点”的连通结构。可用如下 pattern 表达:
-
MATCH (n:Node) WHERE n.status == "offline" RETURN n—— 找出所有离线根节点 -
MATCH (n:Node)-[e*0..5]->(m:Node) WHERE n.status == "offline" AND NOT any(x IN nodes(e) WHERE x.status == "online") RETURN n, m—— 查找离线节点及其最多5层内全无在线子节点的路径(需 Kusto 支持递归边) - 更稳妥写法(推荐):
graph-match (n) WHERE n.status == "offline" | project nodeId = n.node_id, nodeName = n.name
结合层级与传播逻辑做二次过滤
单纯匹配离线节点不够——需确认其下级是否也集体失联。可叠加以下逻辑:
- 用
node_degree_out(n)检查该节点是否有向外汇报关系;若为 0,可能是末端离线节点 - 用
node_degree_in(n)判断上级是否存在;若为 0 且 status=offline,可能是孤立分支根 - 对每个匹配到的
n,执行子查询:| extend hasOnlineDescendant = toscalar(GRAPHMATCH ... | where status=="online" | count),再筛选hasOnlineDescendant == 0
可视化验证与导出结果
匹配结果可直接用于高亮或导出:
- 在拓扑视图中,将匹配出的
nodeId列表传入搜索框,用图形搜索批量黄色高亮 - 点击任一结果,画布中对应节点变红,便于人工复核上下文
- 导出为 CSV 或生成告警清单:
| project nodeId, nodeName, department, lastHeartbeat | sort by lastHeartbeat asc
不复杂但容易忽略:离线分支常跨多个层级,单靠 WHERE status=="offline" 只能抓根,必须结合图遍历能力才能识别整片“静默区”。

















