【问题标题】:Expensive use of storage account from Azure FunctionsAzure Functions 中存储帐户的昂贵使用
【发布时间】:2018-09-26 23:38:56
【问题描述】:

我在消费计划上运行单个 Azure 函数。我已经选择了无服务器功能的消费计划以及最小化成本。该函数使用来自服务总线主题的消息并将一些输出写入 blob 存储。

在过去 30 天内保持该功能运行大约需要 10 美元。这是非常可接受的,因为该函数有很多消息要消耗。将输出写入 blob 存储大约需要 20 美元。也可以接受。我不明白的是,同期函数底层存储帐户的费用约为 70 美元。消耗主要针对文件写入操作单元文件协议操作单元。存储帐户创建为本地冗余通用 v1。

谁能解释这里发生了什么?查看存储帐户时,有一些 blob。我相信问题出在表存储上。检查存储帐户时,有如下表格:

$MetricsCapacityBlob $MetricsHourPrimaryTransactionBlob AzureWebJobsHostLogs201804

我已通过删除 AzureWebJobsDashboard 应用设置禁用登录我的功能。这样做之后,AzureWebJobsHostLogs* 表似乎不再接收新行。但 $Metrics* 表仍会收到新数据。不过,我不知道对这些表的写入是否会导致我在门户的成本管理视图中看到的所有文件写入活动。

这里发生了什么?真的需要从无服务器代码维护这些表吗?表访问的价格是函数本身价格的 7 倍听起来正常吗?

【问题讨论】:

  • 请检查此存储帐户的帐户类型?如果是General Purpose Storage V2,则此类帐户的定价明显高于您的 V1 帐户。
  • 这是本地冗余的通用 v1 存储。
  • 您的意思是您看到 additional 条目正在表存储中创建吗?如果您所看到的一切都是在您进行更改之前存在的,那么我不明白这个问题。
  • 我没有做任何改变。该功能一直在消耗计划上运行。直到现在我才看成本。我完全明白维护存储是有成本的,但我没想到它比运行函数本身要贵。
  • 你的函数每月运行多少次?

标签: azure azure-functions


【解决方案1】:

您应该转到 Azure 门户中的 Metrics 获取此存储帐户,并检查文件存储事务的使用模式。如果它一直很高,则说明您的应用程序存在问题(例如,要归档的日志过多)。

就我而言,这似乎是 Azure Functions 中的一个错误,我提交了一个错误here

在任何代码更改后,该函数开始消耗数以万计的读写事务,无论多么微小。所以基本上每次代码更改或部署都会花费我大约 0.20 美元,在你的情况下可能会更多。

这在 Metrics 图表中很容易看到,因为它看起来像是交易量的巨大高峰。

所以解决办法是:不要将日志写入文件系统,也不要经常部署。

【讨论】:

    【解决方案2】:

    有趣且不寻常的是,您的存储成本如此之高。我认为仪表板日志记录可能是罪魁祸首,因此如果您在接下来的几天内看到关闭它的下降,那将是很好的理解。

    我会花更多时间在 Azure 门户的成本分析部分,看看您是否可以获得更多详细信息,了解您的存储使用的哪个方面导致了大部分成本。即它是否与表操作、blob 操作等有关。此屏幕截图显示了成本历史视图,其中包含每米的细分。请注意此屏幕截图中的工具提示:

    $Metrics 表不是由 Azure Functions 编写的,它们是由 Azure 存储本身生成的。如果这些指标对您的总体成本有很大贡献,我会感到惊讶。但是如果你想尝试一下,我认为你可以通过这个 UX 禁用它们:

    为了让您了解预期的存储成本与函数执行成本的比率,您可能需要查看我在这篇博文中写的成本: https://blogs.msdn.microsoft.com/appserviceteam/2017/09/19/processing-100000-events-per-second-on-azure-functions/

    您会注意到存储成本低于函数,其中包括大量存储操作,因为事件中心处理需要将检查点写入存储。我会注意到这些测试是在仪表板注销的情况下运行的(再次让我怀疑这是主要的成本驱动因素)。所以不,您的存储成本是功能成本的 7 倍是不正常的!

    【讨论】:

    • 我相信我已经通过删除 AzureWebJobsDashboard 应用程序设置禁用了仪表板日志记录,对吧?我也确实深入研究了消费的细节。主要花费者是“文件写入操作单元”和“文件协议操作单元”。我正在考虑创建一个新函数并将我的代码移动到该函数以检查它是否会改变任何东西。我已经尝试创建一个新的存储帐户,以检查它是否是导致此问题的另一项服务。但这没有帮助。
    • 我已将代码部署到新的函数应用。将在两天内跟进并在此处发布结果。到目前为止,谢谢!
    • 有趣!所以文件单元来自天蓝色文件的使用。函数应用的文件系统由 azure 文件提供支持。但是不应该有文件写入操作,除非你在不断地部署或者你正在从你的函数代码写入文件系统?我猜另一种可能性是您启用了文件系统日志记录强制。你能检查你的host.json吗?您正在寻找一个名为“fileLoggingMode”的设置 - 如果将其设置为“always”,那么这就是罪魁祸首。
    • 我相信创建一个新函数并将代码部署到该函数已经解决了问题。我会在几天后再次跟进,看看存储成本是否仍然像现在一样低。如果您想查看旧功能的配置,请告诉我。
    • 我不会深入研究这个问题,因为成本仍然很低。如果您想进一步了解它,请随意,我也会帮助您提取您需要的任何信息。我猜这可能发生在每个使用 Functions 的人身上,虽然这对 Azure 的利润很有好处,但对客户来说却不是很好;)
    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    相关资源
    最近更新 更多