是否有任何 API 可以查询 Azure VM 的可用磁盘/内存空间?

One*_*Two 1 azure

查看通过 azure Metrics API 磁盘空间可用的指标,也不是可用内存,都可以作为指标使用。

https://docs.microsoft.com/en-us/azure/azure-monitor/platform/metrics-supported#microsoftcomputevirtualmachines

现在我知道我可以使用它通过门户查看这些指标。

https://docs.microsoft.com/en-us/azure/cost-management/azure-vm-extended-metrics#enable-extended-metrics-in-the-azure-portal

但我特别希望定期查询这些数据,以便在我的任何 VM 磁盘空间快满(或内存快满)时提醒我。

有没有办法做到这一点?

Kri*_*SFT 5

如果你的最终目标是

  1. 设置警报并在达到阈值时收到通知 - 然后您可以通过创建日志警报规则来完成。有关详细信息,请参阅文档。
  2. 使用 API 查询 Azure VM 的可用磁盘/内存空间指标 - 然后遵循API 参考或文档。
  3. 使用 PowerShell 查询 Azure VM 的可用磁盘/内存空间指标 - 然后执行cmdlet。

对于上述所有工作方式,您必须首先

  1. 创建一个 Log Analytics 工作区并在 Azure VM 中安装 Log Analytics 代理(或者换句话说,启用 Log Analytics VM 扩展)。若要使用 Azure 门户完成此操作,请遵循文档。要使用 Azure PowerShell / CLI 完成相同的操作,请根据 Azure VM 的操作系统执行文档。
  2. 一旦您的 Azure Log Analytics 工作区开始收集日志数据,然后转到 Azure 门户 -> Log Analytics 工作区 -> 您的 Log Analytics 工作区 -> 日志,然后键入您的 kusto 查询以查找 VM 的可用磁盘/内存空间详细信息。查询将如下所示。

如果您的 Azure VM 是 Windows 操作系统,则查询以查找磁盘总可用空间为:

Perf
| where ( ObjectName == "LogicalDisk" )
| where ( CounterName == "% Free Space" )
| where ( InstanceName == "_Total" )
| summarize AggregatedValue= avg(CounterValue) by Computer, bin(TimeGenerated, 30s)
Run Code Online (Sandbox Code Playgroud)

如果您的 Azure VM 是 Windows 操作系统,则查找磁盘 C 驱动器可用空间的查询是:

Perf
| where ( ObjectName == "LogicalDisk" )
| where ( CounterName == "% Free Space" )
| where ( InstanceName == "C:" )
| summarize AggregatedValue= avg(CounterValue) by Computer, bin(TimeGenerated, 30s)
Run Code Online (Sandbox Code Playgroud)

如果您的 Azure VM 是 Linux 操作系统,则查询以查找磁盘总可用空间为:

Perf
| where ( ObjectName == "Logical Disk" )
| where ( CounterName == "% Free Space" )
| where ( InstanceName == "_Total" )
| summarize AggregatedValue= avg(CounterValue) by Computer, bin(TimeGenerated, 30s)
Run Code Online (Sandbox Code Playgroud)

如果您的 Azure VM 是 Linux 操作系统,那么查找挂载在 Root 可用空间上的磁盘的查询是:

Perf
| where ( ObjectName == "Logical Disk" )
| where ( CounterName == "% Free Space" )
| where ( InstanceName == "/" )
| summarize AggregatedValue= avg(CounterValue) by Computer, bin(TimeGenerated, 30s)
Run Code Online (Sandbox Code Playgroud)

如果您的 Azure VM 是 Linux 操作系统,那么查找可用 MBytes 内存的查询是:

Perf
| where ( ObjectName == "Memory" )
| where ( CounterName == "Available MBytes Memory" )
| summarize AggregatedValue= avg(CounterValue) by Computer, bin(TimeGenerated, 30s) 
Run Code Online (Sandbox Code Playgroud)

如果您的 Azure VM 是 Windows 操作系统,则对可用 MBytes 的查询是:

Perf
| where ( ObjectName == "Memory" )
| where ( CounterName == "Available MBytes" )
| summarize AggregatedValue= avg(CounterValue) by Computer, bin(TimeGenerated, 30s)
Run Code Online (Sandbox Code Playgroud)

如果您的 Azure VM 是 Windows 操作系统,则查询使用中的已提交字节数为:

Perf
| where ( ObjectName == "Memory" )
| where ( CounterName == "% Committed Bytes In Use" )
| summarize AggregatedValue= avg(CounterValue) by Computer, bin(TimeGenerated, 30s)
Run Code Online (Sandbox Code Playgroud)

注意 1:要使上述所有查询正常工作,请确保在 Azure 门户 -> Log Analytics 工作区 -> 您的 Log Analytics 工作区 -> 高级设置 -> 数据 -> Windows 性能计数器 / Linux 性能计数器中添加了相应的性能计数器。

注2:使用其他性能计数器,您还可以获取更多数据,例如磁盘读取时间、磁盘写入时间、空闲时间、当前磁盘队列长度、缓存字节、提交字节、页面错误、页面读取、页面写入、空闲 inode 等.

希望这可以帮助!干杯!