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

Last reviewed 2025-02-19 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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    PROJECT_ID 替换为目标项目 ID。

  4. 确保您的 Google Cloud 项目已启用结算功能

  5. 所需的角色

    如需获得部署此解决方案所需的权限,请让管理员向您授予以下 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:容器映像的引用;如果您按照 GitHub 中的说明构建了自定义映像,请使用 us-docker.pkg.dev/cloud-devrel-public-resources/samples/import-logs-solution 或该自定义映像的网址。
      • 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 | 开发者关系工程师

    其他贡献者: