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

GCP Cloud Run Revision请求数指标Route标签为空,如何配置填充?

Cloud Run指标route标签为空的原因及解决方案

关键误解澄清

Cloud Run默认采集的请求数指标(run.googleapis.com/request_count)中的route标签,并非指向API请求的URL路径/端点,它对应的是Cloud Run的Route资源——也就是你为服务配置的流量路由规则(比如拆分流量到不同修订版本的自定义路由)。只有当你显式创建了Cloud Run Route资源时,这个标签才会填充对应路由名称;默认情况下,服务使用隐式默认路由,该标签会保持为空。

按API路径统计请求的解决方案

如果你的需求是按API端点/URL路径分组统计请求数并设置告警,可通过以下方式实现:

1. 上报自定义指标(推荐)

在NestJS应用中集成Google Cloud Monitoring客户端库,通过全局拦截器捕获每个请求的路径,上报带path标签的自定义请求数指标:

  • 安装依赖:npm install @google-cloud/monitoring
  • 实现NestJS全局拦截器示例代码:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
import { MetricServiceClient } from '@google-cloud/monitoring';

@Injectable()
export class RequestMetricsInterceptor implements NestInterceptor {
  private readonly monitoringClient = new MetricServiceClient();
  private readonly projectId = process.env.GCP_PROJECT_ID;

  async intercept(context: ExecutionContext, next: CallHandler): Promise<Observable<any>> {
    const request = context.switchToHttp().getRequest();
    const path = request.route?.path || request.path;
    const serviceName = process.env.K_SERVICE;
    const revisionName = process.env.K_REVISION;

    return next.handle().pipe(
      tap(async () => {
        await this.monitoringClient.createTimeSeries({
          name: this.monitoringClient.projectPath(this.projectId),
          timeSeries: [
            {
              metric: {
                type: 'custom.googleapis.com/api/request_count',
                labels: {
                  path: path,
                  service: serviceName,
                  revision: revisionName,
                },
              },
              resource: {
                type: 'cloud_run_revision',
                labels: {
                  service_name: serviceName,
                  revision_name: revisionName,
                  location: process.env.K_SERVICE_LOCATION,
                },
              },
              points: [
                {
                  interval: { endTime: { seconds: Date.now() / 1000 } },
                  value: { int64Value: '1' },
                },
              ],
            },
          ],
        });
      }),
    );
  }
}
  • 在AppModule中注册该拦截器,确保每个请求触发指标上报。

2. 基于日志统计(备选)

启用Cloud Run请求日志,将日志导出到BigQuery,通过SQL查询按路径分组统计请求数,再基于结果配置告警:

  • 配置Cloud Logging将Cloud Run日志导出到指定BigQuery数据集;
  • 统计请求数的SQL示例:
SELECT
  JSON_EXTRACT_SCALAR(jsonPayload.request.path, '$') AS path,
  COUNT(*) AS request_count,
  resource.labels.service_name AS service,
  resource.labels.revision_name AS revision
FROM
  `your-project-id.your-dataset-id.cloudaudit_googleapis_com_data_access`
WHERE
  resource.type = 'cloud_run_revision'
  AND jsonPayload.request IS NOT NULL
GROUP BY
  path, service, revision
  • 基于该查询结果在Cloud Monitoring中创建自定义指标,再设置告警规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:43:33