Some of this information is available in Azure Monitor, particularly Azure Resource Graph for VMs.
A query like this should work:
QuotaResources
| where type =~ "microsoft.compute/locations/usages"
| mv-expand json = properties.value limit 400
| extend usagevCPUs = json.currentValue, QuotaLimit = json['limit'], quotaName = tostring(json['name'].localizedValue)
| where usagevCPUs > 0
| extend usagePercent = toint(usagevCPUs)*100 / toint(QuotaLimit)
| project subscriptionId,quotaName,usagevCPUs,QuotaLimit,usagePercent,location,json
| order by ['usagePercent'] desc
You can for example use it in Grafana with the Azure Monitor datasource, which can be used both for visualisations and for Grafana alerts.