Azure Log Analytics跨工作区查询时如何调用各目标工作区的监视列表(Watchlist)
Azure Log Analytics跨工作区查询时如何调用各目标工作区的监视列表(Watchlist)
嗨,这个问题我之前处理跨工作区日志查询时也遇到过——默认情况下_GetWatchlist只会读取你当前执行查询所在工作区的监视列表,没法自动匹配每个目标工作区的对应列表,不过咱们可以换个写法解决这个问题~
核心思路是:对每个目标工作区单独编写子查询,在子查询里明确指定要调用该工作区的监视列表,再把所有子查询的结果合并起来。修改后的Kusto查询如下:
union ( workspace("<workspace_id1>").Heartbeat | where TimeGenerated > ago(timeRange) | where not (Computer in ( workspace("<workspace_id1>")._GetWatchlist('<watchlist_name>') | project SearchKey)) | summarize arg_max(TimeGenerated,*) by Computer, OSType ), ( workspace("<workspace_id2>").Heartbeat | where TimeGenerated > ago(timeRange) | where not (Computer in ( workspace("<workspace_id2>")._GetWatchlist('<watchlist_name>') | project SearchKey)) | summarize arg_max(TimeGenerated,*) by Computer, OSType )
为什么这样可行?
_GetWatchlist函数默认作用域是当前查询所在的工作区,所以我们需要给每个_GetWatchlist加上workspace("<工作区ID>").前缀,让它去对应的目标工作区拉取监视列表数据,这样每个子查询里的Heartbeat都会用自身工作区的列表做过滤,最后通过union合并所有符合条件的结果,就达到你要的效果啦。
如果你的工作区数量比较多,还可以考虑把重复的逻辑封装成Kusto函数,传入工作区ID和监视列表名作为参数,这样能减少代码冗余,不过对于少量工作区来说,上面的写法已经足够清晰好用了。
备注:内容来源于stack exchange,提问作者Tiago Duarte
相关产品推荐
相关产品推荐

