始める前にKubernetes はシンプルでありながら複雑なシステムです。シンプルさは、全体的なアーキテクチャが比較的シンプルで明確であるという事実にあります。これは、次のような標準的なマスター スレーブ モードです。 しかし、それは複雑なシステムです。上の図に示すように、マスターとスレーブは両方とも複数のコンポーネントで構成されています。 - マスターコンポーネント
- apiserver: 認証、承認、アクセス制御、API 登録および検出などを担当する API エントリ。
- スケジューラ: リソースのスケジュールを担当します。
- controller-manager: クラスターのステータスを維持します。
- スレーブコンポーネント。
Kubelet: コンテナのライフサイクル、CSI 管理、CNI 管理を維持します。 kube-proxy: サービス検出と負荷分散を担当します。 コンテナランタイム(docker、containerdなど):イメージ管理、コンテナ操作、CRI管理など。 データベース コンポーネント。 Etcd: クラスターのステータスを保存し、apiserver との通信を維持します。
このような複雑でシンプルなシステムの場合、主に以下の領域を含む広範囲にわたる領域をカバーしているため、内部の動作状態を常に追跡することは非常に困難です。 - オペレーティング システム レベル: Kubernetes はオペレーティング システムにデプロイされるため、オペレーティング システム レベルでの監視が非常に重要です。
- Kubernetes 自体: Kubernetes には多数のコンポーネントが含まれており、これらのコンポーネントの実行状態はクラスター全体の安定性に関係します。
- Kubernetes 上のアプリケーション: Kubernetes はアプリケーションの動作環境を提供します。エンタープライズ アプリケーション システムはクラスターに展開され、これらのアプリケーションの安定性はエンタープライズの発展に関係します。
- ネットワーク、コンピューター ルーム、キャビネットなど、その他の基礎となる柱もあります。
監視すべき項目は多く、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。 |