NEBULA DATA星雲數據 | 用 Terraform 管理 GCP 大模型用量监控
一、背景
在当前的云计算环境中,Google Cloud Platform (GCP) 上使用 Vertex AI 的用户数量不断增加。这一趋势的背后,既得益于 Gemini 模型独特的多模态能力,也与其相对较低的使用成本密切相关。此外,GCP 还支持 Claude3 等大型模型,为用户提供了更多选择。然而,许多新用户在使用 GCP 时对平台的操作不够熟悉,尤其是在调用 Vertex AI API 时,常常因为程序错误而频繁发起请求。这种情况不仅导致了资源的浪费,还可能造成高额的费用支出。为了解决这一问题,本项目旨在通过创建监控策略,帮助用户实时监控 API 调用的用量,及时发现并处理潜在的异常,从而有效控制成本,提升使用体验。
二、 什么 是 Terraform?
Terraform 是一个开源的基础设施即代码(Infrastructure as Code, IaC)工具,由 HashiCorp 开发。它允许用户通过配置文件来定义和提供数据中心的基础设施。目前官方支持的有GCP、Azure、AWS 三大国外云厂商。
三、为什么 是 Terraform?
使用 Terraform 而不是直接通过客户端创建资源的主要原因在于 Terraform 提供了基础设施即代码的能力,使得基础设施的管理更加自动化、可重复和可追溯。通过声明式配置文件,用户可以清晰地定义所需的资源状态,Terraform 会自动处理资源的创建、更新和删除,确保基础设施的一致性和可预测性。此外,Terraform 的状态管理功能可以跟踪资源的变化,简化了跨多个环境的管理,减少了人为错误的风险,从而提高了运维效率和灵活性。
四、实用案例 | Terraform一键部署大模型用量监控
这个项目通过 Terraform 在 GCP 上创建了多个监控策略,监控 Gemini 和 Claude3 模型的用量,并通过电子邮件发送告警通知。通过使用 Prometheus 查询语言,项目能够实时监控特定的用量指标,并在超过设定阈值时触发告警。这种监控机制有助于及时发现和处理潜在的资源使用问题。
4.1 进入CloudShell
4.2 克隆Github 仓库 并加入工作目录
Shell |
4.3 初始化 Terraform环境
Shell terraform init |
4.4 创建云资源
Shell |
4.4.1 输入变量信息
○ var.project_id 变量,用于指定 GCP 项目。
○ var.email: 定义了 email 变量,用于接收告警通知的邮箱地址。
○ var.request_threshold: 定义了request_threshold 变量,用于设置输出用量的阈值。
○ var.token_threshold: token_threshold变量,用于设置输入用量的阈值。
4.4.2 创建资源成功
4.5 删除云资源
Shell |
此处看到 Destroy complete! 则表示资源销毁成功 |
五、 实用案例 | 项目解析
项目地址:https://github.com/CLZRT/alertPolicy_vertexAI |
这个项目的代码主要用于在 Google Cloud Platform (GCP) 上创建监控策略,以监控 Gemini 和 Claude3 模型的用量。以下是对代码的详细解释:
5.1 Terraform 配置
Plain Text |
• terraform: 这是 Terraform 的配置块,指定所需的提供程序。
• required_providers: 指定项目所需的 GCP 提供程序,使用 hashicorp/google 作为源,并要求版本大于或等于 4.51.0。
5.2 Google 提供程序配置
Plain Text |
• provider "google": 配置 Google Cloud 提供程序,使用 var.project_id 变量来指定要使用的 GCP 项目。
5.3. 通知渠道
Plain Text |
• resource "google_monitoring_notification_channel": 创建一个监控通知渠道。
• display_name: 通知渠道的显示名称。
• type: 通知类型,这里设置为 email,表示通过电子邮件发送通知。
• labels: 包含通知渠道的标签,这里使用 var.email 变量来指定接收通知的邮箱地址。
• force_delete: 设置为 false,表示在删除时不强制删除。
5.4 监控策略
项目中定义了多个监控策略,以下是其中一个的示例:
Plain Text |
• resource "google_monitoring_alert_policy": 创建一个监控告警策略。
• display_name: 告警策略的显示名称。
• combiner: 设置为 OR,表示如果任何条件满足,则触发告警。
• conditions: 定义告警条件。
○ display_name: 条件的显示名称。
○ condition_prometheus_query_language: 使用 Prometheus 查询语言定义条件。
▪ query: 查询语句,计算过去一小时内的输入令牌总数,并与阈值进行比较。
▪ duration: 设置为 3600s,表示条件的持续时间为一小时。
▪ evaluation_interval: 设置为 3600s,表示每小时评估一次条件。
▪ alert_rule: 设置为 AlwaysOn,表示该告警始终处于启用状态。
▪ rule_group: 规则组的名称。
• notification_channels: 指定通知渠道,这里使用之前创建的通知渠道。
• alert_strategy: 定义告警策略。
○ auto_close: 设置为 1800s,表示告警在触发后1800秒自动关闭。
5.5. 其他监控策略
项目中还定义了其他监控策略,类似于上面的结构,监控不同的用量,例如:
• Gemini Console Output Usage Alert
• Claude3 Usage Alert
• Claude3 Output Usage Alert
• Gemini API Input Usage Alert
• Gemini API Output Usage Alert
每个策略的结构和参数设置基本相同,只是查询条件和显示名称不同。
六、 运行结果