本文档介绍如何创建汇总接收器。借助汇总接收器,您可以合并组织或文件夹中 Google Cloud 资源生成的日志,并将其路由到集中位置。
准备工作
在创建接收器之前,请确保满足以下条件:
您熟悉汇总接收器的行为。如需了解这些接收器,请参阅汇总接收器概览。
您有一个 Google Cloud 文件夹或组织,其日志条目可在 Logs Explorer 中查看。
对于您要从中路由日志条目的Google Cloud 组织或文件夹,您拥有以下 IAM 角色之一。
- Owner (
roles/owner
) - Logging Admin (
roles/logging.admin
) - Logs Configuration Writer (
roles/logging.configWriter
)
这些角色中包含的权限可让您创建、删除或修改接收器。如需了解如何设置 IAM 角色,请参阅 Logging 访问权限控制指南。
- Owner (
汇总接收器的目标位置已存在,或者您能够创建该目标位置。
如果目标位置是 Google Cloud 项目,则该项目可以位于任何组织中。所有其他目标位置可以位于任何组织的任何项目中。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
创建汇总接收器
如需配置汇总接收器,请创建接收器,然后为接收器授予将数据写入目标位置的权限。本部分介绍了如何创建汇总接收器。如需了解如何向接收器授予权限,请参阅本页面中标题为设置目标位置权限的部分。
每个文件夹或组织最多可以创建 200 个接收器。
控制台
要为文件夹或组织创建汇总接收器,请执行以下操作:
-
在 Google Cloud 控制台中,前往日志路由器页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
选择现有文件夹或组织。
选择创建接收器。
在接收器详情面板中,输入以下详细信息:
接收器名称:提供接收器的标识符。请注意,创建接收器后,您无法重命名接收器,但可以将其删除并创建新的接收器。
接收器说明(可选):描述接收器的用途或使用场景。
在选择接收器服务菜单中,选择目标位置的类型,然后完成相应对话框以指定目标位置。您可以选择现有目标位置,也可以创建目标位置。
对于拦截接收器,请选择Google Cloud 项目,然后输入目标 Google Cloud 项目的完全限定名称:
logging.googleapis.com/projects/DESTINATION_PROJECT_ID
对于非拦截接收器,请选择目标位置,然后输入目标位置的完全限定名称。支持以下目标位置:
Google Cloud 项目
logging.googleapis.com/projects/DESTINATION_PROJECT_ID
Cloud Logging 存储分区
logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
BigQuery 数据集
您必须输入启用了写入功能的数据集的完全限定名称。数据集可以是日期分片表或分区表。请勿输入关联数据集的名称。关联数据集为只读数据集。
bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
Cloud Storage 存储分区
storage.googleapis.com/BUCKET_NAME
发布/订阅主题
pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
Splunk
输入 Splunk 服务的 Pub/Sub 主题。
在选择要包含在接收器中的日志面板中,选择要包含在接收器中的资源。
对于拦截接收器,请选择拦截此组织和所有子资源注入的日志。
对于非拦截接收器,请选择包含此资源和所有子资源注入的日志。
在构建包含项过滤条件字段中,输入与要包含的日志条目匹配的过滤条件表达式。如果您不设置过滤条件,来自所选资源的所有日志条目都会路由到目标位置。
例如,您可能希望构建一个过滤条件,将所有数据访问审核日志都路由到单个 Logging 存储桶。此过滤条件大致如下所示:
LOG_ID("cloudaudit.googleapis.com/data_access") OR LOG_ID("externalaudit.googleapis.com/data_access")
如需查看过滤条件示例,请参阅本页面中的为汇总接收器创建过滤条件部分。
请注意,过滤条件的长度不能超过 20000 个字符。
可选:如需验证您输入的过滤条件是否正确,请选择预览日志。此操作会在新标签页中打开Logs Explorer且其中预填充了过滤条件。
可选:在选择要从接收器中排除的日志面板中,执行以下操作:
在排除项过滤条件名称字段中输入名称。
在构建排除项过滤条件部分,输入与要排除的日志条目匹配的过滤条件表达式。您还可以使用
sample
函数选择要排除的日志条目。例如,如需排除特定项目的日志条目,使其不被路由到目标位置,请添加以下排除项过滤条件:
logName:projects/PROJECT_ID
如需排除多个项目中的日志条目,请使用逻辑 OR 运算符联接
logName
子句。
您最多可以为每个接收器创建 50 个排除项过滤条件。请注意,过滤条件的长度不能超过 20000 个字符。
选择创建接收器。
如需完成汇总接收器的配置,请向接收器的服务账号授予将日志条目写入接收器目标位置的权限。如需了解详情,请参阅设置目标位置权限。
gcloud
如需创建汇总接收器,请使用
logging sinks create
命令:如需创建接收器,请调用
gcloud logging sinks create
命令,并确保包含--include-children
选项。在使用以下命令之前,请先进行以下替换:
- SINK_NAME:日志接收器的名称。一旦创建了接收器,便无法更改其名称。
- SINK_DESTINATION:您希望将日志条目路由到的服务或项目。如需了解这些目标位置的格式,请参阅目标位置路径格式。
- INCLUSION_FILTER:接收器的包含项过滤条件。如需查看过滤条件示例,请参阅为汇总接收器创建过滤条件。
- FOLDER_ID:文件夹的 ID。如果您想在组织级创建接收器,请将
--folder=FOLDER_ID
替换为-- organization=ORGANIZATION_ID
。
执行
gcloud logging sinks create
命令:gcloud logging sinks create SINK_NAME \ SINK_DESTINATION --include-children \ --folder=FOLDER_ID --log-filter="INCLUSION_FILTER"
您还可以提供以下选项:
- 如需创建拦截接收器,请添加
--intercept-children
选项。
例如,如果您在文件夹级层创建汇总接收器,并且其目标位置是 Pub/Sub 主题,则您的命令可能如下所示:
gcloud logging sinks create SINK_NAME \ pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID --include-children \ --folder=FOLDER_ID --log-filter="logName:activity"
向接收器服务账号授予向接收器目标位置写入内容的权限。如需了解详情,请参阅设置目标位置权限。
REST
如需创建汇总接收器,请使用
organizations.sinks.create
或folders.sinks.create
Logging API 方法。请按以下步骤准备方法的参数:将
parent
字段设置为要在其中创建接收器的 Google Cloud 组织或文件夹。parent 参数必须是以下之一:organizations/ORGANIZATION_ID
folders/FOLDER_ID
在方法请求正文的
LogSink
对象中,执行以下操作之一:将
includeChildren
设置为True
。如需创建拦截接收器,还需将
interceptChildren
字段设置为True
。
设置
filter
字段,以匹配您要包含的日志条目。如需查看过滤条件示例,请参阅为汇总接收器创建过滤条件。
过滤条件的长度不能超过 20,000 个字符。
像设置任何接收器一样设置其余
LogSink
字段。如需了解详情,请参阅将日志路由到支持的目标位置。调用
organizations.sinks.create
或folders.sinks.create
以创建接收器。向接收器服务账号授予向接收器目标位置写入内容的权限。如需了解详情,请参阅设置目标位置权限。
对接收器所做的任何更改可能需要几分钟才能应用。
汇总接收器的过滤条件
本部分提供了您可能在汇总接收器中使用的过滤条件示例。如需查看更多示例,请参阅使用 Logs Explorer 的示例查询。
部分示例使用以下表示法:
:
是子字符串运算符。请勿将其替换为=
运算符。...
表示任何其他过滤条件比较。- 变量用彩色文本表示。请用有效值替换变量。
过滤条件的长度上限为 20,000 个字符。
如需详细了解过滤语法,请参阅日志记录查询语言。
选择日志源
如需路由所有子资源的日志条目,请勿在接收器的包含项和排除项过滤条件中指定项目、文件夹或组织。例如,假设您使用以下过滤条件为某个组织配置汇总接收器:
resource.type="gce_instance"
使用上一个过滤条件时,资源类型为 Compute Engine 实例且写入该组织的任何子级的日志条目会由汇总接收器路由到目标位置。
不过,在某些情况下,您可能希望使用汇总接收器仅路由特定子资源的日志条目。例如,出于合规性考虑,您可能希望将特定文件夹或项目的审核日志存储在各自的 Cloud Storage 存储桶中。在这些情况下,请配置包含项过滤条件,以指定要路由其日志条目的每个子资源。如果您想路由某个文件夹以及该文件夹中所有项目的日志条目,则过滤条件必须列出该文件夹以及该文件夹包含的每个项目,并使用
OR
子句联接语句。以下过滤条件可将日志条目的范围限制为特定 Google Cloud 项目、文件夹或组织:
logName:"projects/PROJECT_ID/logs/" AND ...
logName:("projects/PROJECT_A_ID/logs/" OR "projects/PROJECT_B_ID/logs/") AND ...
logName:"folders/FOLDER_ID/logs/" AND ...
logName:"organizations/ORGANIZATION_ID/logs/" AND ...
例如,如需仅路由写入到文件夹
my-folder
的 Compute Engine 实例的日志条目,请使用以下过滤条件:logName:"folders/my-folder/logs/" AND resource.type="gce_instance"
使用上一个过滤条件时,写入
my-folder
以外的任何资源的日志条目(包括写入my-folder
的子级 Google Cloud 项目的日志条目)都不会路由到目标位置。选择受监控的资源
如仅需从Google Cloud 项目中的特定受监控的资源路由日志条目,请使用多项比较来准确指定资源:
logName:"projects/PROJECT_ID/logs" AND resource.type=RESOURCE_TYPE AND resource.labels.instance_id=INSTANCE_ID
如需查看资源类型的列表,请参阅受监控的资源类型。
选择日志条目示例
如需路由随机选取的日志条目,请添加
sample
内置函数。例如,要仅路由与当前过滤条件匹配的 10% 的日志条目,请使用以下添加函数:sample(insertId, 0.10) AND ...
如需了解详情,请参阅
sample
函数。如需详细了解 Cloud Logging 过滤条件,请参阅日志记录查询语言。
设置目标位置权限
本部分介绍如何向 Logging 授予将日志条目写入接收器目标位置的 Identity and Access Management 权限。如需查看 Logging 角色和权限的完整列表,请参阅访问权限控制。
如果您创建或更新的接收器会将日志条目路由到当前项目中日志存储桶以外的任何其他目的地,则需要该接收器的服务账号。Logging 会自动为您创建和管理服务账号:
- 自 2023 年 5 月 22 日起,当您创建接收器且底层资源没有服务账号时,Logging 会创建服务账号。Logging会对底层资源中的所有接收器使用相同的服务账号。资源可以是 Google Cloud 项目、组织、文件夹或结算账号。
- 在 2023 年 5 月 22 日之前,Logging 为每个接收器创建了一个服务账号。自 2023 年 5 月 22 日起,Logging 对底层资源中的所有接收器使用共享服务账号。
接收器的写入者身份是与该接收器关联的服务账号的标识符。除非写入当前 Google Cloud 项目中的日志存储桶,否则所有接收器都有写入者身份。 写入者身份中的邮箱用于标识必须有权将数据写入目标位置的主账号。
如需将日志条目路由到受服务边界保护的资源,您必须将该接收器的服务账号添加到某个访问权限级别,然后将其分配给目标服务边界。对于非汇总接收器,则无需执行此操作。如需了解详情,请参阅 VPC Service Controls:Cloud Logging。
如需设置便于接收器路由到其目标位置的权限,请执行以下操作:
控制台
如需获取接收器的服务账号的相关信息,请执行以下操作:
-
在 Google Cloud 控制台中,前往日志路由器页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
选择 more_vert 菜单,然后选择查看接收器详情。写入者身份会显示在接收器详情面板中。
如果
writerIdentity
字段的值包含邮箱,请继续执行下一步。如果该值为None
,则无需配置目标位置权限。将接收器的写入者身份复制到剪贴板中。 下面展示了写入者身份:
serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
-
向接收器的写入者身份指定的主账号授予将日志数据写入目标位置的权限:
-
在 Google Cloud 控制台中,前往 IAM 页面:
如果您使用搜索栏查找此页面,请选择子标题为 IAM 和管理的结果。
在 Google Cloud 控制台的工具栏中,选择存储汇总接收器目标位置的项目。如果目标位置是项目,请选择该项目。
点击
授予访问权限。输入接收器的写入者身份指定的主账号,然后授予 IAM 角色:
- Google Cloud 项目:授予 Logs Writer 角色 (
roles/logging.logWriter
)。具体而言,主账号需要拥有logging.logEntries.route
权限。 - 日志存储桶:授予 Logs Bucket Writer 角色 (
roles/logging.bucketWriter
)。 - Cloud Storage 存储桶:授予 Storage Object Creator 角色 (
roles/storage.objectCreator
)。 - BigQuery 数据集:授予 BigQuery Data Editor 角色 (
roles/bigquery.dataEditor
)。 - Pub/Sub 主题,包括 Splunk:授予 Pub/Sub Publisher 角色 (
roles/pubsub.publisher
)。
- Google Cloud 项目:授予 Logs Writer 角色 (
-
gcloud
确保您对包含目标位置的Google Cloud 项目拥有 Owner 访问权限。如果您对接收器目标位置没有 Owner 访问权限,请让项目所有者添加写入者身份作为主账号。
如需获取接收器的服务账号的相关信息,请调用
gcloud logging sinks describe
方法。在使用以下命令之前,请先进行以下替换:
- SINK_NAME:日志接收器的名称。一旦创建了接收器,便无法更改其名称。
执行
gcloud logging sinks describe
命令:gcloud logging sinks describe SINK_NAME
如果接收器详细信息包含标记为
writerIdentity
的字段,请继续执行下一步。如果详情不包含writerIdentity
字段,则无需为接收器配置目标位置权限。将接收器的写入者身份复制到剪贴板中。 下面展示了写入者身份:
serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
通过调用
gcloud projects add-iam-policy-binding
命令,向接收器的写入者身份授予将日志数据写入目标位置的权限。在使用以下命令之前,请先进行以下替换:
- PROJECT_ID:项目的标识符。 选择存储汇总接收器目标位置的项目。如果目标位置是项目,请选择该项目。
- PRINCIPAL:您要向其授予角色的主账号的标识符。主账号标识符通常采用以下格式:
PRINCIPAL-TYPE:ID
。例如user:my-user@example.com
。 如需查看PRINCIPAL
可以采用的格式的完整列表,请参阅主账号标识符。 ROLE:IAM 角色。 根据日志接收器的目标位置,向接收器的写入者身份授予 IAM 角色:
- Google Cloud 项目:授予 Logs Writer 角色 (
roles/logging.logWriter
)。具体而言,主账号需要拥有logging.logEntries.route
权限。 - 日志存储桶:授予 Logs Bucket Writer 角色 (
roles/logging.bucketWriter
)。 - Cloud Storage 存储桶:授予 Storage Object Creator 角色 (
roles/storage.objectCreator
)。 - BigQuery 数据集:授予 BigQuery Data Editor 角色 (
roles/bigquery.dataEditor
)。 - Pub/Sub 主题,包括 Splunk:授予 Pub/Sub Publisher 角色 (
roles/pubsub.publisher
)。
- Google Cloud 项目:授予 Logs Writer 角色 (
执行
gcloud projects add-iam-policy-binding
命令:gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE
REST
我们建议您使用 Google Cloud 控制台或 Google Cloud CLI 向服务账号授予角色。
后续步骤
了解如何在日志存储桶上创建日志视图。借助日志视图,您可以向主账号授予对存储在日志存储桶中的部分日志条目的读取权限。
如需了解如何管理现有接收器,请参阅将日志路由到支持的目的地:管理接收器。
如果您在使用接收器来路由日志时遇到问题,请参阅排查路由和接收器问题。
如需了解如何在目标位置查看日志,以及日志的格式和组织方式,请参阅查看接收器目标位置中的日志。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-06-16。
-