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)