GCPで平日日中しか稼働しないサーバーの稼働時間チェックを設定する

Cloud Monitoringのアラートで、有効/無効を切り替えることで実現できました。

Pythonクライアントを使って実装します。Cloud FunctionやCloud Schedulerを組み合わせることで定期的にアラートの有効/無効を切り替えます。

Sample Code

以下のコードで切り替えることができます。

# アラートを有効にする
from google.cloud import monitoring_v3

project = "my-project" # 設定するプロジェクトIDを記入
alret_id = "my-alert-id"
enabled = True # Falseに設定すると無効

client = monitoring_v3.AlertPolicyServiceClient()
name = "projects/" + project + "/alertPolicies/" + "alert_id"

# 対象ポリシーオブジェクトを取得
policy = client.get_alert_policy(name)
policy.enabled.value = enabled

# 対象ポリシーのupdate mask(update対象を特定)
mask = monitoring_v3.types.field_mask_pb2.FieldMask()
mask.paths.append('enabled')

# updateを実行
client.update_alert_policy(policy, mask)

アラートのID確認方法

アラートのIDを確認します。
事前に、公式ドキュメントに沿って通常の稼働時間チェック、アラートポリシーを設定します。

gcloudコマンドを使ってアラートのIDをチェックすることができます。

gcloud alpha monitoring policies list

出力結果の[name: xxxxxx]の部分を確認します。
取得したアラートのIDを使ってPythonコードを実装します。

このコマンドはアルファ版なので、今後、変更が予定されています。プロダクトのリリースステージ(アルファ版、ベータ版)の詳細はこちらで確認できます。

アラートIDを調べられない場合

アラートのIDを指定しない場合はfor文を用いて特定の表示名(display_name)に一致するものを処理することも可能です。

# display nameが一致しているものを有効化する
from google.cloud import monitoring_v3

project = "my-project" # 設定するプロジェクトIDを記入
display_name = "my-alert"
enabled = True # Falseに設定すると無効

client = monitoring_v3.AlertPolicyServiceClient()
name = client.project_path(project) 

policies = client.list_alert_policies(name)
for policy in policies:
   if policy.display_name == display_name:
       policy.enabled.value = enabled

       # 対象ポリシーのupdate mask(update対象を特定)
       mask = monitoring_v3.types.field_mask_pb2.FieldMask()
       mask.paths.append('enabled')
       
       # updateを実行
       client.update_alert_policy(policy, mask)

この記事が気に入ったらサポートをしてみませんか?