このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
Kubernetes コントロールプレーンはプロメテウス 形式
生のメトリクス出力を表示するには次のコマンドを実行してください。
kubectl get --raw
endpoint
このコマンドを使用すると、任意のエンドポイントパスを渡して未加工のレスポンスを返すことができます。出力にはさまざまなメトリクスが行ごとにリストされ、各行にはメトリクス名、タグ、および値が含まれます。
metric_name{tag="value"[,...]} value
API サーバーからメトリクスを取得する
一般的な API サーバーエンドポイントはアマゾン EKS コントロールプレーンで公開されます。このエンドポイントは主に特定のメトリクスを調べる際に役立ちます。
kubectl get --raw /metrics
出力例は次のとおりです。
[...]
# HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host.
# TYPE rest_client_requests_total counter
rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994
rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1
rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06
rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173
rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2
rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3
rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8
# HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts
# TYPE ssh_tunnel_open_count counter
ssh_tunnel_open_count 0
# HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts
# TYPE ssh_tunnel_open_fail_count counter
ssh_tunnel_open_fail_count 0
この未加工出力はAPI サーバーが公開する内容をそのまま返します。
metrics.eks.amazonaws.com
を使用してコントロールプレーンのメトリクスを取得する
Kubernetes バージョン 1.28
以降の新しいクラスターの場合、アマゾン EKS は API グループ metrics.eks.amazonaws.com
のメトリクスも公開します。これらのメトリクスにはkube-scheduler
や kube-controller-manager
などのコントロールプレーンコンポーネントが含まれます。
注記
クラスターに新しい APIService
リソース v1.metrics.eks.amazonaws.com
の作成をブロックするウェブフック設定がある場合、メトリクスエンドポイント機能が使用できない可能性があります。v1.metrics.eks.amazonaws.com
キーワードを検索することで、kube-apiserver
監査ログで確認することができます。
kube-scheduler
メトリクスを取得する
kube-scheduler
メトリクスを取得するには次のコマンドを使用します。
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"
出力例は次のとおりです。
# TYPE scheduler_pending_pods gauge
scheduler_pending_pods{queue="active"} 0
scheduler_pending_pods{queue="backoff"} 0
scheduler_pending_pods{queue="gated"} 0
scheduler_pending_pods{queue="unschedulable"} 18
# HELP scheduler_pod_scheduling_attempts [STABLE] Number of attempts to successfully schedule a pod.
# TYPE scheduler_pod_scheduling_attempts histogram
scheduler_pod_scheduling_attempts_bucket{le="1"} 79
scheduler_pod_scheduling_attempts_bucket{le="2"} 79
scheduler_pod_scheduling_attempts_bucket{le="4"} 79
scheduler_pod_scheduling_attempts_bucket{le="8"} 79
scheduler_pod_scheduling_attempts_bucket{le="16"} 79
scheduler_pod_scheduling_attempts_bucket{le="+Inf"} 81
[...]
kube-controller-manager
メトリクスを取得する
kube-controller-manager
メトリクスを取得するには次のコマンドを使用します。
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"
出力例は次のとおりです。
[...]
workqueue_work_duration_seconds_sum{name="pvprotection"} 0
workqueue_work_duration_seconds_count{name="pvprotection"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-08"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-07"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-06"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-06"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-05"} 19
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.001"} 109
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.01"} 139
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.1"} 181
workqueue_work_duration_seconds_bucket{name="replicaset",le="1"} 191
workqueue_work_duration_seconds_bucket{name="replicaset",le="10"} 191
workqueue_work_duration_seconds_bucket{name="replicaset",le="+Inf"} 191
workqueue_work_duration_seconds_sum{name="replicaset"} 4.265655885000002
[...]
スケジューラーとコントローラーマネージャーのメトリクスを理解します
Prometheus スタイルスクレイピングに使用できるスケジューラーとコントローラーマネージャーのメトリクスを次の表に示します。これらのメトリクスの詳細についてはKubernetes ドキュメントの「Kubernetes メトリクス・レファレンス
メトリクス | コントロールプレーンのコンポーネント | 説明 |
---|---|---|
scheduler_pending_pods |
スケジューラ |
実行のためにノードにスケジュールされるのを待っているポッドの数です。 |
scheduler_schedule_attempts_total |
スケジューラ |
ポッドのスケジュールの試行回数です。 |
scheduler_preemption_attempts_total |
スケジューラ |
優先度の低いポッドをエビクションさせて、優先度の高いポッドをスケジュールするためにスケジューラーによって実行された試行回数です。 |
scheduler_preemption_victims |
スケジューラ |
優先順位の高いポッドのスペースを確保するためにエビクション対象として選択されたポッドの数です。 |
scheduler_pod_scheduling_attempts |
スケジューラ |
ポッドの正常なスケジュールの試行回数です。 |
scheduler_scheduling_attempt_duration_seconds |
スケジューラ |
リソースの可用性やスケジューリングルールなどのさまざまな要因に基づいて、スケジューラーがポッドを実行するのに適した場所をどの程度迅速に見つけることができるかを示します。 |
scheduler_pod_scheduling_sli_duration_seconds |
スケジューラ |
ポッドがスケジューリングキューに入る時点からの、スケジュールされているポッドのエンドツーエンドのレイテンシーです。これには複数のスケジューリング試行が含まれる場合があります。 |
kube_pod_resource_request |
スケジューラ |
クラスター上のワークロードによってリクエストされ、ポッド別に分類されたリソースです。これはスケジューラーと kubelet がリソースのポッドごとに想定するリソースの使用状況と、リソースの単位がある場合はそれを示します。 |
kube_pod_resource_limit |
スケジューラ |
ポッド別に分類された、クラスター上のワークロードのリソース制限。これはスケジューラーと kubelet がリソースのポッドごとに想定するリソースの使用状況と、リソースの単位がある場合はそれを示します。 |
cronjob_controller_job_creation_skew_duration_seconds |
コントローラーマネージャー |
cronjob の実行がスケジュールされてから、対応するジョブが作成されるまでの時間です。 |
workqueue_depth |
コントローラーマネージャー |
現在のキューの深さです。 |
workqueue_adds_total |
コントローラーマネージャー |
ワークキューが処理する合計追加数。 |
workqueue_queue_duration_seconds |
コントローラーマネージャー |
項目がリクエストされる前にワークキューに留まる時間 (秒)です。 |
workqueue_work_duration_seconds |
コントローラーマネージャー |
ワークキューからの項目の処理にかかる時間 (秒)です。 |
プロメテウス スクレイパーをデプロイしてメトリクスを一貫してスクレイピングする
プロメテウス スクレイパーをデプロイしてメトリクスを一貫してスクレイピングするには次の設定を使用します:
---
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-conf
data:
prometheus.yml: |-
global:
scrape_interval: 30s
scrape_configs:
# apiserver metrics
- job_name: apiserver-metrics
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels:
[
__meta_kubernetes_namespace,
__meta_kubernetes_service_name,
__meta_kubernetes_endpoint_port_name,
]
action: keep
regex: default;kubernetes;https
# Scheduler metrics
- job_name: 'ksh-metrics'
kubernetes_sd_configs:
- role: endpoints
metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels:
[
__meta_kubernetes_namespace,
__meta_kubernetes_service_name,
__meta_kubernetes_endpoint_port_name,
]
action: keep
regex: default;kubernetes;https
# Controller Manager metrics
- job_name: 'kcm-metrics'
kubernetes_sd_configs:
- role: endpoints
metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels:
[
__meta_kubernetes_namespace,
__meta_kubernetes_service_name,
__meta_kubernetes_endpoint_port_name,
]
action: keep
regex: default;kubernetes;https
---
apiVersion: v1
kind: Pod
metadata:
name: prom-pod
spec:
containers:
- name: prom-container
image: prom/prometheus
ports:
- containerPort: 9090
volumeMounts:
- name: config-volume
mountPath: /etc/prometheus/
volumes:
- name: config-volume
configMap:
name: prometheus-conf
ポッドが新しいメトリクスエンドポイントにアクセスするには次の許可が必要です。
{
"effect": "allow",
"apiGroups": [
"metrics.eks.amazonaws.com"
],
"resources": [
"kcm/metrics",
"ksh/metrics"
],
"verbs": [
"get"
] },
使用中のロールにパッチを適用するには次のコマンドを使用できます。
kubectl patch clusterrole <role-name> --type=json -p='[
{
"op": "add",
"path": "/rules/-",
"value": {
"verbs": ["get"],
"apiGroups": ["metrics.eks.amazonaws.com"],
"resources": ["kcm/metrics", "ksh/metrics"]
}
}
]'
その後、Prometheus スクレイパーのポートをローカルポートにプロキシすることで、Prometheus ダッシュボードが表示できます。
kubectl port-forward pods/prom-pod 9090:9090
アマゾン EKS クラスターの場合、コア Kubernetes コントロールプレーンメトリクスも AWS/EKS
名前空間の アマゾン CloudWatch メトリクスに取り込まれます。これらを表示するにはCloudWatch コンソールAWS/EKS
名前空間とメトリクスディメンションを選択してください。