如何创建pubsub日志接收器到不同的Google云项目/组织?

时间:2018-01-04 18:56:15

标签: google-cloud-platform gcloud google-cloud-pubsub stackdriver google-cloud-stackdriver

我想定义将pubsub日志导出接收器从一个项目导出到另一个项目的步骤。作为次要目标,我希望接收器能够连接组织。到目前为止,我已按照gcloud帮助页面和auth documentation中列出的步骤执行了这些步骤。

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

# 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

此命令不会出现问题。

尽管一切看似不错,但没有任何日志流过水槽。

以下是一些线索:日志查看器上的“导出”选项卡报告接收器中的权限错误。 “项目活动”选项卡报告权限问题。

Image: Logs Viewer, Exports

Image: Project, Activity

是否有解决方案使这项工作?是否可以概括这一点,以便从其他gcloud组织将日志发送到此项目中的接收器?

2 个答案:

答案 0 :(得分:0)

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

  • 项目A (存储我的日志):project-a
  • 项目B (我的发布/订阅主题和订阅位置):project-b
  • 主题:projects / project-b / topics / myTopic
  • 订阅:mySub
  • 接收器:test-sink

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

  1. 在项目A中:记录&gt;中的日志创建过滤器在Google云端控制台中记录标签。
  2. 使用下图中的元素创建导出(请记住将 pubsub.googleapis.com / 附加到其他项目中主题的名称): enter image description here

  3. 转到导出标签并复制 Writer Identity ,其格式应为 test-sink@XXXXXXXX.iam.gserviceaccount.com

  4. 在项目B中:转到 IAM&amp;管理员&gt;控制台中的IAM 选项卡,并添加一个新成员,该成员是在步骤3中获得的前一个服务帐户,其中启用了Pub / Sub Editor

  5. 使用命令gcloud beta pubsub subscriptions create --topic myTopic mySub

  6. 创建发布/订阅订阅
  7. 执行一些操作,导致您在项目A中指定的过滤器读取日志。

  8. 使用订阅gcloud beta pubsub subscriptions pull mySub消耗使用订阅写入主题的日志。

  9. 在那里,您将找到从项目A写入项目B中的热带的日志。我已经重现了从简单的App Engine应用程序编写日志的相同方案(因此使用适当的日志过滤器搜索App Engine日志) ,当我向App Engine应用程序发出请求时,会创建一些日志,然后用 myTopic 编写,我可以使用 mySub 阅读。

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

答案 1 :(得分:0)

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

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