【Nightingale Monitoring】Kubernetesコンポーネントのインジケーターを管理する

【Nightingale Monitoring】Kubernetesコンポーネントのインジケーターを管理する

始める前に

Kubernetes はシンプルでありながら複雑なシステムです。シンプルさは、全体的なアーキテクチャが比較的シンプルで明確であるという事実にあります。これは、次のような標準的なマスター スレーブ モードです。

しかし、それは複雑なシステムです。上の図に示すように、マスターとスレーブは両方とも複数のコンポーネントで構成されています。

  1. マスターコンポーネント
  1. apiserver: 認証、承認、アクセス制御、API 登録および検出などを担当する API エントリ。
  2. スケジューラ: リソースのスケジュールを担当します。
  3. controller-manager: クラスターのステータスを維持します。
  1. スレーブコンポーネント。
  2. Kubelet: コンテナのライフサイクル、CSI 管理、CNI 管理を維持します。

  3. kube-proxy: サービス検出と負荷分散を担当します。

  4. コンテナランタイム(docker、containerdなど):イメージ管理、コンテナ操作、CRI管理など。

  5. データベース コンポーネント。

  6. Etcd: クラスターのステータスを保存し、apiserver との通信を維持します。

このような複雑でシンプルなシステムの場合、主に以下の領域を含む広範囲にわたる領域をカバーしているため、内部の動作状態を常に追跡することは非常に困難です。

  1. オペレーティング システム レベル: Kubernetes はオペレーティング システムにデプロイされるため、オペレーティング システム レベルでの監視が非常に重要です。
  2. Kubernetes 自体: Kubernetes には多数のコンポーネントが含まれており、これらのコンポーネントの実行状態はクラスター全体の安定性に関係します。
  3. Kubernetes 上のアプリケーション: Kubernetes はアプリケーションの動作環境を提供します。エンタープライズ アプリケーション システムはクラスターに展開され、これらのアプリケーションの安定性はエンタープライズの発展に関係します。
  4. ネットワーク、コンピューター ルーム、キャビネットなど、その他の基礎となる柱もあります。

監視すべき項目は多く、SLI も多数あります。ただし、この記事では Kubernetes 自体の監視についてのみ説明し、Nightingale システムで監視する方法のみを説明します。

Kubernetes 自体の主な焦点は、次のようにシステム コンポーネントの監視にあります。

!! Ps: ここでは Nightingale Monitoring のインストール方法については紹介しません。よくわからない場合は、「【Nightingale Monitoring】初めてのNightingale入門」という記事を読んでみてください。この実験でもこの記事のインストール方法を使用します。

KubeApiサーバー

ApiServer は Kubernetes アーキテクチャの中核であり、すべての API のエントリ ポイントです。すべてのシステムコンポーネントを直列に接続します。

ApiServer の監視と管理を容易にするために、設計者は ApiServer 用の一連のインジケーター データを公開しました。クラスターをデプロイすると、デフォルトでは、ApiServer のアドレスであるデフォルトの名前空間に kubernetes という名前のサービスが作成されます。

 # kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 309d

curl -s -k -H "Authorization: Bearer $token" https://10.96.0.1:6443/metrics を使用してメトリックを表示できます。 $token は、クラスター内に ServerAccount を作成し、対応する権限を付与することによって取得されます。

したがって、ApiServer を監視し、対応するインジケーターを収集するには、最初に承認する必要があります。これを行うには、まず認証情報を準備します。

名前空間を作成する

kubectl create ns flashcat

認証および承認情報を作成する

次の内容を含む 0-apiserver-auth.yaml ファイルを作成します。

 --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: categraf rules: - apiGroups: [""] resources: - nodes - nodes/metrics - nodes/stats - nodes/proxy - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: - extensions - networking.k8s.io resources: - ingresses verbs: ["get", "list", "watch"] - nonResourceURLs: ["/metrics", "/metrics/cadvisor"] verbs: ["get"] --- apiVersion: v1 kind: ServiceAccount metadata: name: categraf namespace: flashcat --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: categraf roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: categraf subjects: - kind: ServiceAccount name: categraf namespace: flashcat

上記の内容は主に、categorf に関連リソースを照会する権限を付与し、これらのコンポーネントのインジケーター データを取得できるようにします。

インデックスコレクション

指標を収集する方法は多数あります。自動検出を通じて収集することをお勧めします。このように、コンポーネントのスケーリングや変更に関係なく、監視方法を再度調整する必要はありません。

Nightingale はインジケーターの取得に Prometheus Agent をサポートしており、Prometheus はサービス検出に非常に優れているため、ここではPrometheus Agentを使用して ApiServer インジケーターを収集します。

(1)Prometheusの設定を作成する

apiVersion: v1 kind: ConfigMap metadata: name: prometheus-agent-conf labels: name: prometheus-agent-conf namespace: flashcat data: prometheus.yml: |- global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'apiserver' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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 remote_write: - url: 'http://192.168.205.143:17000/prometheus/v1/write'

上記の内容は主にエンドポイントを使用して、デフォルトの名前空間で kubernetes というサービスとポート https をアクティブに検出し、取得した監視インジケーターを Nightingale サーバー http://192.168.205.143:17000/prometheus/v1/write (このアドレスは実際の状況に応じて調整する必要があります) に送信します。

(2)Prometheusエージェントのデプロイ

apiVersion: apps/v1 kind: Deployment metadata: name: prometheus-agent namespace: flashcat labels: app: prometheus-agent spec: replicas: 1 selector: matchLabels: app: prometheus-agent template: metadata: labels: app: prometheus-agent spec: serviceAccountName: categraf containers: - name: prometheus image: prom/prometheus args: - "--config.file=/etc/prometheus/prometheus.yml" - "--web.enable-lifecycle" - "--enable-feature=agent" ports: - containerPort: 9090 resources: requests: cpu: 500m memory: 500M limits: cpu: 1 memory: 1Gi volumeMounts: - name: prometheus-config-volume mountPath: /etc/prometheus/ - name: prometheus-storage-volume mountPath: /prometheus/ volumes: - name: prometheus-config-volume configMap: defaultMode: 420 name: prometheus-agent-conf - name: prometheus-storage-volume emptyDir: {}

--enable-feature=agent はエージェント モードが開始されていることを示します。

次に、上記のすべての YAML ファイルを Kubernetes にデプロイし、Prometheus エージェントが正常かどうかを確認します。

 # kubectl get po -n flashcat NAME READY STATUS RESTARTS AGE prometheus-agent-78c8ccc4f5-g25st 1/1 Running 0 92s

その後、Nightingale UI に移動して、対応するインジケーターを表示できます。

インジケーター データを取得した後の次のステップは、インジケーターを合理的に使用して、パネルの構築やアラームの処理などの他のアクションを実行することです。

たとえば、Nightingale Categraf は ApiServer ダッシュボード (https://github.com/flashcatcloud/categraf/blob/main/k8s/apiserver-dash.json) を提供しており、これは次のようにインポートされます。

ただし、パネルを作成する場合でもアラームを作成する場合でも、まず ApiServer のインジケーターを明確に理解する必要があります。

以下に簡単な手配をいくつか示します。

指標の紹介

以下の指標は、Alibaba Cloud ACK の公式ドキュメントからのものです。かなり包括的かつ詳細だと思いますので、一部だけ掲載します。さらに詳しく知りたい場合は、公式ウェブサイトをご覧ください。

指標一覧

索引

タイプ

説明する

apiserver_request_duration_seconds_bucket

ヒストグラム

このインジケーターは、APIServer クライアントから APIServer へのアクセス遅延をカウントするために使用されます。 APIServer へのさまざまなリクエストのレイテンシ分散。リクエストのディメンションには、動詞、グループ、バージョン、リソース、サブリソース、スコープ、コンポーネント、クライアントが含まれます。

ヒストグラム バケットのしきい値は次のとおりです: **{0.05、0.1、0.15、0.2、0.25、0.3、0.35、0.4、0.45、0.5、0.6、0.7、0.8、0.9、1.0、1.25、1.5、1.75、2.0、2.5、3.0、3.5、4.0、4.5、5、6、7、8、9、10、15、20、25、30、40、50、60}**、単位: 秒。



apiserver_リクエスト合計

カウンタ

APIServer への一意のリクエストの数。リクエストのディメンションには、動詞、グループ、バージョン、リソース、スコープ、コンポーネント、HTTP コンテンツ タイプ、HTTP コード、クライアントが含まれます。

apiserver_request_no_resourceversion_list_total

カウンタ

リクエストパラメータに ResourceVersion が設定されていない APIServer への LIST リクエストの数。リクエストのディメンションには、グループ、バージョン、リソース、スコープ、クライアントが含まれます。これは、クォーラム読み取りタイプの LIST 要求の状況を評価し、クォーラム読み取りタイプの LIST と対応するクライアントが多すぎるかどうかを調べて、クライアント要求の動作を最適化するために使用されます。

apiserver_現在の飛行中のリクエスト

ゲージ

APIServer によって現在処理されているリクエストの数。 ReadOnly と Mutating の 2 つのタイプがあります。

apiserver_dropped_requests_total

カウンタ

現在の制限によって破棄されたリクエストの数。 HTTP 応答値は **429 '後でもう一度お試しください'** です。

apiserver_admission_controller_admission_duration_seconds_bucket

ゲージ

アドミッション コントローラーの処理遅延。タグには、アドミッション コントローラ名、操作 (CREATE、UPDATE、CONNECT など)、API リソース、操作タイプ (検証または承認)、および要求が拒否されたかどうか (true または false) が含まれます。

バケットしきい値は、秒単位で **{0.005、0.025、0.1、0.5、2.5}** です。



apiserver_admission_webhook_admission_duration_seconds_bucket

ゲージ

アドミッションWebhookの処理遅延。タグには、アドミッション コントローラ名、操作 (CREATE、UPDATE、CONNECT など)、API リソース、操作タイプ (検証または承認)、および要求が拒否されたかどうか (true または false) が含まれます。

バケットしきい値は、秒単位で **{0.005、0.025、0.1、0.5、2.5}** です。



apiserver_admission_webhook_admission_duration_seconds_count

カウンタ

アドミッション Webhook によって処理されたリクエストの統計。タグには、アドミッション コントローラ名、操作 (CREATE、UPDATE、CONNECT など)、API リソース、操作タイプ (検証または承認)、および要求が拒否されたかどうか (true または false) が含まれます。

CPU使用率コア

ゲージ

CPU 使用率、単位: コア。

CPU使用率

ゲージ

CPU 使用率 = CPU 使用率 / メモリ リソースの上限 (パーセンテージ形式)。

メモリ使用バイト

ゲージ

メモリ使用量、単位: バイト。

メモリ使用率

ゲージ

メモリ使用量 = メモリ使用量 / メモリ リソースの上限 (パーセント形式)。


ゲージ

サービスの可用性。

  • 1: サービスが利用可能であることを示します。
  • 0: サービスが利用できないことを示します。

主要な指標

名前

プロムQL

例示する

API の QPS

合計(irate(apiserver_request_total[$interval]))

APIServer の合計 QPS。

読み取り要求成功率

sum(irate(apiserver_request_total{code=~"20.*",verb=~"GET|LIST"}[間隔]))

APIServer 読み取りリクエストの成功率。

書き込み要求成功率

sum(irate(apiserver_request_total{code=~"20.*",verb!~"GET|LIST|WATCH|CONNECT"}[間隔]))

APIServer 書き込みリクエストの成功率。

処理中の読み取り要求の数

合計(apiserver_current_inflight_requests{requestKind="readOnly"})

APIServer によって現在処理されている読み取り要求の数。

処理中の書き込み要求の数

合計(apiserver_current_inflight_requests{requestKind="mutating"})

APIServer によって現在処理されている書き込み要求の数。

リクエストレート制限

合計(irate(apiserver_dropped_requests_total[$interval]))

リクエスト レートが低下しました。

リソース指標

名前

プロムQL

例示する

メモリ使用量

メモリ使用率バイト{cnotallow="kube-apiserver"}

APIServer のメモリ使用量、単位: バイト。

CPU使用率

CPU 使用率コア{cnotallow="kube-apiserver"}*1000

CPU 使用率、単位: コア。

メモリ使用量

メモリ使用率{cnotallow="kube-apiserver"}

APIServer のメモリ使用量 (パーセンテージ)。

CPU使用率

CPU 使用率{cnotallow="kube-apiserver"}

APIServer の CPU 使用率 (パーセンテージ)。

リソースオブジェクトの数



  • (リソース)(apiserver_storage_objects) による最大値。
  • (リソース)(etcd_object_counts) による最大値 | Kubernetes によって管理されるリソースの数。バージョンによって名前が異なる場合があります。 |

QPS とレイテンシー

名前

プロムQL

例示する

動詞次元によるQPSの分析

sum(irate(apiserver_request_total{verb=~"verb"}[interval]))by(verb)

Verb ディメンションごとに、単位時間 (1 秒) 内のリクエスト QPS をカウントします。

動詞+リソースディメンションによるQPSの分析

合計(irate(apiserver_request_total{verb=~"resource"}[$interval]))by(verb,resource)

Verb+Resource ディメンションに基づいて、単位時間 (1 秒) 内のリクエスト QPS がカウントされます。

動詞ディメンションによるリクエストレイテンシの分析

histogram_quantile(interval])) (le,verb)) による

動詞ディメンション別にリクエストのレイテンシを分析します。

動詞+リソースディメンションによるリクエストレイテンシの分析

histogram_quantile(interval])) (le,verb,resource) による

動詞 + リソース ディメンション別にリクエストのレイテンシを分析します。

2xx 以外の戻り値を持つ読み取り要求 QPS

sum(irate(apiserver_request_total{verb=~"GET|LIST",resource=~"resource",code!~"2.*"}[interval])) by (verb,resource,code)

2xx 以外の戻り値を持つ読み取り要求 QPS の統計。

2xx 以外の戻り値の書き込み要求 QPS

sum(irate(apiserver_request_total{verb!~"GET|LIST|WATCH",verb=~"resource",code!~"2.*"}[$interval])) by (verb,resource,code)

2xx 以外の戻り値を持つ書き込み要求 QPS の統計。

Kube コントローラー マネージャー

ControllerManager も Kubernetes の重要なコンポーネントです。クラスター全体のリソースの制御と管理を担当します。 NodeController、JobController など、多くのコントローラーがあります。

ControllerManager の監視の考え方は ApiServer と同じで、どちらもデータ収集に Prometheus Agent を使用します。

インデックスコレクション

ControllerManager は、10257 の /metrics インターフェースを通じてメトリックを収集します。このインターフェースにアクセスするには、対応する権限も必要です。ただし、ApiServer を収集するときに対応する権限を作成しているため、ここで作成する必要はありません。

(1)Prometheusの設定を追加します。次のように、ControllerManager を収集するためのジョブを元の Prometheus コレクション構成に追加します。

 apiVersion: v1 kind: ConfigMap metadata: name: prometheus-agent-conf labels: name: prometheus-agent-conf namespace: flashcat data: prometheus.yml: |- global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'apiserver' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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 - job_name: 'controller-manager' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-controller-manager;https-metrics remote_write: - url: 'http://192.168.205.143:17000/prometheus/v1/write'

クラスター内に対応するエンドポイントがないため、次のように作成する必要があります。

 apiVersion: v1 kind: Service metadata: annotations: labels: k8s-app: kube-controller-manager name: kube-controller-manager namespace: kube-system spec: clusterIP: None ports: - name: https-metrics port: 10257 protocol: TCP targetPort: 10257 selector: component: kube-controller-manager sessionAffinity: None type: ClusterIP

Kubernetes で YAML リソースを更新し、curl -X POST "http://<PROMETHEUS_IP>:9090/-/reload" を使用して Prometheus をリロードします。

ただし、現在、ControllerManager のインジケーター データを取得できません。 ControllerManager のバインド アドレスを 0.0.0.0 に変更する必要があります。

その後、Nightingale UI でメトリックを表示できます。

次に、https://github.com/flashcatcloud/categraf/blob/main/k8s/cm-dash.json からデータ ディスクをインポートできます。

指標の紹介

指標一覧

索引

タイプ

例示する

ワークキュー追加合計

カウンタ

ワークキューによって処理された追加イベントの数。

ワークキューの深さ

ゲージ

ワークキューの現在のキューの深さ。

ワークキューのキュー継続時間秒数バケット

ヒストグラム

タスクがワークキュー内に存在する時間の長さ。

メモリ使用バイト

ゲージ

メモリ使用量、単位: バイト。

メモリ使用率

ゲージ

メモリ使用量 = メモリ使用量 / メモリ リソースの上限 (パーセント形式)。

CPU使用率コア

ゲージ

CPU 使用率、単位: コア。

CPU使用率

ゲージ

CPU 使用率 = CPU 使用率 / メモリ リソースの上限 (パーセンテージ形式)。

残りクライアントリクエスト合計

カウンタ

ステータス コード、メソッド、ホストの次元から HTTP リクエストの数を分析します。

残りクライアントリクエスト期間秒数バケット

ヒストグラム

メソッド (動詞) と URL ディメンションから HTTP リクエストのレイテンシを分析します。

キューメトリクス

名前

プロムQL

例示する

ワークキューエンキュー率

sum(rate(workqueue_adds_total{job="ack-kube-controller-manager"}[$interval])) by (名前)

なし

ワークキューの深さ

sum(rate(workqueue_depth{job="ack-kube-controller-manager"}[$interval])) by (名前)

なし

ワークキュー処理の遅延

histogram_quantile($quantile、合計(rate(workqueue_queue_duration_seconds_bucket{job="ack-kube-controller-manager"}[5m]))、(name、le))

なし

リソース指標

名前

プロムQL

例示する

メモリ使用量

メモリ使用率バイト{cnotallow="kube-controller-manager"}

メモリ使用量(バイト単位)。

CPU使用率

cpu_utilization_core{cnotallow="kube-controller-manager"}*1000

CPU 使用率(ミリコア単位)。

メモリ使用量

メモリ使用率{cnotallow="kube-controller-manager"}

メモリ使用量(パーセンテージ)。

CPU使用率

CPU 使用率{cnotallow="kube-controller-manager"}

CPU 使用率(パーセンテージ)。

QPS とレイテンシー

名前

プロムQL

例示する

Kube API リクエスト QPS



  • (メソッド、コード) による合計 (レート (rest_client_requests_total{job="ack-scheduler",code=~"2.."}[$interval]))。
  • (メソッド、コード) による合計 (レート (rest_client_requests_total{job="ack-scheduler",code=~"3.."}[$interval]))。
  • (メソッド、コード) による合計 (レート (rest_client_requests_total{job="ack-scheduler",code=~"4.."}[$interval]))。
  • sum(rate(rest_client_requests_totaljob="ack-scheduler",code=~"5.."}[$interval])) by (method,code) は、メソッド (Method) と戻り値 (Code) のディメンションから kube-apiserver によって開始された HTTP リクエストを分析します。 | | Kube API リクエストのレイテンシ| histogram_quantile($quantile、合計(rate(rest_client_request_duration_seconds_bucket{job="ack-kube-controller-manager"[$interval])) (verb、url、le)) |メソッド (Verb) とリクエスト URL ディメンションから分析された、kube-apiserver に対して開始された HTTP リクエストのレイテンシ。 |

Kubeスケジューラ

スケジューラはポート 10259 をリッスンし、Prometheus エージェントを通じてメトリックを収集し続けます。

インデックスコレクション

(1)Prometheus設定ファイルを編集する

apiVersion: v1 kind: ConfigMap metadata: name: prometheus-agent-conf labels: name: prometheus-agent-conf namespace: flashcat data: prometheus.yml: |- global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'apiserver' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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 - job_name: 'controller-manager' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-controller-manager;https-metrics - job_name: 'scheduler' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-scheduler;https remote_write: - url: 'http://192.168.205.143:17000/prometheus/v1/write'

次に、スケジューラ サービスを構成します。

 apiVersion: v1 kind: Service metadata: labels: k8s-app: kube-scheduler name: kube-scheduler namespace: kube-system spec: clusterIP: None ports: - name: https port: 10259 protocol: TCP targetPort: 10259 selector: component: kube-scheduler sessionAffinity: None type: ClusterIP

Kubernetes で YAML リソースを更新し、curl -X POST "http://<PROMETHEUS_IP>:9090/-/reload" を使用して Prometheus をリロードします。

ただし、スケジューラのインジケーター データをまだ取得できないため、スケジューラのバインド アドレスを 0.0.0.0 に変更する必要があります。

変更が完了すると、Nightingale UI でインジケーターを通常どおり表示できるようになります。

監視ダッシュボード (https://github.com/flashcatcloud/categraf/blob/main/k8s/scheduler-dash.json) をインポートします。

指標の紹介

指標一覧

指標一覧

タイプ

例示する

スケジューラ_スケジューラ_キャッシュ_サイズ

ゲージ

スケジューラ キャッシュ内のノード、ポッド、および想定ポッドの数。

スケジューラ保留中のポッド

ゲージ

保留中のポッドの数。キューの種類は次のとおりです。

  • unschedulable : スケジュール不可能なポッドの数を示します。
  • backoff : backoffQ 内の Pod の数を示します。
  • active : activeQ 内の Pod の数を示します。 | |スケジューラ_pod_scheduling_attempts_bucket |ヒストグラム |スケジューラがポッドのスケジュールを正常に実行しようとした回数。バケットしきい値は 1、2、4、8、16 です。 | |メモリ使用バイト |ゲージ |メモリ使用量、単位: バイト。 | |メモリ使用率 |ゲージ |メモリ使用率 = メモリ使用量 / メモリ リソース上限 (パーセント形式)。 | | CPU 使用率コア |ゲージ | CPU 使用率、単位: コア。 | | CPU使用率 |ゲージ | CPU 使用率 = CPU 使用量 / メモリ リソースの上限 (パーセンテージ形式)。 | |残りクライアントリクエスト合計 |カウンター |ステータス コード、メソッド、ホストの次元から HTTP リクエストの数を分析します。 | | rest_client_request_duration_seconds_bucket |ヒストグラム |メソッド (動詞) と URL ディメンションから HTTP リクエストのレイテンシを分析します。 |

基本指標

指標一覧

プロムQL

例示する

スケジューラ クラスタ統計



  • scheduler_scheduler_cache_size{job="ack-scheduler",type="nodes"}
  • スケジューラ_スケジューラ_キャッシュ_サイズ{ジョブ="ack-scheduler",タイプ="pods"}
  • scheduler_scheduler_cache_sizejob="ack-scheduler",type="assumed_pods"}スケジューラ キャッシュ内のノード、ポッド、および AssumedPod の数。 | |スケジューラ保留中のポッド|スケジューラ保留中のポッド{ジョブ="ack-scheduler"|保留中のポッドの数。キューの種類は次のとおりです。
  • unschedulable : スケジュール不可能なポッドの数を示します。
  • backoff : backoffQ 内の Pod の数を示します。
  • active : activeQ 内の Pod の数を示します。 | |スケジューラはポッドのスケジュールを正常に実行しようとします| histogram_quantile(interval])) を (pod, le)) で割ったもの |スケジューラがポッドのスケジュールを試行する回数。バケットしきい値は 1、2、4、8、16 です。 |

リソース指標

指標一覧

プロムQL

例示する

メモリ使用量

メモリ使用率バイト{cnotallow="kube-scheduler"}

メモリ使用量(バイト単位)。

CPU使用率

CPU 使用率コア{cnotallow="kube-scheduler"}*1000

CPU 使用率(ミリコア単位)。

メモリ使用量

メモリ使用率{cnotallow="kube-scheduler"}

メモリ使用量(パーセンテージ)。

CPU使用率

CPU 使用率{cnotallow="kube-scheduler"}

CPU 使用率(パーセンテージ)。

QPS とレイテンシー

指標一覧

プロムQL

例示する

Kube API リクエスト QPS



  • sum(rate(rest_client_requests_total{job="ack-scheduler",code=~"2.."}[$interval])) by (メソッド、コード)
  • sum(rate(rest_client_requests_total{job="ack-scheduler",code=~"3.."}[$interval])) by (メソッド、コード)
  • sum(rate(rest_client_requests_total{job="ack-scheduler",code=~"4.."}[$interval])) by (メソッド、コード)
  • sum(rate(rest_client_requests_totaljob="ack-scheduler",code=~"5.."}[$interval])) by (method,code) スケジューラによって kube-apiserver に開始された HTTP リクエストは、メソッド (Method) と戻り値 (Code) のディメンションから分析されます。 | | Kube API リクエストのレイテンシ| histogram_quantile($quantile、合計(rate(rest_client_request_duration_seconds_bucket{job="ack-scheduler"[$interval])) (verb、url、le)) |メソッド (Verb) とリクエスト URL ディメンションから分析された、スケジューラによって kube-apiserver に開始された HTTP リクエストのレイテンシ。 |

その他

Etcd は Kubernetes のストレージ センターであり、すべてのリソース情報が保存されます。ポート 2381 を介して外部に監視インジケーターを提供します。

インデックスコレクション

Etcd は静的 Pod 内の Kubernetes クラスターにデプロイされるため、インジケーターの収集には引き続き Prometheus エージェントが使用されます。

(1)Prometheusコレクション構成を構成する

apiVersion: v1 kind: ConfigMap metadata: name: prometheus-agent-conf labels: name: prometheus-agent-conf namespace: flashcat data: prometheus.yml: |- global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'apiserver' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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 - job_name: 'controller-manager' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-controller-manager;https-metrics - job_name: 'scheduler' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-scheduler;https - job_name: 'etcd' kubernetes_sd_configs: - role: endpoints scheme: http relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: kube-system;etcd;http remote_write: - url: 'http://192.168.205.143:17000/prometheus/v1/write'

次に、Etcd のサービス構成を追加します。

 apiVersion: v1 kind: Service metadata: namespace: kube-system name: etcd labels: k8s-app: etcd spec: selector: component: etcd type: ClusterIP clusterIP: None ports: - name: http port: 2381 targetPort: 2381 protocol: TCP

YAML ファイルをデプロイし、Prometheus を再起動します。インジケーターを取得できない場合は、Etcd の listen-metrics-urls 構成を 0.0.0.0 に変更する必要があります。

監視ダッシュボード (https://github.com/flashcatcloud/categraf/blob/main/k8s/etcd-dash.json) をインポートします。

指標の紹介

指標一覧

索引

タイプ

例示する

CPU使用率コア

ゲージ

CPU 使用率、単位: コア。

CPU使用率

ゲージ

CPU 使用率 = CPU 使用率 / メモリ リソースの上限 (パーセンテージ形式)。

etcd_server_has_leader

ゲージ

etcd メンバーにリーダーがいるかどうか。

  • 1: マスターノードが存在することを示します。
  • 0: マスターノードが存在しないことを示します。 | | etcd_server_is_leader |ゲージ | etcd メンバーがリーダーであるかどうか。
  • 1: はいを意味します。
  • 0: いいえ。| | etcd_server_leader_changes_seen_total |カウンター |過去の期間に etcd メンバーがリーダーに切り替わった回数。 | | etcd_mvcc_db_total_size_in_bytes |ゲージ | etcd メンバー DB の合計サイズ。 | | etcd_mvcc_db_total_size_in_use_in_bytes |ゲージ | etcd メンバー DB の実際の使用サイズ。 | | etcd_disk_backend_commit_duration_seconds_bucket |ヒストグラム | etcd バックエンドのコミット遅延。バケットリストは次のとおりです: **[0.001 0.002 0.004 0.008 0.016 0.032 0.064 0.128 0.256 0.512 1.024 2.048 4.096 8.192]**。 | | etcd_debugging_mvcc_keys_total |ゲージ | etcd キーの合計数。 | | etcd_server_proposals_committed_total |ゲージ |ラフト提案コミット送信の総数。 | | etcd_server_proposals_applied_total |ゲージ |ラフト提案の合計数が適用されます。 | | etcd_server_proposals_pending |ゲージ |キューに入れられたラフト提案の数。 | | etcd_server_proposals_failed_total |カウンター |失敗したラフト提案の数。 | |メモリ使用バイト |ゲージ |メモリ使用量、単位: バイト。 | |メモリ使用率 |ゲージ |メモリ使用率 = メモリ使用量 / メモリ リソース上限 (パーセント形式)。 |

基本指標

名前

プロムQL

例示する

etcd の生存ステータス



  • etcd_server_has_leader
  • etcd_server_is_leader == 1 |
  • etcd メンバーが生きているかどうか。正常値は3です。
  • etcd メンバーがマスター ノードであるかどうか。通常、マスターノードとなるメンバーが存在する必要があります。 | |過去 1 日間のリーダー交代回数| changes(etcd_server_leader_changes_seen_totaljob="etcd"}[1d])過去1日間のetcdクラスターリーダーの切り替え回数。 | |メモリ使用量|メモリ使用率バイト{cnotallow="etcd"|メモリ使用量、単位: バイト。 | | CPU 使用率| cpu_utilization_corecnotallow="etcd"}*1000CPU 使用率、単位: ミリコア。 | |メモリ使用率|メモリ使用率{cnotallow="etcd"|メモリ使用率、パーセンテージ。 | | CPU 使用率| cpu_utilization_ratio{cnotallow="etcd"} | CPU 使用率、パーセンテージ。 | |ディスクサイズ|
  • etcd_mvcc_db_total_size_in_bytes
  • etcd_mvcc_db_total_size_in_use_in_bytes |
  • etcd バックエンド DB の合計サイズ。
  • etcd バックエンド db の実際の使用サイズ。 | |総KV数| etcd_debugging_mvcc_keys_total | etcd クラスター内の kv ペアの合計数。 | |バックエンドコミット遅延| histogram_quantile(0.99、合計(レート(etcd_disk_backend_commit_duration_seconds_bucket{job="etcd"}[5m])) (インスタンス、le)) | dbコミット遅延。 | |ラフト提案ステータス|
  • レート(etcd_server_proposals_failed_total{job="etcd"}[1m])
  • etcd_server_proposals_pending{ジョブ="etcd"}
  • etcd_server_proposals_committed_total{job="etcd"} - etcd_server_proposals_applied_total{job="etcd"} |
  • ラフト提案が失敗した割合(分単位)。
  • 保留中のラフト提案の合計数。
  • コミット適用デルタ。 |

クベレット

kubelet はワーカーノードのメインコンポーネントです。 10248 と 10250 の 2 つのポートをリッスンします。10248 は監視検出ポートであり、10250 はシステムのデフォルト ポートであり、/metrics インターフェイスを通じてメトリックを公開します。

インデックスコレクション

ここでも、kubelet インジケーターは Prometheus Agent を通じて収集されます。

(1)Prometheus設定ファイルを変更する

apiVersion: v1 kind: ConfigMap metadata: name: prometheus-agent-conf labels: name: prometheus-agent-conf namespace: flashcat data: prometheus.yml: |- global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'apiserver' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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 - job_name: 'controller-manager' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-controller-manager;https-metrics - job_name: 'scheduler' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-scheduler;https - job_name: 'etcd' kubernetes_sd_configs: - role: endpoints scheme: http relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: kube-system;etcd;http - job_name: 'kubelet' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-kubelet;https remote_write: - url: 'http://192.168.205.143:17000/prometheus/v1/write'

次に、kubelet のサービスとエンドポイントを次のように構成します。

 apiVersion: v1 kind: Service metadata: labels: k8s-app: kubelet name: kube-kubelet namespace: kube-system spec: clusterIP: None ports: - name: https port: 10250 protocol: TCP targetPort: 10250 sessionAffinity: None type: ClusterIP --- apiVersion: v1 kind: Endpoints metadata: labels: k8s-app: kubelet name: kube-kubelet namespace: kube-system subsets: - addresses: - ip: 192.168.205.128 - ip: 192.168.205.130 ports: - name: https port: 10250 protocol: TCP

監視する必要があるノードを追加したカスタム エンドポイントを次に示します。

次に、YAML ファイルをデプロイして Prometheus エージェントを再起動すると、Nightingale UI で特定のインジケーターをクエリできるようになります。

監視ダッシュボード (https://github.com/flashcatcloud/categraf/blob/main/inputs/kubelet/dashboard-by-ident.json) をインポートします。

指標の紹介

指標一覧

# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE go_gc_duration_seconds summary gc的时间统计(summary指标) # HELP go_goroutines Number of goroutines that currently exist. # TYPE go_goroutines gauge goroutine 数量# HELP go_threads Number of OS threads created. # TYPE go_threads gauge os的线程数量# HELP kubelet_cgroup_manager_duration_seconds [ALPHA] Duration in seconds for cgroup manager operations. Broken down by method. # TYPE kubelet_cgroup_manager_duration_seconds histogram操作cgroup的时长分布,按照操作类型统计# HELP kubelet_containers_per_pod_count [ALPHA] The number of containers per pod. # TYPE kubelet_containers_per_pod_count histogram pod中container数量的统计(spec.containers的数量) # HELP kubelet_docker_operations_duration_seconds [ALPHA] Latency in seconds of Docker operations. Broken down by operation type. # TYPE kubelet_docker_operations_duration_seconds histogram操作docker的时长分布,按照操作类型统计# HELP kubelet_docker_operations_errors_total [ALPHA] Cumulative number of Docker operation errors by operation type. # TYPE kubelet_docker_operations_errors_total counter操作docker的错误累计次数,按照操作类型统计# HELP kubelet_docker_operations_timeout_total [ALPHA] Cumulative number of Docker operation timeout by operation type. # TYPE kubelet_docker_operations_timeout_total counter操作docker的超时统计,按照操作类型统计# HELP kubelet_docker_operations_total [ALPHA] Cumulative number of Docker operations by operation type. # TYPE kubelet_docker_operations_total counter操作docker的累计次数,按照操作类型统计# HELP kubelet_eviction_stats_age_seconds [ALPHA] Time between when stats are collected, and when pod is evicted based on those stats by eviction signal # TYPE kubelet_eviction_stats_age_seconds histogram驱逐操作的时间分布,按照驱逐信号(原因)分类统计# HELP kubelet_evictions [ALPHA] Cumulative number of pod evictions by eviction signal # TYPE kubelet_evictions counter驱逐次数统计,按照驱逐信号(原因)统计# HELP kubelet_http_inflight_requests [ALPHA] Number of the inflight http requests # TYPE kubelet_http_inflight_requests gauge请求kubelet的inflight请求数,按照method path server_type统计注意与每秒的request数区别开# HELP kubelet_http_requests_duration_seconds [ALPHA] Duration in seconds to serve http requests # TYPE kubelet_http_requests_duration_seconds histogram请求kubelet的请求时间统计,按照method path server_type统计# HELP kubelet_http_requests_total [ALPHA] Number of the http requests received since the server started # TYPE kubelet_http_requests_total counter请求kubelet的请求数统计,按照method path server_type统计# HELP kubelet_managed_ephemeral_containers [ALPHA] Current number of ephemeral containers in pods managed by this kubelet. Ephemeral containers will be ignored if disabled by the EphemeralContainers feature gate, and this number will be 0. # TYPE kubelet_managed_ephemeral_containers gauge当前kubelet管理的临时容器数量# HELP kubelet_network_plugin_operations_duration_seconds [ALPHA] Latency in seconds of network plugin operations. Broken down by operation type. # TYPE kubelet_network_plugin_operations_duration_seconds histogram网络插件的操作耗时分布,按照操作类型(operation_type)统计如果--feature-gates=EphemeralCnotallow=false,否则一直为0 # HELP kubelet_network_plugin_operations_errors_total [ALPHA] Cumulative number of network plugin operation errors by operation type. # TYPE kubelet_network_plugin_operations_errors_total counter网络插件累计操作错误数统计,按照操作类型(operation_type)统计# HELP kubelet_network_plugin_operations_total [ALPHA] Cumulative number of network plugin operations by operation type. # TYPE kubelet_network_plugin_operations_total counter网络插件累计操作数统计,按照操作类型(operation_type)统计# HELP kubelet_node_name [ALPHA] The node's name. The count is always 1. # TYPE kubelet_node_name gauge node name # HELP kubelet_pleg_discard_events [ALPHA] The number of discard events in PLEG. # TYPE kubelet_pleg_discard_events counter PLEG(pod lifecycle event generator) 丢弃的event数统计# HELP kubelet_pleg_last_seen_seconds [ALPHA] Timestamp in seconds when PLEG was last seen active. # TYPE kubelet_pleg_last_seen_seconds gauge PLEG上次活跃的时间戳# HELP kubelet_pleg_relist_duration_seconds [ALPHA] Duration in seconds for relisting pods in PLEG. # TYPE kubelet_pleg_relist_duration_seconds histogram PLEG relist pod时间分布# HELP kubelet_pleg_relist_interval_seconds [ALPHA] Interval in seconds between relisting in PLEG. # TYPE kubelet_pleg_relist_interval_seconds histogram PLEG relist 间隔时间分布# HELP kubelet_pod_start_duration_seconds [ALPHA] Duration in seconds for a single pod to go from pending to running. # TYPE kubelet_pod_start_duration_seconds histogram pod启动时间(从pending到running)分布kubelet watch到pod时到pod中contianer都running后(watch各种source channel的pod变更) # HELP kubelet_pod_worker_duration_seconds [ALPHA] Duration in seconds to sync a single pod. Broken down by operation type: create, update, or sync # TYPE kubelet_pod_worker_duration_seconds histogram pod状态变化的时间分布, 按照操作类型(create update sync)统计worker就是kubelet中处理一个pod的逻辑工作单位# HELP kubelet_pod_worker_start_duration_seconds [ALPHA] Duration in seconds from seeing a pod to starting a worker. # TYPE kubelet_pod_worker_start_duration_seconds histogram kubelet watch到pod到worker启动的时间分布# HELP kubelet_run_podsandbox_duration_seconds [ALPHA] Duration in seconds of the run_podsandbox operations. Broken down by RuntimeClass.Handler. # TYPE kubelet_run_podsandbox_duration_seconds histogram启动sandbox的时间分布# HELP kubelet_run_podsandbox_errors_total [ALPHA] Cumulative number of the run_podsandbox operation errors by RuntimeClass.Handler. # TYPE kubelet_run_podsandbox_errors_total counter启动sanbox出现error的总数# HELP kubelet_running_containers [ALPHA] Number of containers currently running # TYPE kubelet_running_containers gauge当前containers运行状态的统计按照container状态统计,created running exited # HELP kubelet_running_pods [ALPHA] Number of pods that have a running pod sandbox # TYPE kubelet_running_pods gauge当前处于running状态pod数量# HELP kubelet_runtime_operations_duration_seconds [ALPHA] Duration in seconds of runtime operations. Broken down by operation type. # TYPE kubelet_runtime_operations_duration_seconds histogram容器运行时的操作耗时(container在create list exec remove stop等的耗时) # HELP kubelet_runtime_operations_errors_total [ALPHA] Cumulative number of runtime operation errors by operation type. # TYPE kubelet_runtime_operations_errors_total counter容器运行时的操作错误数统计(按操作类型统计) # HELP kubelet_runtime_operations_total [ALPHA] Cumulative number of runtime operations by operation type. # TYPE kubelet_runtime_operations_total counter容器运行时的操作总数统计(按操作类型统计) # HELP kubelet_started_containers_errors_total [ALPHA] Cumulative number of errors when starting containers # TYPE kubelet_started_containers_errors_total counter kubelet启动容器错误总数统计(按code和container_type统计) code包括ErrImagePull ErrImageInspect ErrImagePull ErrRegistryUnavailable ErrInvalidImageName等container_type一般为"container" "podsandbox" # HELP kubelet_started_containers_total [ALPHA] Cumulative number of containers started # TYPE kubelet_started_containers_total counter kubelet启动容器总数# HELP kubelet_started_pods_errors_total [ALPHA] Cumulative number of errors when starting pods # TYPE kubelet_started_pods_errors_total counter kubelet启动pod遇到的错误总数(只有创建sandbox遇到错误才会统计) # HELP kubelet_started_pods_total [ALPHA] Cumulative number of pods started # TYPE kubelet_started_pods_total counter kubelet启动的pod总数# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. # TYPE process_cpu_seconds_total counter统计cpu使用率# HELP process_max_fds Maximum number of open file descriptors. # TYPE process_max_fds gauge允许进程打开的最大fd数# HELP process_open_fds Number of open file descriptors. # TYPE process_open_fds gauge当前打开的fd数量# HELP process_resident_memory_bytes Resident memory size in bytes. # TYPE process_resident_memory_bytes gauge进程驻留内存大小# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. # TYPE process_start_time_seconds gauge进程启动时间# HELP rest_client_request_duration_seconds [ALPHA] Request latency in seconds. Broken down by verb and URL. # TYPE rest_client_request_duration_seconds histogram请求apiserver的耗时统计(按照url和请求类型统计verb) # HELP rest_client_requests_total [ALPHA] Number of HTTP requests, partitioned by status code, method, and host. # TYPE rest_client_requests_total counter请求apiserver的总次数(按照返回码code和请求类型method统计) # HELP storage_operation_duration_seconds [ALPHA] Storage operation duration # TYPE storage_operation_duration_seconds histogram存储操作耗时(按照存储plugin(configmap emptydir hostpath 等)和operation_name分类统计) # HELP volume_manager_total_volumes [ALPHA] Number of volumes in Volume Manager # TYPE volume_manager_total_volumes gauge本机挂载的volume数量统计(按照plugin_name和state统计plugin_name包括"host-path" "empty-dir" "configmap" "projected") state(desired_state_of_world期状态/actual_state_of_world实际状态)

Kubeproxy

Kubeproxyは、主にノードのネットワーク管理を担当しています。各ノードに存在し、ポート10249を介して監視インジケーターを公開します。

インデックスコレクション

(1)Prometheus構成を構成します

apiVersion: v1 kind: ConfigMap metadata: name: prometheus-agent-conf labels: name: prometheus-agent-conf namespace: flashcat data: prometheus.yml: |- global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'apiserver' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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 - job_name: 'controller-manager' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-controller-manager;https-metrics - job_name: 'scheduler' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-scheduler;https - job_name: 'etcd' kubernetes_sd_configs: - role: endpoints scheme: http relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: kube-system;etcd;http - job_name: 'kubelet' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: insecure_skip_verify: true authorization: credentials_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: kube-system;kube-kubelet;https - job_name: 'kube-proxy' kubernetes_sd_configs: - role: endpoints scheme: http relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: kube-system;kube-proxy;http remote_write: - url: 'http://192.168.205.143:17000/prometheus/v1/write'

次に、Kubeproxyサービスを構成します。

 apiVersion: v1 kind: Service metadata: labels: k8s-app: proxy name: kube-proxy namespace: kube-system spec: clusterIP: None selector: k8s-app: kube-proxy ports: - name: http port: 10249 protocol: TCP targetPort: 10249 sessionAffinity: None type: ClusterIP

YAMLファイルをクラスターに展開し、Prometheusエージェントを再起動します。その後、その監視インジケーターを確認できます(メトリックが収集されていない場合、Kube-Proxyポート10249が127.0.0.1にバインドされているかどうかを確認します。もしそうなら、0.0.0.0.0に変更し、Kubectl編集CM -N Kube-SystemKube-Proxy。

監視ディスク(https://github.com/flashcatcloud/categraf/blob/main/inputs/kube_proxy/dashboard-by-ident.json)をインポートします。

インジケータの紹介

インジケータリスト

# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE go_gc_duration_seconds summary gc时间# HELP go_goroutines Number of goroutines that currently exist. # TYPE go_goroutines gauge goroutine数量# HELP go_threads Number of OS threads created. # TYPE go_threads gauge线程数量# HELP kubeproxy_network_programming_duration_seconds [ALPHA] In Cluster Network Programming Latency in seconds # TYPE kubeproxy_network_programming_duration_seconds histogram service或者pod发生变化到kube-proxy规则同步完成时间指标含义较复杂,参照https://github.com/kubernetes/community/blob/master/sig-scalability/slos/network_programming_latency.md # HELP kubeproxy_sync_proxy_rules_duration_seconds [ALPHA] SyncProxyRules latency in seconds # TYPE kubeproxy_sync_proxy_rules_duration_seconds histogram规则同步耗时# HELP kubeproxy_sync_proxy_rules_endpoint_changes_pending [ALPHA] Pending proxy rules Endpoint changes # TYPE kubeproxy_sync_proxy_rules_endpoint_changes_pending gauge endpoint 发生变化后规则同步pending的次数# HELP kubeproxy_sync_proxy_rules_endpoint_changes_total [ALPHA] Cumulative proxy rules Endpoint changes # TYPE kubeproxy_sync_proxy_rules_endpoint_changes_total counter endpoint 发生变化后规则同步的总次数# HELP kubeproxy_sync_proxy_rules_iptables_restore_failures_total [ALPHA] Cumulative proxy iptables restore failures # TYPE kubeproxy_sync_proxy_rules_iptables_restore_failures_total counter本机上iptables restore 失败的总次数# HELP kubeproxy_sync_proxy_rules_last_queued_timestamp_seconds [ALPHA] The last time a sync of proxy rules was queued # TYPE kubeproxy_sync_proxy_rules_last_queued_timestamp_seconds gauge最近一次规则同步的请求时间戳,如果比下一个指标kubeproxy_sync_proxy_rules_last_timestamp_seconds 大很多,那说明同步hung 住了# HELP kubeproxy_sync_proxy_rules_last_timestamp_seconds [ALPHA] The last time proxy rules were successfully synced # TYPE kubeproxy_sync_proxy_rules_last_timestamp_seconds gauge最近一次规则同步的完成时间戳# HELP kubeproxy_sync_proxy_rules_service_changes_pending [ALPHA] Pending proxy rules Service changes # TYPE kubeproxy_sync_proxy_rules_service_changes_pending gauge service变化引起的规则同步pending数量# HELP kubeproxy_sync_proxy_rules_service_changes_total [ALPHA] Cumulative proxy rules Service changes # TYPE kubeproxy_sync_proxy_rules_service_changes_total counter service变化引起的规则同步总数# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. # TYPE process_cpu_seconds_total counter利用这个指标统计cpu使用率# HELP process_max_fds Maximum number of open file descriptors. # TYPE process_max_fds gauge进程可以打开的最大fd数# HELP process_open_fds Number of open file descriptors. # TYPE process_open_fds gauge进程当前打开的fd数# HELP process_resident_memory_bytes Resident memory size in bytes. # TYPE process_resident_memory_bytes gauge统计内存使用大小# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. # TYPE process_start_time_seconds gauge进程启动时间戳# HELP rest_client_request_duration_seconds [ALPHA] Request latency in seconds. Broken down by verb and URL. # TYPE rest_client_request_duration_seconds histogram请求apiserver 的耗时(按照url和verb统计) # HELP rest_client_requests_total [ALPHA] Number of HTTP requests, partitioned by status code, method, and host. # TYPE rest_client_requests_total counter请求apiserver 的总数(按照code method host统计)

やっと

Kubernetesの監視(https://flashcat.cloud/categories/kubernetes%E7%9b%91%E6%8E%A7%E4%B8%93%E6%A0%8F/)がコラムをまとめました。ここでは処理とテストのみを行っています。それがインジケーターの並べ替えまたは市場の監視であろうと、コミュニティはそれをうまくやっており、それを使用する準備ができています。

参照ドキュメント

[1] https://help.aliyun.com/document_detail/441320.html?spm=a2c4g.444711.0.0.15046e9958t2tg。

<<:  クラウド移行を評価し計画する方法

>>:  小売業界におけるパブリッククラウドの情報セキュリティに関する議論

推薦する

分散ストレージ Ceph におけるさまざまな PG 状態の詳細な説明

1. PGの紹介今回は主に、Ceph におけるさまざまな PG の状態の詳細な説明を共有します。 P...

ハロウィン: hostslayer-2.5 USD/2.5 GB RAM/35 GB HDD/1.5 TB Flow/ニュージャージー

Hostslayer.com は、ハロウィーン前にハロウィーン プロモーションを開始しました。Ope...

ビットコイン:初心者はパニックに陥って売り、ベテランは低価格で購入

今週ビットコインの価格は急落し、新規投資家はパニックに陥って株を売却したが、ベテラン投資家は低価格で...

ByteDanceがAmazonのeコマースに挑戦?

バイトダンスは、フードデリバリー業界に参入し、音楽ストリーミング製品を社内でテストした後、新たな分野...

ウェブマスターはオリジナル記事の問題に注意を払い、解決する必要がある

Baidu のアルゴリズムが変化するにつれて、ウェブサイト上のオリジナル記事の問題にさらに注目が集ま...

Qvodはロングテール問題を解決し、中小規模の動画ウェブサイトに無料の技術サポートを提供します

多数の中小規模のビデオ Web サイトに無料の技術サポートを提供することで、深セン Qvod テクノ...

GitOps – インフラストラクチャ自動化のための DevOps

[[360000]] GitOps はインフラストラクチャを自動的に管理する方法を提供します。これは...

Linux ホームラボで Kubernetes を実行する 5 つの理由

Raspberry Pi ホームラボで Kubernetes を実行する 5 つの理由 この投稿では...

ブランドマーケティング手法を総括しよう!

ブランド**は、恐怖、仲間からの圧力、性的暗示など、多くの一般的な「**」の方法について言及しました...

IDC: パブリッククラウドサービスの収益は2023年までに5,000億ドルに達する

ハイブリッド IT 戦略を検討する組織が増えるにつれて、クラウド コンピューティングの導入が加速しま...

U-Mailメールマーケティングプラットフォームにはスパムを避けるコツがある

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています電子メール...

A5ウェブマスターネットワークYuehuaiマーケティングチーム:「ブラック」6月の降格に関する概要レポート

6月はウェブマスターたちの間で大騒ぎが起こりました。次々とアップデートが行われ、「有名なウェブサイト...

IDC: 中国のEA SaaS市場規模は2026年に183.1億米ドルに達する

IDCの最新の「IDC中国エンタープライズアプリケーション管理(EA)SaaS市場2021年下半期追...

ブログやマイクロブログのマーケティングの焦点は何ですか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスブログが誕生した当初は、...

アジャイル開発は単なる概念だとまだ思っていますか?誰かがそれを現実にしました!

10 年以上前、アジャイル開発は「アジャイル開発宣言」に記されました。今ではこの概念は人々の心に深く...