基于“已用”内存的 Google Compute Engine 自动缩放
Posted
技术标签:
【中文标题】基于“已用”内存的 Google Compute Engine 自动缩放【英文标题】:Google Compute Engine autoscale based on 'used' memory 【发布时间】:2020-09-30 05:55:26 【问题描述】:我希望根据内存扩展我的 Compute Engine 实例,内存是 Stackdriver 中的一个代理指标。需要注意的是,在代理可以监控的 5 个状态中(缓冲、缓存、空闲、平板、已使用)see the link here,我只想查看“已使用”内存以及该值是否高于某个百分比阈值组(或每个实例也适用于我),我想自动缩放。
我已经在托管实例组的所有节点中安装了 Stackdriver Monitoring 代理,并且我能够成功地在我的监控仪表板中可视化“已用”内存,因为我非常熟悉它。
很遗憾,我无法为自动缩放执行此操作。这是我在 MIG 的自动缩放部分配置它时看到的。
在我看来,添加过滤器表达式应该可以按预期工作,因为此表达式在 Stackdriver 控制台中使用 Monitoring 信息中心可以正常工作。此外,here 提到该语法与 here 给出的 Cloud Monitoring 过滤器语法兼容。
我尝试了过滤表达式字段中语法的不同组合,但没有一个有效。请帮忙。
【问题讨论】:
您的指标标识符已经表明已使用的内存百分比,将相同的内容放入额外的过滤器中会不会是多余的? @WilfredL.,Stackdriver 可以监控 5 个阶段的内存(缓冲、缓存、空闲、平板和已使用)。请参阅此处的链接:cloud.google.com/monitoring/api/metrics_agent#agent-memory。我只想根据“使用”的内容进行自动缩放。 我尝试复制并遇到同样的问题,但在自动缩放的文档中从未提及它可以以这种方式进行微调。您可能需要向 Google 打开一个公共问题跟踪器 [1],以便他们可以更好地处理此问题。 [1]issuetracker.google.com 好吧,在那种情况下,我真的不明白过滤器表达式的用途。 我能够使用的唯一通过 UI 验证的语法是metric.label.state="used"
。但是,当我这样做时,之后我收到一条错误消息,说“区域托管实例组不支持使用每组指标进行自动缩放。”。因此,如果您不使用区域实例组,它可能只适用于您的用例。
【参考方案1】:
我尝试使用完全相同的配置来尝试根据内存使用情况进行扩展。在测试了各种不成功的条目后,我联系了 Google 支持。根据您的问题,我无法判断您拥有什么样的实例组。这很重要,因为以下原因。
TLDR
根据来自 Google 支持的输入,只有地区实例组允许过滤表达式条目。
地区实例组
只有地区实例组将允许指标设置。对于区域实例组,您尝试输入的设置对于 metric.state=used
是正确的。但是,对于区域实例组,该字段必须留空。
区域实例组
如上所述,不支持为区域实例组应用过滤器。正如their documentation 中所述,他们提到您将该字段留空。
在“附加过滤器表达式”部分:对于区域 MIG,可选择输入过滤器以使用来自具有多个流或标签的指标的单个值。有关详细信息,请参阅过滤每个实例的指标。对于区域 MIG,请将此部分留空。
如果您添加条目,您将在尝试保存更改时收到消息“区域托管实例组不支持使用每组指标进行自动缩放。”。
另一方面,如果您将该字段留空,它将保存。但是,我发现将该字段留空并在 Target Utilization 字段中设置几乎任何数字总是会导致我的组扩展到最大数量。
总结
Google 通知我,他们确实对此提出了功能要求。我表示如果不支持,即使选择percent_used
也是没有意义的。回应是我们应该看到将来更新文档以澄清这一点。
【讨论】:
以上是关于基于“已用”内存的 Google Compute Engine 自动缩放的主要内容,如果未能解决你的问题,请参考以下文章
Google Compute Engine服务器的地理位置?
Google Compute Engine gcutil 使用 ssh 和实例的内部/私有地址 [关闭]
如何使用 Docker 映像将 Node.js HTTP/2 应用程序部署到 Google Compute Engine 上?
ImportError:没有名为 google_compute_engine 的模块
Google App EngineGoogle Kubernetes EngineGoogle Compute Engine的区别