なぜ従来のツールではなくPCPが必要なのか?
自社のシステムトラフィックが10,000から50,000 CCUへ急増した際、topやhtopといった定番ツールの限界が見え始めました。これらのツールは、その瞬間のシステムの状態しか示してくれません。かつて、データベースサーバーが深夜2時ちょうどに決まってフリーズする一方で(サーバーを『不滅』にするためのHAクラスター構築が必要な場面です)、朝8時に起きてチェックするとすべてが正常に戻っているということがありました。このような時、詳細な履歴データがなければ、DevOpsエンジニアは火種を消すどころか、ずっと火消しに追われることになります。
Performance Co-Pilot (PCP)こそがその解決策です。CentOS Stream 9において、これは航空機のブラックボックスのような役割を果たします。PCPはCPUやメモリだけでなく、カーネル内のコンテキストスイッチや割り込みレイテンシといった非常に深い指標まで収集します。すべてのデータを保存するため、過去に遡って原因を特定することが可能です。ここでは、ゼロから導入する方法を解説します。
クイックスタート:5分で監視を有効化する
PCPの魅力は、煩雑な設定が不要な点にあります。DNFパッケージマネージャーを使ってわずか3つのコマンドを実行するだけで、システムは24時間365日のログ記録を開始します。
# PCP and system analysis toolset installation
sudo dnf install pcp pcp-system-tools -y
# Enable collection service (pmcd) and logging (pmlogger)
sudo systemctl enable --now pmcd pmlogger
# Check status
pcp status
Performance Co-Pilot configuration is localと表示されれば成功です。システムは静かに/var/log/pcp/pmlogger/へログを記録し始めています。デフォルトでは、PCPはディスク容量を節約するために、systemd Timerと同様の仕組みで毎日自動的にログを圧縮・ローテーションします。
PCPエコシステムの構造を紐解く
PCPを単なる一つのソフトウェアと考えないでください。これは、主に3つのコンポーネントで構成される強力なフレームワークです。
- PMDA (Agents): Nginx、MySQL、カーネルなどの各所に潜入し、数値を収集する「エージェント」です。
- PMCD (Collector): 各PMDAからデータを集約し、ユーザーからのクエリに応答する司令塔です。
- Client Tools:
pmstatやpminfoなど、データを読み解くためのツール群です。
メトリクスの宝庫を探索する
PCPは5,000以上の異なる指標を提供しています。ディスクに関連するメトリクスを確認するには、pminfoを使用します:
pminfo disk.dev.read
vmstatよりも詳細にリアルタイムの変動を監視したい場合は、2秒周期でpmstatを試してみてください:
pmstat 2
過去のトラブルを追跡する:PCPの真価
例えば、昨日の午後14:00にサーバーがダウンしたとしましょう。推測に頼るのではなく、pmrepを使用してその決定的な瞬間のデータを抽出します。
1. 該当するログファイルを探す
ログは/var/log/pcp/pmlogger/HOSTNAME/にYYYYMMDD.HH.MM形式で保存されます。疑わしい時間帯を含むファイルを選択してください。
2. 現場を再現する
# Check CPU idle status from 14:00 to 14:15 on May 10, 2026
pmrep -a /var/log/pcp/pmlogger/node-01/20260510.13.50 \
-s "14:00" -t "14:15" kernel.all.cpu.idle
もしcpu.idleが0%に低下し、同時にcpu.wait.totalが急上昇していれば、コード의 処理が遅いのではなく、ディスクI/Oのボトルネックが発生していることが確実だと言えます。
3. 上司への報告書を出力する
データをExcelに取り込んでグラフを作成する必要がありますか?その場合は、-o csvパラメータを追加するだけです:
pmrep -a /var/log/pcp/pmlogger/node-01/20260510.13.50 -o csv > incident_report.csv
CentOS Stream 9での実践的な経験
長年の運用経験から、PCPを最適化するための3つの重要な注意点を挙げます:
ログ容量の管理
PCPは非常に詳細に記録します。サーバーに数千のメトリクスがある場合、ログフォルダは週に数GBに膨れ上がることがあります。/etc/pcp/pmlogger/control.d/localファイルを編集して、記録頻度を調整しましょう。重要なサーバーでは、10秒に1回の記録とし、直近7日間のみを保存するように設定するのが一般的です。
Grafanaダッシュボードへのデータ統合
コマンドを打ち続けるのも疲れますが、CockpitのようなWebインターフェースではなくGrafanaを使用したい場合、pmproxyをインストールしてデータをプッシュしましょう。これにより、非常に直感的なリアルタイムチャートが手に入ります。
sudo systemctl enable --now pmproxy
sudo firewall-cmd --add-port=44322/tcp --permanent
sudo firewall-cmd --reload
SELinuxへの注意
CentOS Stream 9はセキュリティが強化されており、セキュリティ監査の自動化と同様にSELinuxの設定が重要になります。もしpcp statusでエラーが出る場合、SELinuxがカスタムPMDAをブロックしている可能性が高いです。次のコマンドで素早く確認してください:
sudo ausearch -m avc -ts recent
まとめ
PCPをマスターすれば、システムが遅延するたびに「勘」に頼る必要がなくなります。「さっき誰が何をしたから重くなったんだ?」と疑う代わりに、ログを取り出し、数字に答えを語らせればよいのです。このツールは最初は無機質に感じるかもしれませんが、CLIに慣れてしまえば、どんなWebダッシュボードよりも強力であることがわかるはずです。

