🐧 Linux 総合学習プラットフォーム
プロセス監視/障害対応 ・ 中級

平常値を知る——ベースラインという武器

「いつもと違う」と言うには「いつも」の値を知っている必要があります。vmstatやsar(sysstat)で負荷・メモリ・I/Oの平常値を定点観測し、メモしておくことをベースラインと呼びます。障害時はこのベースラインとの差分を見るだけで、切り分けが一気に速くなります。cronによる自動収集など、簡単に続けられる仕組みも押さえます。

「このロードアベレージ、高いんですか?」と聞かれて、即答できるだろうか。実はこの質問、そのサーバの「いつも」を知らないと答えようがない。

ロードアベレージが3.0だとして、4コアの静かなWebサーバなら異常事態だが、32コアのバッチ処理専用機なら平常運転かもしれない。数字そのものに絶対的な「高い」「低い」はなく、常にそのシステムの普段の値との比較でしか語れない。

💡
ポイント障害対応で本当に役立つ問いは「この値は高いか」ではなく「この値はいつもと違うか」だ。後者に答えるには、あらかじめ「いつも」を知っておくしかない。

この「いつも」の値のことを、ベースライン(平常値)と呼ぶ。

🔗
たとえ健康診断で体温37.2度と言われても、平熱35.8度の人と平熱37.0度の人では意味がまるで違う。自分の平熱(ベースライン)を知っているからこそ、今日の37.2度が「ちょっと高いかも」と判断できる。サーバも同じで、平常値を知っていて初めて異常に気づける。

📏 vmstat・sarで定点観測する

ベースラインを作るには、普段の状態を定期的に記録しておく必要がある。すでに紹介した vmstat は、その場で一時的に流れを見るのに向いているが、時間をおいた比較には別の道具が向く。

それが sar(System Activity Reporter)だ。sysstat というパッケージに含まれ、CPU・メモリ・ディスクI/O・ネットワークなど、システムの様々な活動状況を記録・報告してくれる。

vmstat今この瞬間の推移をその場でリアルタイムに見るsar日々のデータを記録しあとで過去と比較するその場で見るか、記録して後で比べるか、という役割分担

sar は -u でCPU、-r でメモリ、-d でディスクI/O、-n DEV でネットワークというように、見たい対象を切り替えて表示できる。1つのコマンドで多角的な指標を扱えるのが強みで、CPU・メモリ・I/Oをそれぞれ別のツールで確認していた手間が1本化される。

sar -u 1 5 ……CPU使用率を1秒間隔で5回表示する。過去のデータが蓄積されていれば sar -u -f /var/log/sa/saXX のように、後から過去の特定の日のデータを呼び出すこともできる。
つまずきsar はsysstatパッケージが提供する定期収集の仕組みと組み合わせて初めて真価を発揮する。インストールしただけでは、単に「今のCPU状況をその場で見るコマンド」に留まる。

📓 負荷・メモリ・I/Oの平常値をメモしておく

ツールが揃っても、記録して終わりでは意味がない。大切なのは、平常時の値を意識的に控えておくことだ。

構えて統計を取らなくても、日々の作業のついでにメモを残すだけで十分な効果がある。「平日昼間はロードアベレージ0.3〜0.6くらい」「availableは常時2GB以上ある」「iostatのawaitは通常10ms未満」といった具合に、ざっくりとした範囲感で構わない。

コツ障害が起きてから慌てて平常値を探しても手遅れなことが多い。障害が起きていない、落ち着いているときにこそ、主要な値を一度メモしておく。この一手間が後で大きく効いてくる。

ベースラインは一度きりの記録では不十分な面もある。平日と週末、昼と深夜、月初のバッチ処理が走る日など、時間帯や曜日によって「いつも」の姿が変わるシステムは多い。可能であれば、複数のタイミングでの値を押さえておくと、より的確な比較ができる。

💡
ポイントベースラインは1つの数字ではなく「幅」で持つとよい。平常時でも0.3〜0.6のように振れ幅があるのが普通で、その幅を大きく超えたときに初めて「いつもと違う」と言える。

複数台のサーバを運用している場合は、同じ役割のサーバ同士でベースラインを比べる視点も有効だ。同じ構成・同じ負荷のはずの2台で、片方だけ数値が明らかに違えば、その1台に固有の問題があると見当を付けやすい。

平常値(ベースライン)load 0.3〜0.6await <10ms障害時の値load 9.8await 210ms差分が一目瞭然。切り分けの時間が大きく縮む

⚡ 障害時は差分で切り分けが速くなる

実際に障害が起きたとき、ベースラインを知っているかどうかで調査速度はまるで違う。

ベースラインがなければ、目の前の数値が異常かどうかの判断そのものに時間がかかる。ロードアベレージ5.0を見ても「これは異常なのか、いつも通りなのか」から悩んでしまう。

ベースラインがあれば、比較は一瞬だ。「いつもは0.5前後なのに今は9.8」「awaitはいつも1桁msなのに今は200ms超え」――差分がそのまま異常のシグナルになる。どの指標が普段からいちばん外れているかを見れば、ボトルネックの当たりも自然と絞れる。

🔗
たとえ地図のない土地で「ここは変だ」と気づくのは難しいが、見慣れた自分の街なら、いつもと違う看板や工事現場にすぐ気づく。ベースラインは、自分のシステムという街の「見慣れた景色」を作る作業だ。

⏰ cronでsarを自動収集する仕組み

メモを手作業で続けるのは面倒だし、忘れることもある。幸い、多くのディストリビューションではsysstatパッケージをインストールすると、cron(自動-cron)ジョブによる定期収集があらかじめ設定されている。

一定間隔(多くは10分おき)でシステムの活動状況を自動的に記録し、日ごとのデータとして保存してくれる。これにより、特別な準備なしに、過去数日〜数週間分のベースラインが自動的に蓄積されていく。

コツsysstat導入後、実際にcron設定が有効になっているかどうかは一度確認しておくとよい。ディストリビューションによっては、パッケージを入れただけでは自動収集が無効なままのこともある。

ただし記録は無限に貯まり続けるわけではない。多くの設定では保存期間に上限があり、古いデータは順次消えていく。長期的な傾向(先月と比べて負荷が上がってきている、など)まで追いたい場合は、保存期間の設定を見直すか、別途グラフ化ツールと組み合わせて長期保存する運用も検討する価値がある。

🔗
たとえ平常値の記録は、体重計に毎日乗って記録を付けるのに似ている。1回の測定に大した意味はなくても、積み重ねたグラフがあるからこそ「最近ちょっと増えてきた」に気づける。サーバの健康管理も、この地道な記録の積み重ねが土台になる。

平常値というのは、地味だが実務でいちばん効くツールの1つだ。障害が起きてから慌てて調べるのではなく、平穏なときにこそ vmstat や sar でシステムの「普段の顔」を記録しておく。この積み重ねが、いざというときの切り分け速度を大きく左右する。

この項目に出てくる用語

ベースライン(平常値)べーすらいん
障害が起きていない平常時の、負荷・メモリ・I/Oなどの標準的な数値。
sar(システム活動記録)えすえーあーる
CPU・メモリ・I/Oなどの活動状況を記録・報告するsysstat付属のツール。

関連コマンド

sar

▶ 学習アプリでこの続きを学ぶ・演習する