代码之家  ›  专栏  ›  技术社区  ›  Matt Weiden

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

  •  1
  • Matt Weiden  · 技术社区  · 7 年前

    我想定义从一个项目到另一个项目的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 回复  |  直到 7 年前
        1
  •  2
  •   dsesto    7 年前

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

    • 项目A (存储日志的位置):project-a
    • 项目B (其中我的发布/子主题和订阅为):project-b
    • 话题 :projects/project-b/topics/myTopic
    • 订阅 :mySub
    • 下沉 :测试接收器

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

    1. 在项目A中: 为中的日志创建筛选器 日志记录(>);日志 选项卡。
    2. 使用下图中的元素创建导出(请记住附加 pubsub。googleapis。com公司/ 您在其他项目中的主题名称): enter image description here

    3. 移动到 出口 选项卡并复制 写入程序标识 ,其格式应为 测试-sink@XXXXXXXX.iam.gserviceaccount.com

    4. 在项目B中: 转到 IAM(&M);管理(>);国际机械师协会 选项卡,并添加一个新成员,该成员是在步骤3中使用角色获得的前一个服务帐户 已启用发布/订阅编辑器 .

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

    6. 执行一些操作,使您在项目A中指定的筛选器读取日志。

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

    在那里,您可以找到从项目A写入到项目B中热带地区的日志。我从一个简单的应用程序引擎应用程序中复制了相同的场景写入日志(因此使用适当的日志过滤器搜索应用程序引擎日志),当我向应用程序引擎应用程序发出请求时,会创建一些日志,然后写入 我的主题 ,我可以使用 mySub .

    关于你的第二个问题,我不能确定这个过程是否适用于跨组织场景,但我看不出有什么问题。

        2
  •  0
  •   Summit Raj    7 年前

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

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