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

如何将Stackdriver Error Reporting的错误出现次数转为监控计数器指标?

实现Stackdriver Error Reporting错误次数到Monitoring计数器的方案

完全可以实现你想要的需求——把Error Reporting中每个产品的错误出现次数转化为Stackdriver Monitoring的计数器指标,每次错误发生时自动递增。下面是具体的实现步骤和方案:

核心思路

利用Cloud Logging与Cloud Functions的联动,或者在错误上报的代码中直接集成Monitoring API,将每次错误事件转化为自定义监控指标的计数增量。这样既能保留Error Reporting的错误详情管理能力,又能借助Monitoring的告警、仪表盘功能和运维团队的现有集成流程对接。


方案一:通过Cloud Functions实时触发(无侵入代码)

这个方案不需要修改业务代码,借助Error Reporting的日志自动同步到Cloud Logging的特性,用Cloud Functions监听日志事件并更新监控指标:

1. 创建自定义监控指标

首先在Stackdriver Monitoring中创建一个计数器类型的自定义指标:

  • 指标ID:比如 custom.googleapis.com/error_reporting/error_occurrences
  • 添加标签:product(用于区分不同产品的错误)
  • 资源类型选择global即可

2. 创建Cloud Function并配置触发源

  • 触发源选择Cloud Logging,过滤条件设置为匹配Error Reporting的日志:
    logName="projects/[你的项目ID]/logs/clouderrorreporting.googleapis.com%2Ferrors"
    
  • 给Cloud Function的服务账号添加Monitoring Metric Writer角色,确保它有权限写入监控指标

3. 编写函数逻辑(Node.js示例)

const { MonitoringServiceClient } = require('@google-cloud/monitoring');
const client = new MonitoringServiceClient();

exports.incrementErrorCounter = async (event) => {
  // 解析日志内容
  const logEntry = JSON.parse(Buffer.from(event.data, 'base64').toString());
  
  // 从日志中提取产品标识(根据你的实际日志结构调整,比如从resource.labels或jsonPayload中取)
  const product = logEntry.jsonPayload.serviceContext.service || 'unknown_product';
  
  const projectId = process.env.GCP_PROJECT;
  const projectPath = client.projectPath(projectId);

  // 构建监控指标的时间序列数据
  const timeSeries = [{
    metric: {
      type: 'custom.googleapis.com/error_reporting/error_occurrences',
      labels: { product }
    },
    resource: {
      type: 'global',
      labels: { project_id: projectId }
    },
    points: [{
      interval: {
        endTime: { seconds: Date.now() / 1000 }
      },
      value: { int64Value: '1' }
    }]
  }];

  // 写入监控指标
  try {
    await client.createTimeSeries({ name: projectPath, timeSeries });
    console.log(`Successfully incremented counter for product: ${product}`);
  } catch (err) {
    console.error('Failed to write to Monitoring:', err);
  }
};

方案二:代码中直接集成(更高效)

如果你的业务代码是通过Error Reporting客户端库上报错误的,可以在上报错误的同时直接调用Monitoring API递增计数器,减少中间环节:

Python示例代码

import time
from google.cloud import error_reporting
from google.cloud import monitoring_v3

# 初始化客户端
error_client = error_reporting.Client()
monitoring_client = monitoring_v3.MetricServiceClient()
project_name = f"projects/{error_client.project}"

def report_error(product):
    try:
        # 模拟业务代码抛出错误
        raise RuntimeError("Sample business error")
    except Exception as e:
        # 上报到Error Reporting
        error_client.report_exception()
        
        # 递增监控计数器
        series = monitoring_v3.TimeSeries()
        series.metric.type = "custom.googleapis.com/error_reporting/error_occurrences"
        series.metric.labels["product"] = product
        series.resource.type = "global"
        series.resource.labels["project_id"] = error_client.project
        
        # 设置计数增量为1
        point = series.points.add()
        point.value.int64_value = 1
        now = time.time()
        point.interval.end_time.seconds = int(now)
        point.interval.end_time.nanos = int((now - int(now)) * 10**9)
        
        # 写入指标
        monitoring_client.create_time_series(name=project_name, time_series=[series])

后续集成与使用

完成上述配置后,你可以:

  • 在Stackdriver Monitoring中创建仪表盘,按product标签拆分,展示各产品的错误次数趋势
  • 配置告警规则:比如当某个产品的错误次数在5分钟内超过10次时,触发邮件/短信/运维工具的通知
  • 利用Monitoring的API将指标数据同步到运维团队的现有监控平台

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 07:42:48