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

GCP虚拟机监控数据CSV记录脚本故障排查求助

GCP VM监控数据采集脚本故障排查

需补充的关键信息

请提供以下内容以精准定位问题:

  • 脚本运行时的完整错误输出
  • 采集监控数据的Bash脚本代码(完整或关键片段)

常见故障点及排查方案

1. Cloud Monitoring API权限缺失

  • 验证当前账号权限:
    gcloud projects get-iam-policy YOUR_PROJECT_ID --filter="bindings.members:$(gcloud config get-value account)" --format="value(bindings.role)"
    
  • 若未返回roles/monitoring.viewer或更高权限,执行授权:
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID --member=user:$(gcloud config get-value account) --role=roles/monitoring.viewer
    

2. 监控指标名称错误

GCP监控指标命名需严格匹配,常用正确指标:

  • CPU使用率:compute.googleapis.com/instance/cpu/utilization
  • 内存使用率(需安装Cloud Monitoring Agent):agent.googleapis.com/memory/percent_used
  • 磁盘使用率(需安装Cloud Monitoring Agent):agent.googleapis.com/disk/percent_used
  • 无Agent时备选:内存用量compute.googleapis.com/instance/memory/bytes_used、磁盘用量compute.googleapis.com/instance/disk/bytes_used

3. 时间范围参数无效

近5分钟时间范围需符合RFC3339 UTC标准,正确构造方式:

START_TIME=$(date -u -d "5 minutes ago" +%Y-%m-%dT%H:%M:%SZ)
END_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)

检查脚本中时间格式是否正确,是否误用本地时间而非UTC时间。

4. VM资源关联逻辑错误

确保脚本获取的VM名称、区域与监控查询的资源标签完全匹配:

  • 正确获取VM列表的命令:
    gcloud compute instances list --project=YOUR_PROJECT_ID --format="value(name, zone)"
    
  • 监控查询需通过resource.labels.instance_name和resource.labels.zone精准定位VM。

5. CSV输出格式异常

排查CSV生成逻辑:

  • 字段含逗号时需用双引号包裹,避免分隔符冲突
  • 避免重复输出表头或空行
  • 处理指标查询返回的空值(如VM无监控数据时填充N/A)

修正后的核心代码示例

#!/bin/bash
PROJECT_ID="your-project-id"
START_TIME=$(date -u -d "5 minutes ago" +%Y-%m-%dT%H:%M:%SZ)
END_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)

# 初始化CSV表头
echo "VM名称,区域,CPU使用率(%),内存使用率(%),磁盘使用率(%)" > vm_metrics.csv

# 遍历所有VM实例
while read -r VM_NAME ZONE; do
  # 查询CPU平均使用率
  CPU_USAGE=$(gcloud monitoring query gql --project="$PROJECT_ID" --start-time="$START_TIME" --end-time="$END_TIME" \
    "SELECT mean(value) FROM compute.googleapis.com/instance/cpu/utilization \
     WHERE resource.labels.instance_name = '$VM_NAME' AND resource.labels.zone = '$ZONE'" \
    --format="value(queryResult.timeSeries.points.value.doubleValue)")
  
  # 查询内存使用率(依赖Cloud Monitoring Agent)
  MEM_USAGE=$(gcloud monitoring query gql --project="$PROJECT_ID" --start-time="$START_TIME" --end-time="$END_TIME" \
    "SELECT mean(value) FROM agent.googleapis.com/memory/percent_used \
     WHERE resource.labels.instance_name = '$VM_NAME' AND resource.labels.zone = '$ZONE'" \
    --format="value(queryResult.timeSeries.points.value.doubleValue)")
  
  # 查询磁盘使用率(依赖Cloud Monitoring Agent)
  DISK_USAGE=$(gcloud monitoring query gql --project="$PROJECT_ID" --start-time="$START_TIME" --end-time="$END_TIME" \
    "SELECT mean(value) FROM agent.googleapis.com/disk/percent_used \
     WHERE resource.labels.instance_name = '$VM_NAME' AND resource.labels.zone = '$ZONE'" \
    --format="value(queryResult.timeSeries.points.value.doubleValue)")
  
  # 处理空值
  CPU_USAGE=${CPU_USAGE:-"N/A"}
  MEM_USAGE=${MEM_USAGE:-"N/A"}
  DISK_USAGE=${DISK_USAGE:-"N/A"}
  
  # 写入CSV(含特殊字符的字段用双引号包裹)
  echo "\"$VM_NAME\",\"$ZONE\",\"$CPU_USAGE\",\"$MEM_USAGE\",\"$DISK_USAGE\"" >> vm_metrics.csv
done < <(gcloud compute instances list --project="$PROJECT_ID" --format="value(name, zone)")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:12:47