【问题标题】:Is there any API to query an Azure VM for free disk/memory space?是否有任何 API 可以查询 Azure VM 的可用磁盘/内存空间?
【发布时间】:2020-02-18 10:13:13
【问题描述】:

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

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 磁盘空间快满(或内存快满)时提醒我。

有什么办法吗?

【问题讨论】:

  • 我认为您需要日志而不是指标。看看docs.microsoft.com/en-us/azure/azure-monitor/insights/…
  • 谢谢,不知道有没有办法使用api查询这些日志?
  • 我对 Monitor(当然它有一个 REST API)没有太多的了解。但这是关于 Log Analytics 工作区的东西,它的监视器适用于(我认为)。您还可以尝试 AzureVM 刀片中的“诊断设置”,它将某些内容作为 JSON blob 导出到普通存储帐户。门户现在有点故障,但我相信你也可以在那里找到性能计数器。
  • 这一切都让我很困惑。我启用了“诊断设置”,但日志保存在表中的存储帐户中,使用 API 查询并不容易。
  • 根据您在评论中的问题和讨论,仅与 Azure 有关。它不应与 Azure DevOps 相关,后者通过源代码控制、工作跟踪以及本地和云中的持续集成和交付协作进行软件开发。万一,你能删除那个不相关的azure-devops标签吗?

标签: azure


【解决方案1】:

如果你的最终目标是

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

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

  1. 创建 Log Analytics 工作区并在 Azure VM 中安装 Log Analytics 代理(或者换句话说,启用 Log Analytics VM 扩展)。要使用 Azure 门户完成此操作,请遵循 this 文档。要使用 Azure PowerShell / CLI 完成相同操作,请根据您的 Azure VM 的操作系统遵循 thisthis 文档。
  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)

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

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

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

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

如果您的 Azure VM 是 Linux 操作系统,则查询以查找安装在 Root 可用空间上的磁盘是:

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

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

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

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

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

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

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

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

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

希望这会有所帮助!干杯!

【讨论】:

    【解决方案2】:
    【解决方案3】:

    如果您在 Azure Monitor 中收集磁盘空间/可用内存作为自定义指标,您将能够通过标准 Azure Monitor Metrics REST API 查询它们。例如,您可以使用 Windows Azure 诊断 (WAD) 在 Windows VM 上收集这些性能计数器并将它们作为自定义指标发送。

    https://docs.microsoft.com/en-us/azure/azure-monitor/platform/metrics-custom-overview

    https://docs.microsoft.com/en-us/azure/azure-monitor/platform/rest-api-walkthrough

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 2021-10-16
      • 2015-10-26
      • 2018-01-15
      • 2014-11-29
      • 1970-01-01
      • 2020-02-18
      相关资源
      最近更新 更多