我想使用日志分析查询在监视器工作簿中跟踪虚拟机的SLA。为此,我使用了"心跳"表,它给出了每个VM的心跳。然而,我们的一些虚拟机位于可用性集/区域中,因此,SLA只是被破坏,如果间隔1分钟,两个心跳都会丢失。因此,我需要能够根据查询中的可用性集/区域对检测信号进行分组,但检测信号上似乎没有这样的属性。
我可以使用单独的Azure资源图查询来搜索可用性集/区域中的虚拟机,但当我将此查询与日志分析查询合并时,我无法对查询进行任何进一步的Kusto查询语言处理(我只能合并表(。
有关信息,这些是我的日志分析心跳查询和资源图SLA查询:
let timeRangeStart = {TimeRange:start};
let timeRangeEnd = {TimeRange:end};
Heartbeat
| where ResourceType == "virtualMachines"
| extend ResourceGroup = case(ResourceGroup <> "", ResourceGroup, "On-Prem")
| where TimeGenerated > timeRangeStart and TimeGenerated < timeRangeEnd and Computer in ({Servers})
| extend Resource=tolower(iff(isempty(_ResourceId), Resource, _ResourceId))
| summarize heartbeat_tot = count() by Resource,ResourceGroup, SubscriptionId
| extend total_number_of_buckets=round((timeRangeEnd-timeRangeStart)/1m)
| extend round(availability_rate=heartbeat_tot*100/total_number_of_buckets,2)
| extend availability_rate = min_of(availability_rate, 100)
| order by availability_rate asc
Resources // VMs
| where type == 'microsoft.compute/virtualmachines'
| extend AvSet = properties.availabilitySet.id
| extend AvZone = properties.availabilityZone.id
| extend VMname_SLA = iff(isnotempty(AvZone), AvZone, iff(isnotempty(AvSet), AvSet, id))
| extend SLA_VM = iff(isnotnull(AvZone), '99.99%', iff(isnotnull(AvSet), '99.95%', ''))
| extend managedBy = tolower(id)
| join kind = leftouter (
Resources // Disks
| where type == 'microsoft.compute/disks'
| where isnotempty(managedBy)
| extend managedBy = tolower(managedBy)
// What do Standard HDD disks have as SKU tag??? I used StandardHDD for the time being
| extend Tier_disk = sku.tier
| extend SLA_disk = iff(Tier_disk == 'StandardHDD', '95%', iff(Tier_disk == 'Standard', '99.5%', '99.9%'))
) on managedBy
| extend SLA_tot = iff(isnotempty(SLA_VM), SLA_VM, SLA_disk)
| project managedBy, VMname_SLA, SLA_tot
| order by managedBy asc
它有多少资源?
如果不是大量的资源,解决方法是:
-
在text参数中运行ARG查询,并格式化查询结果,以有效地生成一个json对象数组,其中包含您需要的id、位置等。然后将该参数标记为隐藏
-
在Logs查询中,在查询之前引用该参数json文本,并使用KQL运算符将该json结构转换为表。然后您可以在查询中加入/筛选该表
它不是最优的,如果有大量的资源,它就不会很好地运行,因为每次运行查询时,你都是有效的";上传";json blob,然后立即将其再次解析。