収集タイミングを事前に決めずに測定を始めてしまい、後から比較できないデータばかり集まってしまった経験があります。この記事ではsysstatの導入確認から収集スクリプトの実行まで、準備段階の手順をまとめました。

前提条件

パフォーマンスデータ収集フロー図

図1: パフォーマンスデータ収集 — サーバーからレポート生成までのフロー

データ収集を開始する前に、以下の条件がすべて整っていることを確認します。

  • 各サーバーへの SSH 接続が可能なこと
  • sysstat パッケージがインストール済み(mpstat / iostat / vmstat を含む)
  • 収集データを保存できる十分なディスク空き容量があること
  • 収集時間帯・負荷条件を事前に決定していること(本番負荷時間帯、または負荷試験のシナリオ)
収集タイミングを事前に合意しておかないと、全サーバーのデータを「同じ負荷状況下」で比較できなくなります。

sysstat インストール確認

mpstat / iostat は sysstat パッケージに含まれています。インストールされていない場合は以下でインストールします。

# RHEL / CentOS / Rocky Linux
sudo yum install -y sysstat

# Ubuntu / Debian
sudo apt install -y sysstat

# インストール確認
mpstat -V
iostat -V

収集コマンド(5 秒 × 12 回 = 1 分)

以下のコマンドを全サーバーで同時に実行します。バックグラウンド実行(&)にして並列取得するのがポイントです。

################################
# 収集用ディレクトリを作成
################################
mkdir -p ./perf_data

################################
# ① CPU 使用状況(mpstat)
################################
mpstat -P ALL 5 12 > ./perf_data/mpstat.txt &

################################
# ② メモリ使用状況(free)
# 5秒ループで取得
################################
while true; do
  echo "--- $(date +%H:%M:%S) ---"
  free -m
  sleep 5
done >> ./perf_data/free.txt &

################################
# ③ ディスク I/O(iostat)
################################
iostat -xz 5 12 > ./perf_data/iostat.txt &

################################
# ④ システム全体(vmstat)
################################
vmstat 5 12 > ./perf_data/vmstat.txt &

# バックグラウンドジョブの確認
jobs
free.txt の収集ループは手動で停止する必要があります。テスト終了後に kill %2(ジョブ番号を確認して)で停止してください。

アクセスログの保存

Web サーバー側では、収集開始時刻と終了時刻のアクセスログを別途保存しておきます。

# Apache の場合
sudo cp /var/log/httpd/access_log \
  ./perf_data/access_$(date +%Y%m%d_%H%M).log

# Nginx の場合
sudo cp /var/log/nginx/access.log \
  ./perf_data/access_$(date +%Y%m%d_%H%M).log

# ログのフォーマット確認(処理時間フィールドの位置を把握)
head -3 /var/log/httpd/access_log

収集時のポイント

収集間隔と収集時間の目安

項目 推奨値 理由
収集間隔 5 秒 短すぎると高負荷に、長すぎると瞬間的な問題を見逃す
収集時間 10〜30 分 負荷シナリオのピーク区間をカバーできる長さ
取得タイミング 負荷テスト中・本番ピーク時 平常時のデータでは問題が現れないことが多い

複数サーバーの時刻合わせ

Web / APL / DB サーバーのデータを後で比較するには、各サーバーの時刻が同期されていることが前提です。NTP の設定を事前に確認しておきましょう。

# 時刻確認
date
timedatectl status

# NTP 同期状態確認
chronyc tracking 2>/dev/null || ntpstat

収集データのファイル構成例

./perf_data/
├── mpstat.txt        # CPU 使用状況
├── free.txt          # メモリ使用状況
├── iostat.txt        # ディスク I/O
├── vmstat.txt        # システム全体
└── access_20260524_1430.log   # アクセスログ

性能データ収集でよくある誤り

Webサーバーの性能計測でデータを収集する際、収集タイミングや保存方法を誤ると分析が役に立たなくなります。

誤り/失敗パターン何が起きるか正しい対処/防止策
性能問題が出た後にだけデータを収集する問題発生前後の比較ができずボトルネック特定が困難になる平常時から定期収集(cron等)を設定しベースラインを蓄積しておく
収集間隔を長くしすぎる(例:5分間隔)スパイク性の性能劣化を見逃す監視目的に応じて1分〜30秒間隔の収集に設定し短期スパイクも記録する
ログファイルをローテーションせずに1ファイルに溜め続けるファイルサイズが肥大化し読み込み・grep・転送が遅くなるlogrotateやtimestamp付きファイル名で定期ローテーションを設定する