方案总览
VictoriaMetrics 无法直接 scrape Cloud Run 的 /metrics,因为:
Cloud Run 是动态实例,没有固定 IP;
Cloud Run 实例按需启动/销毁;
没有暴露容器内部端口供 scraping。
所以正确的做法是:
[Cloud Run 服务指标]
↓
[Cloud Monitoring (Stackdriver)]
↓
[Prometheus /metrics 接口 (Google Managed Prometheus Adapter)]
↓
[vmagent 或 VictoriaMetrics 集群采集]
一、前提条件
用以下命令生成了 GCP 服务账号的密钥:
gcloud iam service-accounts keys create vmagent-key.json \
--iam-account vmagent-monitor@YOUR_PROJECT_ID.iam.gserviceaccount.com
二、把密钥转为 Base64
Kubernetes Secret 里的数据必须是 Base64 编码的。
运行下面命令:
cat vmagent-key.json | base64 -w 0
(macOS 用:base64 -b 0)
输出会是一长串 Base64 字符串,例如:
ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAg...
🧾 三、创建 YAML 文件
把输出填到下面这个模板里 👇
apiVersion: v1
kind: Secret
metadata:
name: gcp-token
namespace: monitoring # 或你自己的命名空间
type: Opaque
data:
credentials.json: ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAg... # <== 这里替换为你的 base64 编码内容
保存为:
gcp-secret.yaml
🚀 四、应用到集群
kubectl apply -f gcp-secret.yaml
验证:
kubectl get secret gcp-token -n monitoring -o yaml
你会看到编码后的内容在 data.credentials.json 里。
🧩 五、在 Deployment / Pod 中使用
举例:vmagent Deployment 里挂载这个 Secret👇
apiVersion: apps/v1
kind: Deployment
metadata:
name: gcp-cloudrun-detailed-exporter
namespace: vm
spec:
replicas: 1
selector:
matchLabels:
app: gcp-cloudrun-detailed-exporter
template:
metadata:
labels:
app: gcp-cloudrun-detailed-exporter
spec:
containers:
- name: stackdriver-exporter
image: prometheuscommunity/stackdriver-exporter:latest
ports:
- containerPort: 9255
name: metrics
args:
- --monitoring.metrics-prefixes=run.googleapis.com
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /etc/gcp/credentials.json
- name: GOOGLE_PROJECT_ID
value: "aiart-develop"
volumeMounts:
- name: gcp-credentials
mountPath: /etc/gcp
readOnly: true
resources:
requests:
memory: "256Mi"
cpu: "200m"
limits:
memory: "512Mi"
cpu: "500m"
volumes:
- name: gcp-credentials
secret:
secretName: seaart-cloudrun-token
这样,容器中就能自动读取 /var/secrets/google/credentials.json,使用该 GCP 账号身份访问监控接口。
六、创建service
暴露metric端口
apiVersion: v1
kind: Service
metadata:
name: gcp-cloudrun-detailed-exporter
namespace: vm
labels:
app: gcp-cloudrun-detailed-exporter
spec:
selector:
app: gcp-cloudrun-detailed-exporter
ports:
- port: 9255
targetPort: 9255
name: metrics
七、部署刮擦配置
自动抓取cloudrun的指标
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMServiceScrape
metadata:
name: gcp-cloudrun-detailed-exporter
namespace: vm
spec:
jobName: gcp-cloudrun-detailed-exporter
endpoints:
- port: metrics
interval: 1m
path: /metrics
selector:
matchLabels:
app: gcp-cloudrun-detailed-exporter
接下来是配置grafana的dashboard
直接导入json模版
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": null,
"links": [],
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"vis": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "reqps"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 6,
"x": 0,
"y": 0
},
"id": 1,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom"
},
"tooltip": {
"mode": "single"
}
},
"targets": [
{
"expr": "sum(rate(stackdriver_cloud_run_revision_run_googleapis_com_request_count{service_name=\"$service_name\", location=\"$location\"}[15m])) by (service_name)",
"interval": "",
"legendFormat": "{{service_name}}",
"refId": "A"
}
],
"title": "请求数量 (QPS)",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"vis": false
}
},
"mappings": [],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 90
}
]
},
"unit": "percent"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 6,
"x": 6,
"y": 0
},
"id": 2,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"textMode": "auto"
},
"pluginVersion": "8.0.0",
"targets": [
{
"expr": "histogram_quantile(0.50, sum(rate(stackdriver_cloud_run_revision_run_googleapis_com_container_cpu_usage_bucket{service_name=\"$service_name\", location=\"$location\"}[15m])) by (service_name, le))",
"interval": "",
"legendFormat": "{{service_name}}",
"refId": "A"
}
],
"title": "CPU利用率",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"vis": false
}
},
"mappings": [],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 90
}
]
},
"unit": "bytes"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 6,
"x": 12,
"y": 0
},
"id": 3,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"textMode": "auto"
},
"pluginVersion": "8.0.0",
"targets": [
{
"expr": "histogram_quantile(0.50, sum(rate(stackdriver_cloud_run_revision_run_googleapis_com_container_memory_usage_bucket{service_name=\"$service_name\", location=\"$location\"}[15m])) by (service_name, le))",
"interval": "",
"legendFormat": "{{service_name}}",
"refId": "A"
}
],
"title": "内存使用量",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"vis": false
}
},
"mappings": [],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 6,
"x": 18,
"y": 0
},
"id": 4,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"textMode": "auto"
},
"pluginVersion": "8.0.0",
"targets": [
{
"expr": "sum(stackdriver_cloud_run_revision_run_googleapis_com_container_instance_count{service_name=\"$service_name\", location=\"$location\"}) by (service_name)",
"interval": "",
"legendFormat": "{{service_name}}",
"refId": "A"
}
],
"title": "实例数量",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"vis": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "s"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 8
},
"id": 5,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom"
},
"tooltip": {
"mode": "single"
}
},
"targets": [
{
"expr": "histogram_quantile(0.95, sum(rate(stackdriver_cloud_run_revision_run_googleapis_com_request_latencies_bucket{service_name=\"$service_name\", location=\"$location\"}[15m])) by (service_name, le))",
"interval": "",
"legendFormat": "{{service_name}} P95",
"refId": "A"
},
{
"expr": "histogram_quantile(0.50, sum(rate(stackdriver_cloud_run_revision_run_googleapis_com_request_latencies_bucket{service_name=\"$service_name\", location=\"$location\"}[15m])) by (service_name, le))",
"interval": "",
"legendFormat": "{{service_name}} P50",
"refId": "B"
}
],
"title": "请求延迟趋势",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"vis": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 90
}
]
},
"unit": "percent"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 8
},
"id": 6,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom"
},
"tooltip": {
"mode": "single"
}
},
"targets": [
{
"expr": "histogram_quantile(0.50, sum(rate(stackdriver_cloud_run_revision_run_googleapis_com_container_cpu_usage_bucket{service_name=\"$service_name\", location=\"$location\"}[15m])) by (service_name, le))",
"interval": "",
"legendFormat": "{{service_name}}",
"refId": "A"
}
],
"title": "CPU使用率趋势",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"vis": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 90
}
]
},
"unit": "bytes"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 16
},
"id": 7,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom"
},
"tooltip": {
"mode": "single"
}
},
"targets": [
{
"expr": "histogram_quantile(0.50, sum(rate(stackdriver_cloud_run_revision_run_googleapis_com_container_memory_usage_bucket{service_name=\"$service_name\", location=\"$location\"}[15m])) by (service_name, le))",
"interval": "",
"legendFormat": "{{service_name}}",
"refId": "A"
}
],
"title": "内存使用量趋势",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"vis": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 16
},
"id": 8,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom"
},
"tooltip": {
"mode": "single"
}
},
"targets": [
{
"expr": "stackdriver_cloud_run_revision_run_googleapis_com_container_instance_count{service_name=\"$service_name\", location=\"$location\"}",
"interval": "",
"legendFormat": "{{service_name}}",
"refId": "A"
}
],
"title": "实例数量趋势",
"type": "timeseries"
}
],
"schemaVersion": 27,
"style": "dark",
"tags": [
"gcp",
"cloudrun",
"monitoring"
],
"templating": {
"list": [
{
"current": {
"selected": false,
"text": "All",
"value": "$__all"
},
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"definition": "label_values(stackdriver_cloud_run_revision_run_googleapis_com_request_count, service_name)",
"hide": 0,
"includeAll": true,
"label": "Service Name",
"multi": true,
"name": "service_name",
"options": [],
"query": "label_values(stackdriver_cloud_run_revision_run_googleapis_com_request_count, service_name)",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 0,
"tagValuesQuery": "",
"tags": [],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"current": {
"selected": false,
"text": "All",
"value": "$__all"
},
"datasource": {
"type": "prometheus",
"uid": "victoriametrics"
},
"definition": "label_values(stackdriver_cloud_run_revision_run_googleapis_com_request_count, location)",
"hide": 0,
"includeAll": true,
"label": "Location",
"multi": true,
"name": "location",
"options": [],
"query": "label_values(stackdriver_cloud_run_revision_run_googleapis_com_request_count, location)",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 0,
"tagValuesQuery": "",
"tags": [],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "GCP Cloud Run 监控面板",
"uid": "cloudrun-monitoring",
"version": 1
}
浙公网安备 33010602011771号