部署作业以将日志从 Cloud Storage 导入 Cloud Logging

Last reviewed 2024-01-02 UTC

本文档介绍了如何按“将日志从 Cloud Storage 导入 Cloud Logging ”中所述部署参考架构

这些说明适用于想要配置和运行日志导入作业的工程师和开发者,包括 DevOps、站点可靠性工程师 (SRE) 和安全调查员。本文档还假定您熟悉运行 Cloud Run 导入作业,并掌握如何使用 Cloud Storage 和 Cloud Logging。

架构

下图展示了此参考架构中如何使用 Google Cloud 服务:

从 Cloud Storage 到 Cloud Logging 的日志导入的工作流图。

如需了解详情,请参阅将日志从 Cloud Storage 导入 Cloud Logging

目标

  • 创建和配置 Cloud Run 导入作业
  • 创建一个服务账号以运行作业

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. 确保您要导入的日志之前已导出到 Cloud Storage,这意味着这些日志已采用预期的导出格式进行组织。

  2. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

  3. 创建或选择 Google Cloud 项目

    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目 名称。

  4. PROJECT_ID 替换为目标项目 ID。

  5. 确保已为您的 Google Cloud 项目启用结算

  6. Enable the Cloud Run and Identity and Access Management (IAM) APIs:

    gcloud services enable run.googleapis.com iam.googleapis.com

所需的角色

如需获得部署此解决方案所需的权限,请让管理员向您授予以下 IAM 角色:

  • 要在日志存储桶上授予 Logs Writer 角色: 目标项目的 Project IAM Admin (roles/resourcemanager.projectIamAdmin)
  • 要在存储桶上授予 Storage Object Viewer 角色: 托管存储桶的项目的 Storage Admin roles/storage.admin
  • 要创建服务账号:目标项目的 Create Service Accounts (roles/iam.serviceAccountCreator)
  • 针对项目启用服务:目标项目的 Service Usage Admin (roles/serviceusage.serviceUsageAdmin)
  • 升级日志存储桶并删除导入的日志:目标项目的 Logging Admin (roles/logging.admin)
  • 如需创建、运行和修改导入作业: 目标项目的 Cloud Run Developer (roles/run.developer)

如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

升级日志存储桶以使用 Log Analytics

我们建议您使用默认日志存储桶,并将其升级以使用 Log Analytics。但在生产环境中,如果默认存储桶不符合您的要求,您可以使用自己的日志存储桶。如果您决定使用自己的存储桶,则必须将注入到目标项目的日志路由到此日志存储桶。如需了解详情,请参阅配置日志存储桶创建接收器

升级存储桶后,您可以使用 SQL 查询和分析日志。升级存储桶或使用 Log Analytics 无需额外费用。

如需升级目标项目中的默认日志存储桶,请执行以下操作:

  • 升级默认日志存储桶以使用 Log Analytics:

    gcloud logging buckets update BUCKET_ID --location=LOCATION --enable-analytics
    

    替换以下内容:

    • BUCKET_ID:日志存储桶的名称(例如 _Default
    • LOCATION:支持的区域(例如 global

创建 Cloud Run 导入作业

创建作业时,您可以使用为此参考架构提供的预构建容器映像。如果您需要修改实施以更改 30 天的保留期限,或者有其他要求,可以构建您自己的自定义映像

  • 在 Cloud Shell 中,使用配置和环境变量创建作业:

    gcloud run jobs create JOB_NAME \
    --image=IMAGE_URL \
    --region=REGION \
    --tasks=TASKS \
    --max-retries=0 \
    --task-timeout=60m \
    --cpu=CPU \
    --memory=MEMORY \
    --set-env-vars=END_DATE=END_DATE,LOG_ID=LOG_ID,\
    START_DATE=START_DATE,STORAGE_BUCKET_NAME=STORAGE_BUCKET_NAME,\
    PROJECT_ID=PROJECT_ID
    

    替换以下内容:

    • JOB_NAME:您的作业的名称。
    • IMAGE_URL:对容器映像的引用;使用 us-docker.pkg.dev/cloud-devrel-public-resources/samples/import-logs-solution 或自定义映像的网址(如果您使用 GitHub 中的说明构建了该映像)。
    • REGION:您希望作业所在的区域;为避免产生额外成本,我们建议将作业区域保持不变或将其保存在与 Cloud Storage 存储桶区域相同的多区域内。例如,如果您的存储桶是美国多区域,则可以使用 us-central1。如需了解详情,请参阅成本优化
    • TASKS:作业必须运行的任务的数量。默认值为 1。如果发生超时,您可以增加任务数量。
    • CPU:CPU 限制,可以是 1、2、4、6 或 8 个 CPU。默认值为 2。如果发生超时,您可以增大该数值;如需了解详情,请参阅配置 CPU 限制
    • MEMORY:内存限制。默认值为 2Gi。如果发生超时,您可以增大该数值;如需了解详情,请参阅配置内存限制
    • END_DATE:采用 MM/DD/YYYY 格式的日期范围的末尾。系统会导入时间戳早于或等于此日期的日志。
    • LOG_ID:要导入的日志的日志标识符。日志 ID 是日志条目的 logName 字段的一部分。例如 cloudaudit.googleapis.com
    • START_DATE:采用 MM/DD/YYYY 格式的日期范围的开始。系统会导入时间戳晚于或等于此日期的日志。
    • STORAGE_BUCKET_NAME:在其中存储日志的 Cloud Storage 存储桶的名称(不带 gs:// 前缀)。

    max-retries 选项设置为零,以防重试失败的任务,这可能会导致重复的日志条目产生。

    如果 Cloud Run 作业因超时而失败,则可能会导致导入不完整。为防止由于超时而导致导入不完整,请增加 tasks 值以及 CPU内存资源。

增加这些值可能会增加成本。如需详细了解成本,请参阅成本优化

创建服务账号以运行 Cloud Run 作业

  1. 在 Cloud Shell 中,创建用户托管的服务账号:

    gcloud iam service-accounts create SA_NAME
    

    SA_NAME 替换为服务账号的名称。

  2. 在存储桶上授予 Storage Object Viewer 角色:

    gcloud storage buckets add-iam-policy-binding gs://STORAGE_BUCKET_NAME \
    --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/storage.objectViewer
    

    替换以下内容:

    • STORAGE_BUCKET_NAME:您在导入作业配置中使用的存储桶的名称。例如 my-bucket
    • PROJECT_ID:目标项目 ID。
  3. 在日志存储桶上授予 Logs Writer 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/logging.logWriter
    
  4. 为 Cloud Run 作业设置服务账号:

    gcloud run jobs update JOB_NAME \
    --region=REGION \
    --service-account SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    

    REGION 替换为您在其中部署 Cloud Run 导入作业的区域。

运行导入作业

  • 在 Cloud Shell 中,执行已创建的作业:

    gcloud run jobs execute JOB_NAME \
    --region=REGION
    

如需了解详情,请参阅执行作业管理作业执行

如果您需要重新运行该作业,请删除之前导入的日志,以免创建重复项。如需了解详情,请参阅本文档后面的删除导入的日志

查询导入的日志时,查询结果中不会显示重复项。 Cloud Logging 会从查询结果中移除重复项(来自同一项目的日志条目,具有相同插入 ID 和时间戳)。如需了解详情,请参阅 Logging API 参考文档中的 insert_id 字段

验证结果

如需验证作业是否已成功完成,您可以在 Cloud Shell 中查询导入结果:

  gcloud logging read 'log_id("imported_logs") AND timestamp<=END_DATE'

输出会显示导入的日志。如果此项目被用于在指定的时间范围内运行多个导入作业,则输出还会显示这些作业的导入日志。

如需了解查询日志条目的更多选项和详细信息,请参阅 gcloud logging read

删除导入的日志

如果您需要多次运行同一作业,请删除之前导入的日志,以免出现重复条目和增加的成本。

  • 如需删除导入的日志,请在 Cloud Shell 中执行日志删除操作:

    gcloud logging logs delete imported_logs
    

请注意,删除导入的日志会完全清除导入到目标项目中的所有日志条目,而不仅仅是完全清除上次导入作业执行的结果。

后续步骤

贡献者

作者:Leonid Yankulin | 开发者关系工程师

其他贡献者: