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

Container Service for Kubernetes:セルフマネージド Prometheus システムを使用してコントロールプレーンコンポーネントのメトリックを収集し、アラートを設定する

最終更新日:Nov 09, 2025

ACK マネージドクラスター Pro は、コントロールプレーンコンポーネントのメトリックを公開し、コンポーネントダッシュボードを提供します。このトピックでは、セルフマネージド Prometheus システムでクラスターのコアコンポーネントのメトリックを収集し、これらのメトリックに基づいてモニタリングとアラートを設定して、セルフマネージドモニタリングシステムと統合する方法について説明します。

前提条件

Prometheus 収集ファイルの設定

セルフマネージド Prometheus システムを使用してコントロールプレーンコンポーネントからメトリックを収集する前に、Prometheus の prometheus.yaml 構成ファイルで対応するメトリック収集ジョブを設定する必要があります。サンプル構成ファイルでは、各コアコンポーネントがジョブ構成に対応しています。構成の詳細については、対応するコアコンポーネントのメトリック説明ドキュメントをご参照ください。

コミュニティ Prometheus の prometheus.yaml の設定方法の詳細については、「Configuration」をご参照ください。
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 ソリューションと ACK マーケットプレイスの ack-prometheus-operator コンポーネントの詳細については、「オープンソース Prometheus モニタリング」をご参照ください。カスタムデータ収集の設定手順については、公式の Prometheus Operator コミュニティの Prometheus Operator ドキュメントをご参照ください。

Prometheus アラートルールの設定

オープンソース Prometheus のアラートを構成する方法の詳細については、「アラートルール」をご参照ください。

クラスター内モニタリング

Prometheus システムが監視対象のクラスター内にデプロイされている場合は、次のセクションを参照して、クラスターのコアコンポーネントのモニタリングとデータ収集を設定してください。

Kube-apiserver

収集可能なメトリックのリストについては、「kube-apiserver コンポーネントのメトリック」をご参照ください。

2023 年 2 月以降に作成されたバージョン 1.20 以降のクラスターの場合、デフォルト名前空間の kubernetes サービスのアクセスパスは、Classic Load Balancer (CLB) 転送から、Elastic Network Interface (ENI) を使用する直接接続アーキテクチャにアップグレードされます。詳細については、「Kube API Server」をご参照ください。この変更後、すべての kube-apiserver レプリカがデータプレーンに表示されます。監視ジョブを設定して、kube-apiserver メトリックを直接収集できます。これにより、より直接的な収集リンクと、より包括的なメトリックカバー率が提供されます。

kubectl get endpoints kubernetes コマンドを実行して、クラスター内の kubernetes サービスのバックエンドリンクタイプを判別できます。

期待される出力を表示するにはクリックします

  • ENI 直接接続アーキテクチャ: 出力には、a.b.c.d:6443,w.x.y.z:6443 のように 2 つ以上の IP アドレスが表示されます。

    NAME         ENDPOINTS                               AGE
    kubernetes   a.b.c.d:6443,w.x.y.z:6443               27h
  • CLB 転送アーキテクチャ: 出力には、a.b.c.d:6443 のように 1 つの IP アドレスのみが表示されます。この IP アドレスは、CLB インスタンスの内部 IP アドレスです。

    NAME         ENDPOINTS                               AGE
    kubernetes   a.b.c.d:6443                            27h

クラスター内の Kubernetes サービスのバックエンドリンクタイプに基づいて、Prometheus 収集構成とアラー​​トルールを選択します。

  • Prometheus 収集構成

    • ENI 直接接続アーキテクチャ

      - job_name: ack-api-server  
        scrape_interval: 30s
        scrape_timeout: 30s
        metrics_path: /metrics
        scheme: https
        #  scheme: https
        honor_labels: true
        honor_timestamps: true
        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]
          separator: ;
          regex: apiserver
          replacement: $1
          action: keep
        - source_labels: [__meta_kubernetes_service_label_provider]
          separator: ;
          regex: kubernetes
          replacement: $1
          action: keep
        - source_labels: [__meta_kubernetes_endpoint_port_name]
          separator: ;
          regex: https
          replacement: $1
          action: keep
        - source_labels: [__meta_kubernetes_namespace]
          separator: ;
          regex: (.*)
          target_label: namespace
          replacement: $1
          action: replace
        - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
          separator: ;
          regex: Node;(.*)
          target_label: node
          replacement: ${1}
          action: replace
        - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
          separator: ;
          regex: Pod;(.*)
          target_label: pod
          replacement: ${1}
          action: replace
        - source_labels: [__meta_kubernetes_service_name]
          separator: ;
          regex: (.*)
          target_label: service
          replacement: $1
          action: replace
        - source_labels: [__meta_kubernetes_service_name]
          separator: ;
          regex: (.*)
          target_label: job
          replacement: ${1}
          action: replace
        - source_labels: [__meta_kubernetes_service_label_component]
          separator: ;
          regex: (.+)
          target_label: job
          replacement: ${1}
          action: replace
        - separator: ;
          regex: (.*)
          target_label: endpoint
          replacement: https
          action: replace
    • CLB 転送アーキテクチャ

      - job_name: ack-api-server  
        scrape_interval: 30s
        scrape_timeout: 30s
        metrics_path: /metrics
        scheme: https
        #  scheme: https
        honor_labels: true
        honor_timestamps: true
        params:
          hosting: ["true"]
          job: ["apiserver"]
        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]
          separator: ;
          regex: apiserver
          replacement: $1
          action: keep
        - source_labels: [__meta_kubernetes_service_label_provider]
          separator: ;
          regex: kubernetes
          replacement: $1
          action: keep
        - source_labels: [__meta_kubernetes_endpoint_port_name]
          separator: ;
          regex: https
          replacement: $1
          action: keep
        - source_labels: [__meta_kubernetes_namespace]
          separator: ;
          regex: (.*)
          target_label: namespace
          replacement: $1
          action: replace
        - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
          separator: ;
          regex: Node;(.*)
          target_label: node
          replacement: ${1}
          action: replace
        - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
          separator: ;
          regex: Pod;(.*)
          target_label: pod
          replacement: ${1}
          action: replace
        - source_labels: [__meta_kubernetes_service_name]
          separator: ;
          regex: (.*)
          target_label: service
          replacement: $1
          action: replace
        - source_labels: [__meta_kubernetes_service_name]
          separator: ;
          regex: (.*)
          target_label: job
          replacement: ${1}
          action: replace
        - source_labels: [__meta_kubernetes_service_label_component]
          separator: ;
          regex: (.+)
          target_label: job
          replacement: ${1}
          action: replace
        - separator: ;
          regex: (.*)
          target_label: endpoint
          replacement: https
          action: replace
  • Prometheus アラートルール

    - alert: AckApiServerWarning
      annotations:
        message:  APIServer is not available in last 5 minutes. Please check the prometheus job and target status.
      expr: |
        (absent(up{job="ack-api-server",pod!=""}) or (count(up{job="ack-api-server",pod!=""}) <= 1)) == 1
      for: 5m
      labels:
        severity: critical

etcd

収集可能なメトリックのリストについては、「etcd コンポーネントのメトリック」をご参照ください。
  • Prometheus 収集構成

    - job_name: ack-etcd 
      scrape_interval: 30s
      scrape_timeout: 30s
      metrics_path: /metrics
      scheme: https
      #  scheme: https
      honor_labels: true
      honor_timestamps: true
      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]
        separator: ;
        regex: apiserver
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_service_label_provider]
        separator: ;
        regex: kubernetes
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_endpoint_port_name]
        separator: ;
        regex: https
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_namespace]
        separator: ;
        regex: (.*)
        target_label: namespace
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
        separator: ;
        regex: Node;(.*)
        target_label: node
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
        separator: ;
        regex: Pod;(.*)
        target_label: pod
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_service_name]
        separator: ;
        regex: (.*)
        target_label: service
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_service_name]
        separator: ;
        regex: (.*)
        target_label: job
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_service_label_component]
        separator: ;
        regex: (.+)
        target_label: job
        replacement: ${1}
        action: replace
      - separator: ;
        regex: (.*)
        target_label: endpoint
        replacement: https
        action: replace
  • Prometheus アラートルール

    - alert: AckETCDWarning
      annotations:
        message: 過去5分間、Etcd クラスタにリーダーがありません。クラスタが過負荷になっているかどうかを確認し、ACK チームに連絡してください。
      expr: |
        sum_over_time(etcd_server_has_leader[5m]) == 0
      for: 5m
      labels:
        severity: critical
    
    
    - alert: AckETCDWarning
      annotations:
        message: Etcd は過去5分間利用できません。Prometheus ジョブとターゲットステータスを確認してください。
      expr: |
        (absent(up{job="ack-etcd",pod!=""}) or (count(up{job="ack-etcd",pod!=""}) <= 2)) == 1
      for: 5m
      labels:
        severity: critical

Kube-scheduler

収集可能なメトリックのリストについては、「kube-scheduler コンポーネントのメトリック」をご参照ください。
  • Prometheus 収集構成

    - job_name: ack-scheduler
      scrape_interval: 30s
      scrape_timeout: 30s
      metrics_path: /metrics
      scheme: https
      #  scheme: https
      honor_labels: true
      honor_timestamps: true
      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]
        separator: ;
        regex: apiserver
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_service_label_provider]
        separator: ;
        regex: kubernetes
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_endpoint_port_name]
        separator: ;
        regex: https
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_namespace]
        separator: ;
        regex: (.*)
        target_label: namespace
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
        separator: ;
        regex: Node;(.*)
        target_label: node
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
        separator: ;
        regex: Pod;(.*)
        target_label: pod
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_service_name]
        separator: ;
        regex: (.*)
        target_label: service
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_service_name]
        separator: ;
        regex: (.*)
        target_label: job
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_service_label_component]
        separator: ;
        regex: (.+)
        target_label: job
        replacement: ${1}
        action: replace
      - separator: ;
        regex: (.*)
        target_label: endpoint
        replacement: https
        action: replace
  • Prometheus アラートルール

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

Kube-controller-manager

収集可能なメトリックのリストについては、「kube-controller-manager コンポーネントのメトリック」をご参照ください。
  • Prometheus 収集構成

    - job_name: ack-kcm
      scrape_interval: 30s
      scrape_timeout: 30s
      metrics_path: /metrics
      scheme: https
      #  scheme: https
      honor_labels: true
      honor_timestamps: true
      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:
        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]
        separator: ;
        regex: apiserver
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_service_label_provider]
        separator: ;
        regex: kubernetes
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_endpoint_port_name]
        separator: ;
        regex: https
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_namespace]
        separator: ;
        regex: (.*)
        target_label: namespace
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
        separator: ;
        regex: Node;(.*)
        target_label: node
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
        separator: ;
        regex: Pod;(.*)
        target_label: pod
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_service_name]
        separator: ;
        regex: (.*)
        target_label: service
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_service_name]
        separator: ;
        regex: (.*)
        target_label: job
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_service_label_component]
        separator: ;
        regex: (.+)
        target_label: job
        replacement: ${1}
        action: replace
      - separator: ;
        regex: (.*)
        target_label: endpoint
        replacement: https
        action: replace
  • Prometheus アラートルール

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

Cloud-controller-manager

収集可能なメトリックのリストについては、「cloud-controller-manager コンポーネントのメトリック」をご参照ください。
  • Prometheus 収集構成

    - job_name: ack-cloud-controller-manager
      scrape_interval: 30s
      scrape_timeout: 30s
      metrics_path: /metrics
      scheme: https
      #  scheme: https
      honor_labels: true
      honor_timestamps: true
      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,
                   insecure_skip_verify: false}
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_label_component]
        separator: ;
        regex: apiserver
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_service_label_provider]
        separator: ;
        regex: kubernetes
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_endpoint_port_name]
        separator: ;
        regex: https
        replacement: $1
        action: keep
      - source_labels: [__meta_kubernetes_namespace]
        separator: ;
        regex: (.*)
        target_label: namespace
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
        separator: ;
        regex: Node;(.*)
        target_label: node
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
        separator: ;
        regex: Pod;(.*)
        target_label: pod
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_service_name]
        separator: ;
        regex: (.*)
        target_label: service
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_service_name]
        separator: ;
        regex: (.*)
        target_label: job
        replacement: ${1}
        action: replace
      - source_labels: [__meta_kubernetes_service_label_component]
        separator: ;
        regex: (.+)
        target_label: job
        replacement: ${1}
        action: replace
      - separator: ;
        regex: (.*)
        target_label: endpoint
        replacement: https
        action: replace
  • Prometheus アラートルール

    - alert: AckCCMWarning
      annotations:
        message: CCM は過去3分間利用できません。Prometheus ジョブとターゲットステータスを確認してください。
      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

外部クラスターのモニタリング

Prometheus システムが監視対象のクラスター外にデプロイされている場合は、Configuration および Monitoring kubernetes with prometheus from outside of k8s cluster を参照して、クラスターのコアコンポーネントのモニタリングとデータ収集を設定してください。主な構成は次のとおりです。

  - job_name: 'out-of-k8s-scrape-job'
    scheme: https
    tls_config:
      ca_file: /etc/prometheus/kubernetes-ca.crt
    bearer_token: '<サービスアカウントベアラートークン>'

    kubernetes_sd_configs:
      - api_server: 'https://<KUBERNETES URL>'
        role: node
        tls_config:
          ca_file: /etc/prometheus/kubernetes-ca.crt
        bearer_token: '<サービスアカウントベアラートークン>'
            

結果の検証

  1. セルフマネージド Prometheus システムのコンソールにログインし、Graph ページに移動します。

  2. up を入力して、すべてのコントロールプレーンコンポーネントのデータが期待どおりに表示されるかどうかを確認します。

    up

    予期される出力:

    自定义

    • up{instance="XX.XX.XX.XX:6443", job="ack-api-server"}: プロキシ Endpoint のステータスです。XX.XX.XX.XX は、クラスターの default 名前空間にある kubernetes サービスの IP アドレスです。この IP アドレスはクラスターによって異なります。

    • up{instance="controlplane-xyz", job="ack-api-server", pod="controlplane-xyz"}: コントロールプレーン Pod のステータスです。この up メトリックは、コントロールプレーン Pod の liveness プローブとして使用できます。

  3. 次のメトリックを入力し、期待どおりに表示されるか確認します。

    apiserver_request_total{job="ack-api-server"}

    予期される出力:

    显示2

    クエリされたメトリックとデータがページに表示された場合、セルフマネージド Prometheus システムはコアコンポーネントのメトリックを収集できます。