You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pulumi配置GCP正常运行时间检查告警策略遇错误求助

解决GCP Uptime Check与告警策略的Pulumi配置问题

问题根源分析

  1. Filter匹配错误:monitoring.googleapis.com/uptime_check/check_passed指标的check_id属于metric标签而非resource标签,使用resource.labels.check_id会导致GCP无法找到匹配的时间序列,触发400错误。
  2. 关联显示失效:手动使用自定义短ID(uptimeCheckConfigId)作为metric.labels.check_id的值不匹配,GCP实际生成的check_id是Uptime Check资源的完整限定ID(格式为projects/[PROJECT_ID]/uptimeCheckConfigs/[USER_SPECIFIED_ID]),而非用户定义的短名称。

修正后的代码方案

1. 正确引用Uptime Check的实际ID

使用Pulumi创建的uptimeCheckConfig实例的id属性,而非自定义短ID,确保准确匹配GCP生成的metric标签值:

const uptimeCheckConfigId = `my_uptime_check_config`;
const uptimeCheckConfig = new gcp.monitoring.UptimeCheckConfig(
    uptimeCheckConfigId,
    {
        timeout: '20s',
        period: '60s',
        httpCheck: {
            path: '/health/status',
            port: 80,
        },
        monitoredResource: {
            labels: {
                host: "your-target-url", // 替换为实际目标URL
            },
            type: 'uptime_url',
        },
        displayName: `Uptime check`,
    },
    { provider },
);

const myAlertPolicy = new gcp.monitoring.AlertPolicy(
    `my_uptime_alert_policy`,
    {
        notificationChannels: ["your-channel-ids"], // 替换为实际通知通道ID
        combiner: 'OR',
        conditions: [
            {
                displayName: `Uptime check FAILED`,
                conditionThreshold: {
                    aggregations: [
                        {
                            alignmentPeriod: '60s', // 与Uptime Check的period保持一致
                            crossSeriesReducer: 'REDUCE_COUNT_FALSE',
                            groupByFields: [
                                'resource.labels.project_id',
                                'resource.labels.host',
                            ],
                            perSeriesAligner: 'ALIGN_NEXT_OLDER',
                        },
                    ],
                    comparison: 'COMPARISON_GT',
                    duration: '60s',
                    // 使用metric.labels.check_id并引用Uptime Check的完整资源ID
                    filter: `resource.type = "uptime_url" AND metric.type = "monitoring.googleapis.com/uptime_check/check_passed" AND metric.labels.check_id = "${uptimeCheckConfig.id}"`,
                    thresholdValue: 0, // 当check_passed为false的次数大于0时触发告警
                    trigger: {
                        count: 1,
                    },
                },
            },
        ],
        displayName: `Alert Policy check`,
    },
    { provider },
);

2. 确保控制台显示关联关系

若要在GCP控制台的Uptime Check页面看到关联的告警策略,需在UptimeCheckConfig中显式关联告警策略的ID:

const uptimeCheckConfig = new gcp.monitoring.UptimeCheckConfig(
    uptimeCheckConfigId,
    {
        // 保留原有配置
        alertPolicyNames: [myAlertPolicy.id], // 关联告警策略
    },
    { provider },
);

关键注意事项

  • 阈值逻辑调整:原代码thresholdValue: 1不符合业务逻辑,check_passed为布尔值(0代表失败,1代表成功),设置thresholdValue: 0可在失败次数大于0时触发告警。
  • 对齐周期一致性:alignmentPeriod建议与Uptime Check的period保持一致,避免聚合逻辑混乱。
  • 资源依赖保障:通过引用uptimeCheckConfig.id和myAlertPolicy.id,Pulumi会自动处理资源创建顺序,确保依赖关系正确。

内容的提问来源于stack exchange,提问作者cis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:03:16