You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

咨询Google Cloud配额监控告警配置:剩余容量低于20%时触发告警

Google Cloud 配额剩余低于20%告警方案

我之前刚好帮团队落地过类似的配额监控告警需求,来给你梳理下两种可行的方案:

一、用Google Cloud 标准工具直接实现

这是最省心的方式,Google Cloud Monitoring本身就支持针对配额使用率设置告警,不需要自己写代码:

  1. 打开Cloud Monitoring控制台,进入告警 -> 创建告警策略
  2. 在“配置”步骤,点击添加指标,搜索quota/usagequota/limit这两个指标:
    • 选择你要监控的项目、目标服务(比如Compute Engine、Cloud Storage等)
  3. 接下来创建一个数学运算,计算配额使用率:usage / limit,设置阈值为大于0.8(对应剩余容量低于20%)
  4. 配置告警通知渠道:可以选邮件、Slack、PagerDuty等,根据团队协作习惯设置
  5. 最后给告警策略命名并保存,这样当任意服务的配额剩余低于20%时,就会自动触发告警

这种方式适合大多数常规需求,不需要维护代码,Google官方维护的指标也更稳定可靠。

二、Python + Google Cloud API 自定义实现

如果需要更灵活的逻辑(比如只监控特定区域的配额、自定义告警内容、批量处理多项目),可以用Python结合Google Cloud的API来实现:

步骤1:准备依赖和权限

  • 安装Google Cloud Monitoring的Python客户端库:
    pip install google-cloud-monitoring
    
  • 给执行脚本的服务账号分配Monitoring ViewerQuota Viewer角色,确保能读取配额相关数据

步骤2:示例代码

下面是一个简单的脚本,用来检查所有服务的配额剩余比例,低于20%时输出告警信息(你可以扩展成发送邮件、调用Pub/Sub等通知方式):

from google.cloud import monitoring_v3
from google.protobuf.duration_pb2 import Duration
import time

def check_quota_remaining(project_id):
    client = monitoring_v3.MetricServiceClient()
    project_name = f"projects/{project_id}"

    # 设置时间范围,取最近5分钟的指标数据
    interval = monitoring_v3.TimeInterval()
    now = monitoring_v3.TimePoint()
    now.seconds = int(time.time())
    interval.end_time = now
    duration = Duration(seconds=300)
    interval.start_time.seconds = now.seconds - duration.seconds

    # 查询quota/limit指标,构建配额限制的映射字典
    limit_map = {}
    limit_results = client.list_time_series(
        request={
            "name": project_name,
            "filter": 'metric.type = "googleapis.com/quota/limit"',
            "interval": interval,
            "view": monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,
        }
    )
    for series in limit_results:
        quota_key = (
            series.resource.labels["service"],
            series.metric.labels["quota"],
            series.resource.labels.get("region", "global")
        )
        # 配额限制为固定值,取最新数据点
        limit_value = series.points[-1].value.double_value
        limit_map[quota_key] = limit_value

    # 查询quota/usage指标,计算剩余比例
    usage_results = client.list_time_series(
        request={
            "name": project_name,
            "filter": 'metric.type = "googleapis.com/quota/usage"',
            "interval": interval,
            "view": monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,
        }
    )
    for series in usage_results:
        quota_key = (
            series.resource.labels["service"],
            series.metric.labels["quota"],
            series.resource.labels.get("region", "global")
        )
        if quota_key not in limit_map or limit_map[quota_key] == 0:
            continue
        usage_value = series.points[-1].value.double_value
        remaining_ratio = (limit_map[quota_key] - usage_value) / limit_map[quota_key]
        if remaining_ratio < 0.2:
            print(f"⚠️ 告警:服务 {quota_key[0]} 的配额 {quota_key[1]}(区域 {quota_key[2]})剩余比例 {remaining_ratio*100:.1f}%,低于20%!")

if __name__ == "__main__":
    PROJECT_ID = "your-project-id"  # 替换成你的项目ID
    check_quota_remaining(PROJECT_ID)

扩展建议

  • 可以把脚本部署成Cloud Function,设置定时触发器(比如每小时执行一次)
  • 集成Google Cloud Notification Channels API,直接发送告警到团队的沟通工具
  • 添加过滤逻辑,只监控你关心的特定服务或配额类型

如果还有细节要调整,比如针对特定场景的过滤规则、告警通知的个性化设置,随时再讨论~

内容的提问来源于stack exchange,提问作者Алексей NNM

火山引擎 最新活动