Kusto如何排除属于指定白名单IP段范围内的对应IP数据行?
Kusto IP白名单过滤实现方案
以下是匹配你给出示例和期望输出的完整可运行查询:
// 定义白名单IP范围,将字符串格式转换为可操作的动态数组 let ranges_to_whitelist = parse_json("['127.0.0.1', '10.0.0.0/28']"); // 原始IP数据表 let big_table_of_rows = datatable (ip_range: string) ['1.2.3.4', '10.0.0.254', '172.16.1.2', '10.0.0.1']; big_table_of_rows | mv-apply whitelist_range = ranges_to_whitelist on ( // 校验当前IP是否命中当前遍历的白名单范围 | project is_match = ipv4_is_in_range(ip_range, tostring(whitelist_range)) // 聚合判断单条IP是否命中任意一条白名单规则 | summarize hit_any_whitelist = max(is_match) ) // 按需求筛选:此处保留命中白名单的IP,和你给出的期望输出一致 | where hit_any_whitelist == true // 输出仅保留IP字段 | project ip_range
关键逻辑说明
parse_json():将你示例中字符串格式的白名单列表转换为Kusto支持的动态数组,若你的白名单本身就是动态数组类型可省略该步骤mv-apply:逐行遍历原始IP表,逐条匹配所有白名单规则,相较mv-expand不会产生大量冗余中间数据,更适合处理Azure Monitor这类大数据量场景ipv4_is_in_range():原生支持单个IP、CIDR格式IP段的匹配,无需额外计算网段边界- 如果你实际需求是排除白名单内的IP,仅需将where条件修改为
| where hit_any_whitelist == false即可
内容的提问来源于stack exchange,提问作者moutonjr
相关产品推荐
相关产品推荐

