本文档介绍了如何按“将日志从 Cloud Storage 导入 Cloud Logging ”中所述部署参考架构。
以下说明面向希望配置和运行日志导入作业的工程师和开发者(包括 DevOps 工程师、网站可靠性工程师 [SRE] 和安全调查人员)。本文档还假定您熟悉运行 Cloud Run 导入作业,并掌握如何使用 Cloud Storage 和 Cloud Logging。
架构
下图展示了此参考架构中如何使用 Google Cloud 服务:
如需了解详情,请参阅将日志从 Cloud Storage 导入到 Cloud Logging。
目标
- 创建和配置 Cloud Run 导入作业
- 创建一个服务账号以运行作业
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
准备工作
确保您要导入的日志之前已导出到 Cloud Storage,这意味着它们已按预期的导出格式进行整理。
In the Google Cloud console, activate Cloud Shell.
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create
PROJECT_ID Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project
PROJECT_ID Replace
PROJECT_ID
with your Google Cloud project name.
-
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 作业
在 Cloud Shell 中,创建用户托管的服务账号:
gcloud iam service-accounts create
SA_NAME 将
SA_NAME 替换为服务账号的名称。在存储桶上授予 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。
在日志存储桶上授予 Logs Writer 角色:
gcloud projects add-iam-policy-binding
PROJECT_ID \ --member=serviceAccount:SA_NAME @PROJECT_ID .iam.gserviceaccount.com \ --role=roles/logging.logWriter为 Cloud Run 作业设置服务账号:
gcloud run jobs update
JOB_NAME \ --region=REGION \ --service-accountSA_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
请注意,删除导入的日志会完全清除导入到目标项目中的所有日志条目,而不仅仅是完全清除上次导入作业执行的结果。
后续步骤
- 查看 GitHub 代码库中的实施代码。
- 了解如何使用 Log Analytics 和 SQL 分析导入的日志。
- 如需查看更多参考架构、图表和最佳做法,请浏览云架构中心。
贡献者
作者:Leonid Yankulin | 开发者关系工程师
其他贡献者:
- Summit Tuladhar | 高级软件工程师
- Wilton Wong | 企业架构师
- Xiang Shen | 解决方案架构师