前提条件
セルフマネージド Prometheus システムは、ACK マネージドクラスター Pro API サーバーにアクセスでき、/metrics に対する読み取り権限を持っている必要があります。
セルフマネージド Prometheus システムは、クラスター内またはクラスター外にデプロイできます。
ACK マネージドクラスター Pro は、kube-apiserver、etcd、kube-scheduler、kube-controller-manager、cloud-controller-manager などのマネージドコンポーネントのメトリックを公開します。この機能を使用する前に、次のドキュメントを確認して、これらのコンポーネントによって公開されるメトリックとその説明について学習することを推奨します。
または、クラスターで Alibaba Cloud Prometheus モニタリングを使用することもできます。Alibaba Cloud Prometheus は、自動的にデータを監視および収集し、リアルタイムの Grafana ダッシュボードを提供し、監視ジョブのアラートを作成できます。メール、ショートメッセージ、DingTalk などのチャンネルを通じてリアルタイムでアラートを受信できます。
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: '<サービスアカウントベアラートークン>'
結果の検証
セルフマネージド Prometheus システムのコンソールにログインし、Graph ページに移動します。
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 プローブとして使用できます。
次のメトリックを入力し、期待どおりに表示されるか確認します。
apiserver_request_total{job="ack-api-server"}
予期される出力:

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