0

我想使用 Log Analytics 查询在 Monitor Workbook 中跟踪我们的 VM 的 SLA。为此,我使用了“心跳”表,它给出了每个虚拟机的心跳。但是,我们的一些虚拟机位于可用性集/区域中,因此,只有在 1 分钟的间隔内,两个心跳都丢失时,SLA 才会被破坏。因此,我需要能够在查询中按可用性集/区域对心跳进行分组,但心跳上似乎没有这样的属性。

我可以使用单独的 Azure Resource Graph 查询来搜索哪些 VM 位于可用性集/区域中,但是当我将此查询与我的 Log Analytics 查询合并时,我无法对查询进行任何进一步的 Kusto 查询语言处理(我只能合并表)。

有关信息,这些是我的 Log Analytics 检测信号查询和我的资源图 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
4

1 回答 1

0

它有多少资源?

如果不是大量资源,解决方法是:

  1. 在文本参数中运行您的 ARG 查询,并格式化查询结果以有效地生成一个 json 对象数组,其中包含您需要的 id、位置等。然后将此参数标记为隐藏

  2. 在您的 Logs 查询中,在查询之前引用该参数 json 文本,并使用 KQL 运算符将该 JSON 结构转换为表。然后您可以在查询中加入/过滤该表

它不是最优的,如果有大量资源也不会很好地工作,因为每次运行查询时,您实际上是在“上传”一个 json blob,然后立即再次将其解析。

于 2021-04-28T19:38:16.587 回答