0

我想定义从一个项目到另一个项目的 pubsub 日志导出接收器的步骤。作为次要目标,我希望接收器连接组织。到目前为止,我已按照gcloud帮助页面和身份验证文档中概述的这些步骤进行操作。

首先我创建了一个接收器:

# from project A
gcloud logging sinks create \
    <sink_name> \
    pubsub.googleapis.com/projects/<project_B>/topics/<topic_name> \
    --log-filter <filter>

CLI 成功返回,并就为其创建的服务帐户设置权限提供了一些建议:

Created [https://logging.googleapis.com/v2/projects/<project_A>/sinks/<sink_name>].
Please remember to grant `serviceAccount:<new_user>@logging-<project_A_account_number>.iam.gserviceaccount.com` Pub/Sub Publisher role to the topic.
More information about sinks can be found at https://cloud.google.com/logging/docs/export/configure_export

根据此建议,我为新服务帐户授予了该主题的适当权限。

gcloud projects add-iam-policy-binding <project_B> \
    --member serviceAccount:<new_user>@logging-<project_A_account_numbe_id>.iam.gserviceaccount.com \
    --role roles/pubsub.publisher

此命令返回没有问题。

尽管一切看起来都很好,但没有日志流过水槽。

以下是一些线索: Logs Viewer 上的 Exports 选项卡报告接收器中的权限错误。项目活动选项卡报告权限问题。

图片:日志查看器,导出

图片:项目、活动

有没有解决方案来完成这项工作?是否可以将其概括为从其他 gcloud 组织将日志发送到该项目中的接收器?

4

2 回答 2

2

我已经能够重现您想要的场景。让我设置场景描述的基础:

  • 项目 A(存储我的日志的地方):project-a
  • 项目 B(我的 Pub/Sub 主题和订阅所在的位置):project-b
  • 主题:projects/project-b/topics/myTopic
  • 订阅:我的订阅
  • 接收器:测试接收器

然后,这是我遵循的处理:

  1. 在项目 A 中:在 Google Cloud Console的Logging > Logs选项卡中为日志创建过滤器。
  2. 使用下图中的元素创建导出(请记住将pubsub.googleapis.com/附加到您在另一个项目中的主题名称): 在此处输入图像描述

  3. 移动到Exports选项卡并复制Writer Identity,其格式应为test-sink@XXXXXXXX.iam.gserviceaccount.com

  4. 在项目 B 中:转到控制台中的IAM & admin > IAM选项卡,并添加一个新成员,该成员是在步骤 3 中获得的先前服务帐户,角色Pub/Sub Editor enabled

  5. 使用命令创建 Pub/Sub 订阅gcloud beta pubsub subscriptions create --topic myTopic mySub

  6. 执行一些操作,导致您在项目 A 中指定的过滤器读取日志。

  7. 使用命令 使用订阅使用写入主题的日志gcloud beta pubsub subscriptions pull mySub

在那里,您将找到从项目 A 写入项目 B 中的热带的日志。我已经从一个简单的 App Engine 应用程序(因此使用适当的日志过滤器搜索 App Engine 日志)复制了相同的场景写入日志,以及何时我向 App Engine 应用程序发出请求,创建了一些日志,然后将其写入myTopic,我可以使用mySub读取这些日志。

关于您的第二个问题,我无法确定相同的程序是否适用于跨组织方案,但我认为这没有问题。

于 2018-01-15T14:19:15.930 回答
0

马特,您创建接收器并将发布者角色授予接收器使用的服务帐户的 gcloud 命令看起来是正确的。您看到的错误可能是暂时的,应该在一段时间后解决。错误的一个可能原因可能是两个命令之间存在时间延迟,并且接收器在您授予 IAM 角色之前立即尝试导出日志。您能否确认错误最终自行解决?

要回答您的最后一个问题,是的,您可以将日志从一个项目导出到不同组织中另一个项目的目的地。

于 2018-01-19T03:20:04.567 回答