Google cloud platform GCE实例关闭时如何生成webhook?

Google cloud platform GCE实例关闭时如何生成webhook?,google-cloud-platform,google-compute-engine,webhooks,shutdown,google-cloud-pubsub,Google Cloud Platform,Google Compute Engine,Webhooks,Shutdown,Google Cloud Pubsub,我有一个系统,可以在GCP云DNS启动时将动态创建的具有短暂IP地址的实例添加到GCP云DNS。但是,当它们关闭时,我需要将它们从DNS中删除,无论是通过GCP自己的API还是通过其他方法 我现在能想到的最好的办法是: 轮询GCE API 优点:万无一失;几乎可以保证工作;webhook不需要端点 缺点:资源规模问题;如果不智能地编写,可能很容易达到API请求配额 通过Stackdriver/StackMonitor使用并创建webhook通知 优点:只在需要时运行代码;简单的webhoo

我有一个系统,可以在GCP云DNS启动时将动态创建的具有短暂IP地址的实例添加到GCP云DNS。但是,当它们关闭时,我需要将它们从DNS中删除,无论是通过GCP自己的API还是通过其他方法

我现在能想到的最好的办法是:

  • 轮询GCE API
    • 优点:万无一失;几乎可以保证工作;webhook不需要端点
    • 缺点:资源规模问题;如果不智能地编写,可能很容易达到API请求配额
  • 通过Stackdriver/StackMonitor使用并创建webhook通知
    • 优点:只在需要时运行代码;简单的webhook实现;没有投票;没有误报
    • 缺点:无法监视意外关闭(即不是API调用)
  • 通过Stackdriver/StackMonitor使用
    • 优点:适用于意外停机
    • 缺点:Stackdriver将跟踪许多其他未使用的指标;发送正常运行时间通知前至少需要5分钟;基于CPU/内存统计数据,这可能意味着机器被冻结或日志可执行文件崩溃,而不是机器真正关闭

  • 还有其他方法吗?

    我知道有两种方法可以做到这一点。两者都仍然需要Stackdriver日志记录服务,但它不应该像正常运行时间监视那样需要记录无关数据,它应该捕获给定GCP项目中发生的每个GCE实例关闭,不管它是如何发生的我个人更喜欢第二种方法(Pub/Sub)

    第一种方法是通过Stackdriver服务。以下步骤假设您已经设置了Stackdriver帐户,并将其连接到要监视的项目

    堆垛机法
  • 转到所需项目的
  • 在过滤器文本字段的最右侧,选择高级模式并输入以下内容(其中
    my project
    是您的项目名称):

    resource.type=“gce\u实例”
    logName=“项目/my”-
    project/logs/compute.googleapis.com%2f活动日志“
    (jsonPayload.event_子类型:“compute.instances.stop”或
    jsonPayload.event_子类型:“compute.instances.guesterMinate”)
    jsonPayload.事件类型:“GCE\U操作完成”

  • 在页面顶部,单击
    创建度量
    ,然后为其提供名称和说明,然后提交新度量

  • 继续之前,请确保创建您的。一个好的测试平台是(但请记住,它是可公开访问的,所以您不应该发布任何敏感的内容,并且/或者您应该在完成后立即删除粘贴库)
  • 现在,你去公园吧。在
    User defined Metrics
    下,您现在应该可以看到新创建的度量
  • 单击最右侧的下拉菜单,选择
    Create alert from metric
    。这将带您进入Stackdriver警报面板,并填写大部分正确信息
  • 阈值
    值更改为
    0
    ,将
    值更改为
    最新值
    。然后单击
    保存条件
  • 选择您想要的通知(至少应该包括您的webhook)
  • 命名并保存您的警报策略
  • 启动和停止机器进行测试
  • 上述方法的缺点是,您需要为Stackdriver premium帐户付费才能使用webhooks等功能。这件事是否值得,取决于你。另一方面,下面的方法(使用GCP发布/订阅)会降低成本,并适用于免税和非免税日志。当然,您仍然需要支付因使用该服务而产生的任何酒吧/酒吧收费

    发布/订阅方法 第二种方法类似,但不一定需要高级Stackdriver帐户(您可以在免费Stackdriver层执行所有这些操作)。在这种方法中,您可以使用Google Pub/Sub。可以找到许多相关文档

  • 转到所需项目的
  • 在过滤器文本字段的最右侧,选择高级模式并输入以下内容(其中
    my project
    是您的项目名称):

    resource.type=“gce\u实例”
    logName=“项目/my”-
    project/logs/compute.googleapis.com%2f活动日志“
    (jsonPayload.event_子类型:“compute.instances.stop”或
    jsonPayload.event_子类型:“compute.instances.guesterMinate”)
    jsonPayload.事件类型:“GCE\U操作完成”

  • 在页面顶部,单击
    创建导出
    ,给它一个接收器名称,选择
    云发布/订阅
    作为接收器服务,然后选择或创建发布/订阅主题

  • 有关详细信息,请参阅谷歌发布/订阅文档。Pub/Sub也允许使用
  • 我个人更喜欢Pub/Sub方法。与Stackdriver方法相比,它似乎更适合使用,并且(至少在理论上)成本更低


    可能有一种方法可以通过gcpapi以编程方式完成这一切,但我还没有深入研究。如果我找到了相关的文档,那么我也会用这些信息更新这个答案。

    您考虑过在实例中添加一个吗?您可以将该脚本
    发布到您想要的任何URL。无需涉及Stackdriver或Pub/Sub.

    许多人会发现这个更简单的解决方案很有用,谢谢分享。然而,链接文档中指出了一个巨大的问题:“计算引擎仅在尽最大努力的基础上执行关闭脚本。在极少数情况下,计算引擎无法保证关闭脚本将完成。”如果您需要始终运行webhook,此解决方案是不够的。如果我理解正确,脚本在VM本身上运行,如果机器“脏”关闭或冻结(即脚本永远不会运行),这也是一个问题。其他解决方案没有这些限制。