我有一个系统,可以在启动时将动态创建的实例与临时IP地址添加到GCP云DNS。但是,我需要在关闭时从DNS中删除它们,无论是通过GCP自己的API,还是通过其他方法。
我现在能想到的最好的是:
还有其他办法吗?
答案 0 :(得分:1)
我知道有两种方法可以做到这一点。两者仍然需要Stackdriver日志记录服务,但它不应该要求记录像正常运行时间监视那样的无关数据,它应该捕获在给定GCP项目中发生的每个GCE实例关闭,无论它如何发生。 我个人更喜欢第二种方法(Pub / Sub)。
第一种方法是通过Stackdriver服务。以下步骤假设您已经设置了Stackdriver帐户并将其连接到您要监控的项目。
在过滤器文本字段的最右侧,选择高级模式并输入以下内容(其中my-project
是项目名称):
resource.type="gce_instance"
logName="projects/my-
project/logs/compute.googleapis.com%2Factivity_log"
(jsonPayload.event_subtype:"compute.instances.stop" OR
jsonPayload.event_subtype:"compute.instances.guestTerminate")
jsonPayload.event_type:"GCE_OPERATION_DONE"
在页面顶部点击Create Metric
,然后为其命名和说明,并提交新指标
Log-based Metrics
page。在User-defined Metrics
下,您现在应该会看到新创建的指标Create alert from metric
。这应该会带您进入Stackdriver警报面板,其中包含大部分正确的信息THRESHOLD
值更改为0
,将FOR
值更改为most recent value
。然后点击Save Condition
。上述方法的缺点是您需要支付Stackdriver高级帐户才能使用webhooks等功能。 pricing on that是否值得,取决于你。另一方面,下面的方法(使用GCP Pub / Sub)花费nothing from Stackdriver并使用免除和非免除日志。当然,您仍然需要支付因使用该服务而产生的任何Pub / Sub费用。
第二种方法类似,但不一定需要高级Stackdriver帐户(你应该可以在Free Stackdriver层上完成所有这些工作)。在此方法中,您使用Google Pub / Sub。可以找到大部分相关文档here。
在过滤器文本字段的最右侧,选择高级模式并输入以下内容(其中my-project
是项目名称):
resource.type="gce_instance"
logName="projects/my-
project/logs/compute.googleapis.com%2Factivity_log"
(jsonPayload.event_subtype:"compute.instances.stop" OR
jsonPayload.event_subtype:"compute.instances.guestTerminate")
jsonPayload.event_type:"GCE_OPERATION_DONE"
在页面顶部点击Create Export
,为其指定接收器名称,选择Cloud Pub/Sub
作为接收服务,然后选择或创建发布/订阅主题
我个人更喜欢Pub / Sub方法。它似乎更适合用途,并且(至少在理论上)比Stackdriver方法便宜。
可能有一种方法可以通过GCP API以编程方式执行此操作,但我并没有深入挖掘。如果我找到任何相关文档,那么我也会用这些信息更新这个答案。
答案 1 :(得分:0)
您是否考虑过向实例添加shutdown script?您可以将该脚本Table
添加到所需的任何URL。无需参与Stackdriver或Pub / Sub。