Cadvisorによるコンテナの監視


CAdvisorを使用した監視は、ホスト上で実行されている個々のDockerコンテナに関する情報を収集することができます.
cAdvisor (“Container Advisor”)は、コンテナのリソース使用量とパフォーマンスに関するデータを収集するデーモンです.
コンテナ使用量測定に加えて、CAdvisorはまた、アプリケーションからメトリクスを収集することができます.アプリケーションが既にメトリクスを生成している場合は、エンドポイントをscrapeするためにcadviserを設定し、どのメトリックを抽出したいかを指定できます.
CAdvisorも内蔵UIを備え、また、別のストレージドライバプラグインに収集されたデータをエクスポートすることができます.

たとえば、収集したデータをエクスポートできます.
  • Prometheus
  • StatsD
  • ElasticSearch
  • BigQuery
  • InfluxDB
  • Kafka
  • または標準的に
  • 最も簡単な方法は、収集されるデータを参照してください.
    sudo docker run \
      --volume=/:/rootfs:ro \
      --volume=/var/run:/var/run:ro \
      --volume=/sys:/sys:ro \
      --volume=/var/lib/docker/:/var/lib/docker:ro \
      --volume=/dev/disk/:/dev/disk:ro \
      --publish=8080:8080 \
      --detach=true \
      --name=cadvisor \
      --privileged \
      --device=/dev/kmsg \
      gcr.io/cadvisor/cadvisor:v0.37.5
    
    

    The latest version of cAdvisor at the time of writing this was v0.37.5. Make sure you're always using the latest bits.


    場合は、すべてのそれらのボリュームを疑問に思っている.CedAdsorがそれらからすべてのデータを分析することができるように、これらはCedvisorイメージの中にマウントする必要があるフォルダです.
    CAdvisorが実行されると、同じホスト上で動作するすべてのコンテナに関するデータが収集されます.注意options you can set コンテナの監視を制限する.

    KerbernetesにおけるCadvisorの実行


    CAdvisorはKubeletバイナリと統合され、それは上でメトリックを公開します/metrics/cadvisor エンドポイント.
    したがって、我々はKerbernetesクラスタにCedAdsorを明示的にインストールする必要はありません.
    以下に例を示しますkubectl クラスタノードのメトリクスとpodメトリックを取得するには、次の手順に従います.
    $ kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/[node-name]
    {
      "kind": "NodeMetrics",
      "apiVersion": "metrics.k8s.io/v1beta1",
      "metadata": {
        "name": "[node-name]",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/[node-name]]",
        "creationTimestamp": "2021-08-26T22:12:26Z"
      },
      "timestamp": "2021-08-26T22:11:53Z",
      "window": "30s",
      "usage": {
        "cpu": "39840075n",
        "memory": "487200Ki"
      }
    }
    
    
    同様に、次のURLを使用できます/apis/metrics.k8s.io/v1beta1/namespaces/<NAMESPACE>/pods/<POD_NAME> 特定のポッドに関するメトリクスを取得するには.
    を作成しましょうhttpbin 展開:
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml
    
    
    HttpBine podからメトリックを取得するには、以下のコマンドを実行します( POD名をクラスタで実行しているpodの名前に置き換えてください)
    $ kubectl get --raw /apis/metrics.k8s.io/v1beta1/namespaces/default/pods/httpbin-74fb669cc6-xs74p
    {
      "kind": "PodMetrics",
      "apiVersion": "metrics.k8s.io/v1beta1",
      "metadata": {
        "name": "httpbin-74fb669cc6-xs74p",
        "namespace": "default",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/httpbin-74fb669cc6-xs74p",
        "creationTimestamp": "2021-08-26T22:15:40Z"
      },
      "timestamp": "2021-08-26T22:15:16Z",
      "window": "30s",
      "containers": [
        {
          "name": "httpbin",
          "usage": {
            "cpu": "316267n",
            "memory": "38496Ki"
          }
        }
      ]
    }
    
    

    プロヴァテウスとグラファナへのCivisorの接続


    デフォルトでは、Prometheus メトリック/metrics エンドポイント.
    # HELP cadvisor_version_info A metric with a constant '1' value labeled by kernel version, OS version, docker version, cadvisor version & cadvisor revision.
    # TYPE cadvisor_version_info gauge
    cadvisor_version_info{cadvisorRevision="de117632",cadvisorVersion="v0.39.0",dockerVersion="20.10.3",kernelVersion="5.4.104+",osVersion="Alpine Linux v3.12"} 1
    # HELP container_blkio_device_usage_total Blkio Device bytes usage
    # TYPE container_blkio_device_usage_total counter
    container_blkio_device_usage_total{container_env_ARG1="",container_env_ARG2="",container_env_CADVISOR_HEALTHCHECK_URL="",container_env_DEFAULT_HTTP_BACKEND_PORT="",container_env_DEFAULT_HTTP_BACKEND_PORT_80_TCP="",container_env_DEFAULT_HTTP_BACKEND_PORT_80_TCP_ADDR="",container_env_DEFAULT_HTTP_BACKEND_PORT_80_TCP_PORT="",container_env_DEFAULT_HTTP_BACKEND_PORT_80_TCP_PROTO="",
    ...
    
    
    メトリックは既にprometheus形式であり、cAdvisorはよく知られているエンドポイントで自動的にエクスポートしますので、既存のCadisor展開を変更する必要はありません.代わりに、プロメテウスをインストールして設定することができます/metrics エンドポイント.

    プロメテウスのKubernetesへのインストール


    使いましょうPrometheus Operator プロメテウスをKubernetesにインストールする.PromeTheus、Grafana、Alert Managerを含む完全な監視バンドルをインストールします.
    クローニングによってkube-prometheus リポジトリ
    git clone https://github.com/prometheus-operator/kube-prometheus.git
    
    
    では、kube-prometheus フォルダを作成し、最初にcrdsを展開します.
    kubectl apply -f manifests/setup
    
    
    crdsが適用されるのを待ち、配備を作成します.
    kubectl apply -f manifests/
    
    
    一旦すべてを展開したらkubectl get pod -A すべてのポッドを確認して実行するには、Prometheus UIを開くことができます.
    kubectl port-forward svc/prometheus-k8s 9090 -n monitoring
    
    
    あなたが開くならばhttp://localhost:9090 , これで、任意のメトリックのcAdvisorによって収集されたクエリをすることができますcontainer_* 下記の図に示すように.

    グラファナダッシュボード


    Grafanaは、kube-prometheus 演算子.ポートフォワーディングでGrafana UIをポート3000に開くことができます.
    kubectl port-forward svc/grafana 5000:3000 -n monitoring
    
    
    あなたがグラファナを開くならばhttp://localhost:5000 あなたは、すでに作成されたダッシュボードのセットがすでにあることに気がつきますkube-prometheus 演算子.

    ダッシュボードは、Kubernetesリソースに関する情報を表示します-メモリ使用量、CPUの使用量、クォータなど.これらのメトリックはnode-exporter コンポーネント.
    Caddenerがコンテナに関するメトリックを集めている間、ノード輸出者はPrometheusにハードウェアとOSメトリクスを輸出します.
    CavipsorメトリクスをGrafanaに取り込むには、Kubernetes cluster monitoring (via Prometheus) Grafanaからのダッシュボード.
    ダッシュボードのインストールは簡単です.
  • Grafanaで、サイドバーの「+」ボタンに行きなさい.
  • 「インポート」をクリックします.
  • IDテキストフィールドにダッシュボードIDを貼り付けます
  • Loadボタンをクリックします.
  • プロメテウスドロップダウンリストから「prometheus」を選択します.
  • インポートボタンをクリックします.

  • Grafanaがダッシュボードをインポートすると、自動的に開きます.ダッシュボードは、CPUとメモリ使用量と各特定のコンテナについての詳細なメトリクスについての高レベルのメトリクスを備えています.

    次は何ですか。


    次のステップとして、Grafanaで表示されているグラフとデータをよく理解し、それらを読む方法を学びます.どのメトリックとダッシュボードがあなたとあなたのシステムにとって価値があるかについて突き止めてください.
    したら、それを決定した場合は、警告を設定することがあります.プロメテウス演算子はAlert manager . アラートマネージャを使用することができますし、特定のメトリックが定義された閾値内にないときに警告を送信するように構成します.たとえば、通知を送信するシステムを設定できますPagerDuty クラスタメモリまたはCPU使用がある閾値以上であるときはいつでも.

    資源

  • cAdvisor
  • Prometheus operator
  • Node exporter
  • Alert manager
  • Grafana
  • PagerDuty