以编程方式获取Azure App Service本地磁盘使用情况

时间:2020-07-11 09:37:03

标签: c# azure azure-web-app-service azure-app-service-plans

Azure应用程序服务对使用的本地(临时)存储量有限制。但是,据我了解,限制是整个应用程序服务计划的全部。

我想在不超出限制的情况下最大限度地利用本地存储。但是,在同一个应用程序服务计划中将其分散在多个应用程序服务中,就变得棘手。

是否有一个REST API返回应用程序服务计划本地磁盘使用情况?甚至更好的方法是从环境中获取这种信息?

可以在Kudu的“环境”选项卡上查看用法,但我想在正在运行的Web应用程序中的代码中进行此操作。

2 个答案:

答案 0 :(得分:0)

您可以list usages by restapi。在正式文档中进行测试时出了点问题,您需要使用Postman之类的工具进行测试。

例如https://management.azure.com/subscriptions/{subscriptions}/resourceGroups/{resourceGroups}/providers/Microsoft.Web/sites/{webappname}/usages?api-version=2019-08-01&$filter=name.value eq 'FileSystemStorage'

enter image description here

答案 1 :(得分:0)

您可以调用GetDiskFreeSpace API来找出磁盘可用空间:

public static decimal GetAvailableSpaceInBytes(string path)
{
    uint sectorsPerCluster;
    uint bytesPerSector;
    uint numberOfFreeClusters;
    uint totalNumberOfClusters;

    GetDiskFreeSpace(path, out sectorsPerCluster, out bytesPerSector, out numberOfFreeClusters, out totalNumberOfClusters);
    long bytes = (long)numberOfFreeClusters * sectorsPerCluster * bytesPerSector;
    
    return bytes;
}

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern bool GetDiskFreeSpace(
    string lpRootPathName,
    out uint lpSectorsPerCluster,
    out uint lpBytesPerSector,
    out uint lpNumberOfFreeClusters,
    out uint lpTotalNumberOfClusters);

请记住,App Service将为Web应用程序使用的文件夹设置配额,并且查询GetDiskFreeSpace将在Web App配额的上下文中返回可用空间。

对于给定的Azure App Service Web App可写文件夹知道这一点很有趣。