Google cloud platform GCE实例关闭时如何生成webhook?
我有一个系统,可以在GCP云DNS启动时将动态创建的具有短暂IP地址的实例添加到GCP云DNS。但是,当它们关闭时,我需要将它们从DNS中删除,无论是通过GCP自己的API还是通过其他方法 我现在能想到的最好的办法是: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
- 优点:万无一失;几乎可以保证工作;webhook不需要端点
- 缺点:资源规模问题;如果不智能地编写,可能很容易达到API请求配额
- 优点:只在需要时运行代码;简单的webhook实现;没有投票;没有误报
- 缺点:无法监视意外关闭(即不是API调用)
- 优点:适用于意外停机
- 缺点: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
,将的值更改为最新值
。然后单击保存条件
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操作完成”
创建导出
,给它一个接收器名称,选择云发布/订阅
作为接收器服务,然后选择或创建发布/订阅主题可能有一种方法可以通过gcpapi以编程方式完成这一切,但我还没有深入研究。如果我找到了相关的文档,那么我也会用这些信息更新这个答案。您考虑过在实例中添加一个吗?您可以将该脚本
发布到您想要的任何URL。无需涉及Stackdriver或Pub/Sub.许多人会发现这个更简单的解决方案很有用,谢谢分享。然而,链接文档中指出了一个巨大的问题:“计算引擎仅在尽最大努力的基础上执行关闭脚本。在极少数情况下,计算引擎无法保证关闭脚本将完成。”如果您需要始终运行webhook,此解决方案是不够的。如果我理解正确,脚本在VM本身上运行,如果机器“脏”关闭或冻结(即脚本永远不会运行),这也是一个问题。其他解决方案没有这些限制。