コンテナのPSI情報を監視する方法

如何監控 container 的 PSI 資訊

はじめに

前回の記事 では、PSI (Pressure Stall Information) とシステムのPSI情報を監視する方法について説明しました。本記事では、個別のコンテナのPSI情報を監視する方法について詳しく解説します。

PSI と cgroupv2

cgroup2ファイルシステムがマウントされているシステムでは、各cgroupの圧力遅延情報を追跡できます。cgroupfsのマウントポイント内にある各cgroupコントローラーのサブディレクトリには、cpu.pressure、memory.pressure、およびio.pressureファイルが含まれています。

以下のコマンドを実行することで、特定のcgroupのPSIを照会できます。この例では、cg1という名前のcgroupのcpu.pressureを照会しています。

cat /sys/fs/cgroup/cg1/cpu.pressure

PSI と runc

runcは、間もなくリリースされるバージョン1.2.0で、コンテナcgroupの圧力遅延情報の取得をサポートする予定です。以下のコマンドを使用して、その情報を取得できます。

runc  --root <container_root>  events --stats <container_id>

ここで、container_rootはコンテナ情報が格納されているディレクトリの場所です。例えば、Dockerでは以下のようになる可能性があります。 /var/run/docker/runtime-runc/moby/また、containerdでは以下のようになる可能性があります。 /var/run/containerd/runc など。

実行後、出力は以下のJSON形式で表示されます。

{
  "type": "stats",
  "id": "9eef3a09b21e11a6c54823ecdbe7b71a204d439acfeb7392a97e60a4baf64a74",
  "data": {
    "cpu": {
      "usage": {
        ...
      },
      "throttling": {},
      "psi": {
        "some": {
          "avg10": 0,
          "avg60": 0,
          "avg300": 0,
          "total": 201
        },
        "full": {
          "avg10": 0,
          "avg60": 0,
          "avg300": 0,
          "total": 201
        }
      }
    },
    "cpuset": {
        ...
    },
    "memory": {
      "usage": {
        ...
      },
      "swap": {
        ...
      },
      "kernel": {
        ...
      },
      "kernelTCP": {
        ...
      },
      "raw": {
         ...
      },
      "psi": {
        "some": {
          "avg10": 0,
          "avg60": 0,
          "avg300": 0,
          "total": 0
        },
        "full": {
          "avg10": 0,
          "avg60": 0,
          "avg300": 0,
          "total": 0
        }
      }
    },
    "pids": {
        ...
    },
    "blkio": {
      "psi": {
        "some": {
          "avg10": 0,
          "avg60": 0,
          "avg300": 0,
          "total": 0
        },
        "full": {
          "avg10": 0,
          "avg60": 0,
          "avg300": 0,
          "total": 0
        }
      }
    },
    "hugetlb": {},
    "intel_rdt": {},
    "network_interfaces": null
  }
}

その中のcpu、memory、blkioに含まれるpsiが、それぞれの対応するPSIです。

Prometheus のサポート

現在、cAdvisorはサポートを提供するためにrunc 1.2.0正式版のリリースを待っています。詳細については、以下を参照してください。このPRサポートが完了すれば、cAdvisorとPrometheusを組み合わせてPSIを読み取ることができるようになります。

また、現在市場にはCloudflareが開発した以下のような他のツールも存在します。 psi_exporter Mosquito と共同制作 cgroups-exporter

まとめ

コンテナの PSI 情報を監視することは、コンテナ化された環境におけるリソース管理を理解し、最適化する上で不可欠です。runc や cAdvisor といったツールのサポートにより、これらの情報をより正確に取得できるようになり、リソース配分をより効果的に管理・調整し、システムの効率的な運用を確保できるようになりました。

参考文献

コメントを残す