すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:セルフマネージド Prometheus による ACK Pro コントロールプレーンコンポーネントのモニタリング

最終更新日:Jun 19, 2026

セルフマネージド Prometheus を設定して ACK Pro コントロールプレーンのメトリクスをスクレイプし、アラートルールを定義して、設定を検証します。

スクレイプ設定の管理を避けるには、Alibaba Cloud Managed Service for Prometheus を使用してください。メトリクスを自動的に収集し、リアルタイムの Grafana ダッシュボードを提供し、メール、SMS、DingTalk でアラートを送信します。

前提条件

開始する前に、次の項目を満たしていることを確認してください:

  • ACK Pro クラスターの API サーバーにアクセスできるセルフマネージド Prometheus インスタンス。

  • API サーバーの /metrics パスに対する読み取り権限。

  • クラスター内またはクラスター外にデプロイされた Prometheus インスタンス。

ACK Pro マネージドクラスターは、次のコントロールプレーンコンポーネントのメトリクスを公開します:

コンポーネント メトリクスの参照
kube-apiserver kube-apiserver のメトリクス
etcd etcd のメトリクス
kube-scheduler kube-scheduler のメトリクス
kube-controller-manager kube-controller-manager のメトリクス
cloud-controller-manager cloud-controller-manager のメトリクス

手順 1:Prometheus スクレイプジョブの追加

各コントロールプレーンコンポーネントに対して、prometheus.yaml にスクレイプジョブを追加します。 デフォルトのグローバル間隔は 15s です。各コンポーネントのジョブでは、API サーバーの負荷を軽減するために 30s を使用します。

Prometheus 設定ドキュメントでは、prometheus.yaml の構文全体を確認できます。

global:
  scrape_interval:     15s # デフォルトでは、15 秒ごとにターゲットをスクレイプします。

  # 外部システム (フェデレーション、リモートストレージ、Alertmanager) と通信する際に、
  # すべての時系列またはアラートにこれらのラベルを付与します。
  external_labels:
    monitor: 'codelab-monitor'

# スクレイプするエンドポイントを 1 つだけ含むスクレイプ設定:
# ここでは Prometheus 自身です。
scrape_configs:
  # ジョブ名は、この設定からスクレイプされた任意の時系列にラベル `job=<job_name>` として追加されます。
  - job_name: ack-api-server
    ......

  - job_name: ack-etcd
    ......

  - job_name: ack-scheduler
    ......

以降のセクションでは、各コンポーネントのスクレイプ設定とアラートルールを示します。Prometheus Operator パターンを使用して Prometheus をデプロイする場合は、ACK App Marketplace の ack-prometheus-operator アドオンのドキュメントと、カスタムスクレイプ設定に関する Prometheus Operator コミュニティドキュメントをご参照ください。

手順 2:クラスター内モニタリングの設定

セルフマネージド Prometheus がクラスター内で実行されている場合は、各スクレイプジョブを API サーバー経由でプロキシとしてルーティングします。

クラスターのネットワークアーキテクチャの特定

クラスターが Elastic Network Interface (ENI) のダイレクト接続を使用しているか、Classic Load Balancer (CLB) の転送を使用しているかを確認します:

kubectl get endpoints kubernetes
  • ENI ダイレクト接続:出力に 10.0.0.1:6443, 10.0.0.2:6443 のように 2 つ以上の IP アドレスが表示されます。 Prometheus は各 API サーバーのレプリカに直接接続します。

  • CLB 転送:出力に単一の IP アドレス (CLB の内部 IP) が表示されます。 すべてのトラフィックはロードバランサー経由でルーティングされます。

以下で各スクレイプジョブを設定する際は、この結果に基づいて適切な Endpoints を使用してください。

kube-apiserver

API サーバーは、すべてのコントロールプレーンメトリクスのエントリポイントです。他のコンポーネントのジョブは、プロキシとして API サーバー経由でルーティングされます。

スクレイプ設定:

- job_name: ack-api-server
  scrape_interval: 30s
  scrape_timeout: 30s
  metrics_path: /metrics
  scheme: https
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_service_label_provider]
      action: keep
      regex: kubernetes
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https

推奨アラートルール:

- alert: AckApiServerWarning
  expr: (absent(up{job="ack-api-server",pod!=""}) or (count(up{job="ack-api-server",pod!=""}) <= 1)) == 1
  for: 5m
  labels:
    severity: critical
  annotations:
    message: "APIServer が利用できません。Prometheus のジョブとターゲットのステータスを確認してください。"

pod!="" フィルターは、サービスレベルのエンドポイントを除外し、実際のコントロールプレーン Pod を対象にします。 <= 1 のしきい値は、正常な API サーバーのレプリカが 1 つ以下の場合にトリガーされ、高可用性が低下していることを示します。for: 5m 句により、短時間の再起動による誤検知を防止します。

etcd

API サーバープロキシを介して etcd メトリクスを収集します。honor_labels: true 設定により、プロキシの元のコンポーネントラベルが保持されます。

スクレイプ設定:

- job_name: ack-etcd
  scrape_interval: 30s
  scrape_timeout: 30s
  metrics_path: /metrics
  scheme: https
  params:
    hosting: ["true"]
    job: ["etcd"]
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    insecure_skip_verify: false
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    server_name: kubernetes
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_service_label_provider]
      action: keep
      regex: kubernetes
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https

推奨アラートルール:

- alert: AckETCDLeaderMissing
  expr: sum_over_time(etcd_server_has_leader[5m]) == 0
  for: 5m
  labels:
    severity: critical
  annotations:
    message: "過去 5 分間、etcd クラスターにリーダーが存在しません。クラスターが過負荷になっていないか確認してください。"

- alert: AckETCDDown
  expr: (absent(up{job="ack-etcd",pod!=""}) or (count(up{job="ack-etcd",pod!=""}) <= 2)) == 1
  for: 5m
  labels:
    severity: critical
  annotations:
    message: "Etcd が利用できません。Prometheus のジョブとターゲットのステータスを確認してください。"

AckETCDLeaderMissing は、5 分間にわたって etcd リーダーが選出されない場合に発火し、スプリットブレインまたは過負荷のクラスターを示します。AckETCDDown は、etcd がコンセンサスに達するには少なくとも 3 つのメンバーからなるクォーラムが必要であり、メンバーが 2 つ以下ではコンセンサスに達することができないため、しきい値として <= 2 ではなく <= 0 を使用します。

kube-scheduler

スケジューラーのヘルスとスケジューリングレイテンシを監視します。

スクレイプ設定:

- job_name: ack-scheduler
  scrape_interval: 30s
  scheme: https
  params:
    hosting: ["true"]
    job: ["ack-scheduler"]
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    insecure_skip_verify: false
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    server_name: kubernetes
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https

推奨アラートルール:

- alert: AckSchedulerWarning
  expr: (absent(up{job="ack-scheduler",pod!=""}) or (count(up{job="ack-scheduler",pod!=""}) <= 0)) == 1
  for: 3m
  labels:
    severity: critical
  annotations:
    message: "Scheduler が利用できません。Prometheus のジョブとターゲットのステータスを確認してください。"

for: 3m の期間が API サーバーおよび etcd のアラートより短いのは、スケジューラーの停止が新しい Pod のスケジューリングを直接ブロックするため、より迅速な検知が必要だからです。

kube-controller-manager (KCM)

ノード、Namespace、Deployment など、Kubernetes のコアオブジェクトに対するコントローラーを監視します。

スクレイプ設定:

- job_name: ack-kcm
  scrape_interval: 30s
  scheme: https
  params:
    hosting: ["true"]
    job: ["ack-kube-controller-manager"]
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    server_name: kubernetes
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https

推奨アラートルール:

- alert: AckKCMWarning
  expr: (absent(up{job="ack-kcm",pod!=""}) or (count(up{job="ack-kcm",pod!=""}) <= 0)) == 1
  for: 3m
  labels:
    severity: critical
  annotations:
    message: "KCM が利用できません。Prometheus のジョブとターゲットのステータスを確認してください。"

cloud-controller-manager (CCM)

クラスターを Alibaba Cloud インフラストラクチャと統合する CCM を監視します。このジョブでは、他のコンポーネントで使用する authorization.credentials_file ではなく、認可に bearer_token_file を使用します。

スクレイプ設定:

- job_name: ack-cloud-controller-manager
  scrape_interval: 30s
  scheme: https
  params:
    hosting: ["true"]
    job: ["ack-cloud-controller-manager"]
  kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names: [default]
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    server_name: kubernetes
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_label_component]
      action: keep
      regex: apiserver
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      action: keep
      regex: https

推奨アラートルール:

- alert: AckCCMWarning
  expr: (absent(up{job="ack-cloud-controller-manager",pod!=""}) or (count(up{job="ack-cloud-controller-manager",pod!=""}) <= 0)) == 1
  for: 3m
  labels:
    severity: critical
  annotations:
    message: "CCM が利用できません。Prometheus のジョブとターゲットのステータスを確認してください。"

pod!="" フィルターにより、有効なコントロールプレーン Pod のみがアラート対象となり、短時間のネットワーク中断やローリング再起動中の誤検知を回避できます。

手順 3:Prometheus アラートルールの設定

Prometheus アラートルールのドキュメントでは、構文および forkeep_firing_for 句などの高度なオプションについて説明しています。

設定の検証

Prometheus がすべてのコンポーネントを正常にスクレイプできていることを確認します。 Prometheus がターゲットクラスターの外部で実行されている場合は、kubernetes_sd_configs と api_server エンドポイント、bearer_token、および tls_config を使用してクラスターの API サーバーに対して認証する、クラスター外スクレイプジョブを設定します。詳細については、「Prometheus コミュニティドキュメント」をご参照ください。

  1. Prometheus コンソールにログインし、[Graph] ページに移動します。

  2. up クエリを実行します。up{job="ack-api-server"} と、他のすべてのコンポーネントジョブが 1 を返すことを確認します。

  3. apiserver_request_total などのコンポーネント固有のクエリを実行し、時系列データが正しく反映されていることを確認します。