アラート ポリシーの作成

このページでは、Google Distributed Cloud クラスタに指標ベースのアラート ポリシーを作成する方法について説明します。一般的なシナリオでアラート ポリシーを設定できるように、ダウンロード可能なサンプルが複数用意されています。指標ベースのアラート ポリシーの詳細については、Google Cloud Observability ドキュメントの指標しきい値のアラート ポリシーを作成するをご覧ください。

始める前に

アラート ポリシーを作成するには、次の権限が必要です。

  • monitoring.alertPolicies.create
  • monitoring.alertPolicies.delete
  • monitoring.alertPolicies.update

次のいずれかのロールがある場合、これらの権限が付与されています。

  • monitoring.alertPolicyEditor
  • monitoring.editor
  • プロジェクト編集者
  • プロジェクト所有者

Google Cloud CLI を使用してログベースのアラート ポリシーを作成する場合は、serviceusage.serviceUsageConsumer ロールも必要です。ログベースのアラート ポリシーの設定手順については、Google Cloud Observability ドキュメントのログベースのアラートの構成をご覧ください。

ロールを確認するには、Google Cloud コンソールの [IAM] ページに移動します。

ポリシーの作成例: API サーバーの利用不可

この演習では、クラスタの Kubernetes API サーバー用のアラート ポリシーを作成します。このポリシーを設定すると、クラスタの API サーバーが使用不可になるたびに通知を受け取るように調整できます。

  1. ポリシー構成ファイル apiserver-unavailable.json をダウンロードします。

  2. ポリシーを作成するには:

    gcloud alpha monitoring policies create --policy-from-file=POLICY_CONFIG

    POLICY_CONFIG は、ダウンロードした構成ファイルのパスに置き換えます。

  3. アラート ポリシーを表示するには:

    コンソール

    1. Google Cloud コンソールで [Monitoring] ページに移動します。

      [Monitoring] に移動

    2. 左側にある [アラート] を選択します。

    3. [ポリシー] に、アラート ポリシーのリストが表示されます。

      リストで [Anthos cluster API server unavailable (critical)] を選択して、新しいポリシーの詳細を確認します。[条件] に、ポリシーの説明が表示されます。例:

      Policy violates when ANY condition is met
      Anthos cluster API server uptime is absent for 5m
      

    gcloud

    gcloud alpha monitoring policies list

    出力に、ポリシーの詳細情報が表示されます。例:

    combiner: OR
    conditions:
    - conditionAbsent:
        aggregations:
        - alignmentPeriod: 60s
          crossSeriesReducer: REDUCE_MEAN
          groupByFields:
          - resource.label.project_id
          - resource.label.location
          - resource.label.cluster_name
          - resource.label.namespace_name
          - resource.label.container_name
          - resource.label.pod_name
          perSeriesAligner: ALIGN_MAX
        duration: 300s
        filter: resource.type = "k8s_container" AND metric.type = "kubernetes.io/anthos/container/uptime"
          AND resource.label."container_name"=monitoring.regex.full_match("kube-apiserver")
        trigger:
          count: 1
      displayName: Anthos cluster API server uptime is absent for 5m
      name: projects/…/alertPolicies/…/conditions/…
    displayName: Anthos cluster API server unavailable (critical)
    enabled: true
    mutationRecord:
      mutateTime: 
      mutatedBy: 
    name: projects/…/alertPolicies/…
    

アラート ポリシーの追加作成

このセクションでは、推奨される一連のアラート ポリシーの説明と構成ファイルについて説明します。

ポリシーを作成するには、上の演習と同じ手順を行います。

  1. 構成ファイルをダウンロードするには、右側の列のリンクをクリックします。

  2. 必要に応じて、特定のニーズに合わせて条件を調整します。たとえば、クラスタのサブセットにフィルタを追加できます。また、ノイズと重要度のバランスを取るためにしきい値を調整することもできます。

  3. ポリシーを作成するには、gcloud alpha monitoring policies create を実行します。

次のスクリプトを使用して、このドキュメントで説明しているすべてのアラート ポリシー サンプルをダウンロードしてインストールできます。

# 1. Create a directory named alert_samples:

mkdir alert_samples && cd alert_samples
declare -a alerts=("apiserver-unavailable.json" "controller-manager-unavailable.json" "scheduler-unavailable.json" \
  "pod-crash-looping.json" "pod-not-ready-1h.json" "container-cpu-usage-high-reaching-limit.json" \
  "container-memory-usage-high-reaching-limit.json" "persistent-volume-usage-high.json" "node-cpu-usage-high.json" \
  "node-disk-usage-high.json" "node-memory-usage-high.json" "node-not-ready-1h.json" "apiserver-error-ratio-high.json" \
  "etcd-leader-changes-or-proposal-failures-frequent.json" "etcd-server-not-in-quorum.yaml" "etcd-storage-usage-high.json")

# 2. Download all alert samples into the alert_samples/ directory:

for x in "${alerts[@]}"
do
  wget https://cloud.google.com/kubernetes-engine/distributed-cloud/bare-metal/docs/samples/${x}
done

# 3. (optional) Uncomment and provide your project ID to set the default project
# for gcloud commands:

# gcloud config set project <PROJECT_ID>

# 4. Create alert policies for each of the downloaded samples:

for x in "${alerts[@]}"
do
  gcloud alpha monitoring policies create --policy-from-file=${x}
done

コントロール プレーン コンポーネントの可用性

アラート名 説明 Cloud Monitoring でのアラート ポリシーの定義
API サーバーが利用不可(重大) API サーバーの稼働時間指標を利用できない apiserver-unavailable.json
スケジューラが利用不可(重大) スケジューラの稼働時間指標を利用できない scheduler-unavailable.json
コントローラ マネージャーが利用不可(重大) コントローラ マネージャーの稼働時間指標を利用できない controller-manager-unavailable.json

コンテナのオーケストレーション

アラート名 説明 Cloud Monitoring でのアラート ポリシーの定義
Pod のクラッシュ ループ(警告) Pod が再起動を繰り返し、クラッシュ ループ状態になっている可能性がある pod-crash-looping.json
Pod が 1 時間以上準備ができていない状態である(重大) Pod の準備ができていない状態が 1 時間以上続いている pod-not-ready-1h.json
コンテナの CPU 使用率が 80% を超えている(警告) コンテナの CPU 使用率が上限の 80% を超えている container-cpu-usage-high-reaching-limit.json
コンテナのメモリ使用量が 85% を超えている(警告) コンテナのメモリ使用量が上限の 85% を超えている container-memory-usage-high-reaching-limit.json
永続ボリュームの使用率が高い(重大) 要求された永続ボリュームの空き容量が 3% 未満 persistent-volume-usage-high.json
ノードの CPU 使用率が 80% を超えている(警告) ノードの CPU 使用率が 5 分間に割り当て可能な合計の 80% を超えている node-cpu-usage-high.json
ノードのディスク使用量が 85% を超えている(警告) ディスク マウント ポイントあたり 10 分間の空き容量が 15% 未満 node-disk-usage-high.json
ノードのメモリ使用量が 80% を超えている(警告) ノードのメモリ使用量が 5 分間で割り当て可能な合計の 80% を超えている node-memory-usage-high.json
Pod が 1 時間以上準備ができていない(重大) ノードの準備ができていない状態が 1 時間以上続いています node-not-ready-1h.json

Kubernetes パフォーマンス

アラート名 説明 Cloud Monitoring でのアラート ポリシーの定義
API サーバーエラー率が 20% を超えている(重大) API サーバーが、15 分間の動詞ごとのすべてのリクエストの 20% 以上に対して 5xx エラーまたは 429 エラーを返す apiserver-error-ratio-high.json
ETCD リーダーの変更またはプロポーザルの失敗の頻度が高すぎる(警告) etcd リーダーの変更またはプロポーザルの失敗が頻繁に発生する etcd-leader-changes-or-proposal-failures-frequent.json
ETCD サーバーがクォーラムに存在しない(重大) etcd サーバーのプロポーザルが 5 分間 commit されないため、クォーラムを失った可能性がある etcd-server-not-in-quorum.yaml
ETCD ストレージが 90% の上限を超えている(警告) etcd のストレージ使用量が上限の 90% を超えている etcd-storage-usage-high.json

PromQL によるアラート ポリシー

アラート ポリシー内のクエリは、MQL ではなく PromQL で表現することもできます。たとえば、API server error ratio exceeds 20 percent (critical) ポリシーの PromQL バージョンをダウンロードできます(apiserver-error-ratio-high-promql.json)。

詳細については、Google Distributed Cloud のドキュメントの Managed Service for Prometheus を使用すると、Cloud Monitoring のドキュメントの PromQL を使用したアラート ポリシーをご覧ください。

通知の取得

アラート ポリシーを作成すると、ポリシーに 1 つ以上の通知チャンネルを定義できます。通知チャンネルには、複数の種類があります。たとえば、メール、Slack チャンネル、モバイルアプリから通知を受け取れます。チャンネルは、ニーズに合わせて選択できます。

通知チャンネルを構成する方法については、通知チャンネルの管理をご覧ください。