本次实操手册介绍了如何将 BigQuery 中的数据提取到 Cloud Monitoring 并在仪表板上进行可视化。一个典型的用例如当您将一些业务指标数据存储在 BigQuery 表中,并且希望将数据与基础设施指标一起绘制出来,以便可以关联数据并更好地了解系统。

本次实操手册主要有两个目标:

  • 创建一个无服务器系统以便从 BigQuery 中提取数据
  • 在 Cloud Monitoring 中可视化提取的指标数据


开始之前

首先,我们需要一个 Google Cloud 项目。您可以创建一个新项目或选择一个您已经创建的项目。完成实操后,您可以通过删除您创建的资源以避免继续计费。为了后续删除项目不带来其他问题,建议可以创建一个项目以供测试。关于项目的删除,请参考后文。

1. 选择或创建一个 Google Cloud 项目。

2. 为您的项目启用计费。

3. 确保您具有项目所有者或编辑者角色,或者有足够的权限来使用上面列出的服务。

此次我们将使用 gcloud 和 bq 命令行工具。由于 Cloud Shell 包含这些包,我们建议您在 Cloud Shell 中运行命令,这样就不需要在本地安装这些包。

准备环境

设置公共变量这里需要定义几个变量来控制基础架构元素的部署位置。在 Cloud Shell 中,设置区域、地区和项目 ID:

  1. REGION=us-central1
  2. ZONE=${REGION}-bP
  3. ROJECT_ID=[YOUR_PROJECT_ID]

替换 [YOUR_PROJECT_ID] 为您的项目 ID。此次我们使用区域 us-central1. 如果要更改区域,请检查区域值是否适合您指定的区域。

启动所有必要的服务

  1. gcloud services enable compute.googleapis.com
  2. gcloud services enable run.googleapis.com
  3. gcloud services enable monitoring.googleapis.com
  4. gcloud services enable bigquery.googleapis.com
  5. gcloud services enable logging.googleapis.com
  6. gcloud services enable cloudbuild.googleapis.com
  7. gcloud services enable cloudscheduler.googleapis.com
  8. gcloud services enable containerregistry.googleapis.com

设置区域和项目 ID,以便您不必在后续命令中指定这些值:

  1. gcloud config set project ${PROJECT_ID}
  2. gcloud config set compute/zone ${ZONE}
  3. gcloud config set run/platform managed
  4. gcloud config set run/region ${REGION}


获取示例代码

示例代码位于 Google Cloud 社区 GitHub 存储库中。

克隆存储库

  1. git clone https://github.com/GoogleCloudPlatform/community.git

进入教程目录:

  1. cd community/tutorials/monitoring-dashboard-from-bq

创建 BigQuery 数据集和表

设置数据集和表名

  1. BIGQUERY_DATASET=cloud_monitoring_import_demo
  2. BIGQUERY_TABLE=sales

创建 BigQuery 数据集:

  1. bq mk $BIGQUERY_DATASET

使用架构 JSON 文件创建一个表:

  1. bq mk --table ${BIGQUERY_DATASET}.${BIGQUERY_TABLE}  ./bigquery_schema.json

使用 Cloud Scheduler 作业将数据提取到 Cloud Monitoring

为 Cloud Scheduler 创建服务帐户:

  1. gcloud iam service-accounts create cloud-scheduler-run \  --display-name "Demo account"


创建容器镜像:

  1. gcloud builds submit --tag gcr.io/${PROJECT_ID}/monitoring-bq

您可以阅读源文件 main.py 以获取更多详细信息。


部署到 Cloud Run:

  1. gcloud run deploy --image gcr.io/${PROJECT_ID}/monitoring-bq \
  2.  --platform managed \
  3.  --region ${REGION} \
  4.  --no-allow-unauthenticated \
  5.  --set-env-vars "PROJECT_ID=$PROJECT_ID" \
  6.  --set-env-vars "METRIC_NAME=sales-demo" \
  7.  --set-env-vars "SCHEDULE_INTERVAL=3600" \
  8.  --set-env-vars "BIGQUERY_DATASET=$BIGQUERY_DATASET" \
  9.  --set-env-vars "BIGQUERY_TABLE=$BIGQUERY_TABLE"

当系统提示您输入服务名称时,按 Enter 接受默认名称 monitoring-bq。

部署可能需要几分钟时间。部署完成后,命令行会显示服务 URL。


对于 Cloud Run,授予您的服务帐号调用服务的权限:

  1. gcloud run services add-iam-policy-binding monitoring-bq \
  2. --platform=managed \
  3.  --region=${REGION} \
  4.  --member=serviceAccount:cloud-scheduler-run@${PROJECT_ID}.iam.gserviceaccount.com \
  5.  --role=roles/run.invoker

创建 App Engine 应用:

  1. gcloud app create --region=us-central

Cloud Scheduler 依赖于 App Engine。

创建 Cloud Scheduler 作业:

  1. gcloud scheduler jobs create http monitoring-job --schedule "0 * * * *" \
  2. --http-method=POST \
  3. --uri=$(gcloud run services describe monitoring-bq
  4. --format="value(status.url)") \
  5. --oidc-service-account-email=cloud-scheduler-run@${PROJECT_ID}.iam.gserviceaccount.com

此示例创建一个每小时运行一次的 Cloud Scheduler 作业。您可以根据需要和数据粒度更改计划。

本部分中的过程允许您运行 Cloud Run 服务以将 BigQuery 数据提取到 Cloud Monitoring。但是,如果您更喜欢基于事件的系统而不是基于计划的系统,则可以使用 BigQuery 事件,它也可以触发 Cloud Run 服务。关于如何在 BigQuery 中触发 Cloud Run 事件,后续会详细介绍,敬请期待!

查看 Cloud Monitoring 中的指标

在本部分中,您将配置 Cloud Monitoring 并创建仪表板。要完成这些步骤,您必须具有项目的以下 IAM 角色之一:

  • 项目拥有者
  • 监控编辑器
  • 监控管理员
  • 监控账户编辑器

将测试数据添加到 BigQuery

在 Cloud Shell 中运行以下 shell 脚本,将一些随机数据插入到 BigQuery 表中:

  1. cur_epoch=$(date +%s)
  2. for ((i=0;i<12;i++))
  3. do
  4. for ((j=1;j<=3;j++))
  5. do    n=$(($RANDOM%10+1))
  6. d=$(date -d @$cur_epoch +'%Y-%m-%d %H:%M:%S');
  7. item='{"item_id":"item'$n'", "item_sold":'$(($n*100))', "report_time":"'$d'"}'
  8. echo "Insert item: ${item}"    echo $item | bq insert ${BIGQUERY_DATASET}.${BIGQUERY_TABLE}
  9. done
  10. cur_epoch=$(($cur_epoch-300))
  11. done

验证 BigQuery 中的数据;

转到 Cloud Console 中的 BigQuery 页面

在查询编辑器中运行以下查询:

  1. SELECT * FROM `cloud_monitoring_import_demo.sales` ORDER BY report_time LIMIT 100

运行 Cloud Scheduler 作业:

  1. gcloud scheduler jobs run monitoring-job

创建仪表板

在 Cloud Console 中,选择您的 Google Cloud 项目;

转到 Cloud Monitoring Metrics 资源管理器页面。

在查找资源类型和指标字段中,输入 sales-demo;

选择以 custom.googleapis.com/sales-demo 开头的指标

您可能需要刷新页面才能看到指标名称。

对于资源类型,输入 Global 并选择全局资源类型;在Group by 菜单中,选择item;从图表上方的菜单中,选择 Stacked bar。


几分钟之内,您应该会得到如下图表:

单击保存图表按钮;

命名图表。


在仪表板菜单中,选择新建仪表板。

输入仪表板名称 Demo dashboard,然后单击保存。

此仪表板中现在有一个新图表。您可以从 Cloud Monitoring 中找到仪表板,它应该类似于以下内容:


避免计费

删除项目

消除计费的最简单方法是删除您为教程创建的项目

  • 在 Cloud Console 中,转到管理资源页面;
  • 在项目列表中,选择要删除的项目,然后单击删除;
  • 在对话框中,键入项目 ID,然后单击关闭以删除项目。

删除单个资源

如果不想删除整个项目,可以删除单个资源。

运行以下命令删除相应的资源:

  1. gcloud scheduler jobs delete monitoring-job
  2. gcloud run services delete monitoring-bq --region ${REGION}
  3. gcloud iam service-accounts delete cloud-scheduler-run@${PROJECT_ID}.iam.gserviceaccount.com
  4. bq rm --table ${BIGQUERY_DATASET}.${BIGQUERY_TABLE}
  5. bq rm $BIGQUERY_DATASET

转到 Container Registry 页面,然后删除您创建的所有映像;

转到 Cloud Monitoring 仪表板页面,然后删除您创建的仪表板。

返回全部