sarコマンドでLinuxサーバのシステムモニタリングを行う方法
sarコマンドを使うことで、LinuxサーバのCPUやメモリ、DISK IOなどの様々な情報のモニタリングが可能です。
サーバを運用する上で、モニタリングは非常に重要です。
車にはスピードやガソリン残量、モーターの回転数などの情報が見れるようになっているため、スピード違反やガス欠になるのを事前に防ぐことが可能です。
サーバについても、CPUやメモリ、DISK IOなどの情報を取得することで、異常の事前検知や、問題発生時の原因調査などが円滑におこなうことができるようになります。
今回は、sarコマンドを利用して統計情報を取得する方法を紹介します。
sarコマンドとは
sarとは、sysstatパッケージに含まれている、システムの統計情報を取得するコマンドです。名前は、System Admin Reporterの頭文字をとったものになります。
大きな特徴としては、過去にさかのぼって情報が見れることです。topやvmstatでも同様の情報を確認することができますが、リアルタイムでの確認しかできません。sarの場合は、cronにて定期実行することで、過去の情報を保存し、あとから見返すことが可能になります。
sarの導入方法
sysstatのインストール方法
CentOSのデフォルトインストールでは、sarコマンドを利用することはできません。sysstatパッケージに入っているので、インストールを行います。
1 |
yum install sysstat |
デフォルトでは、保存期間が短いので25日保存に伸ばしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vi /etc/sysconfig/sysstat # sysstat-9.0.4 configuration file. # How long to keep log files (in days). # If value is greater than 28, then log files are kept in # multiple directories, one for each month. HISTORY=25 # Compress (using gzip or bzip2) sa and sar files older than (in days): COMPRESSAFTER=26 # Parameters for the system activity data collector (see sadc manual page) # which are used for the generation of log files. SADC_OPTIONS="-S DISK" |
取得間隔の変更
デフォルト設定では、10分間隔の情報取得が可能です。
なるべく短い間隔で取得できたほうが良いので、1分間隔で取得できるようにしてみましょう。
sysstatはcrondで定期実行されており、次のような設定になっています。
1 2 3 4 5 6 |
# cat /etc/cron.d/sysstat # Run system activity accounting tool every 10 minutes */10 * * * * root /usr/lib64/sa/sa1 1 1 # 0 * * * * root /usr/lib64/sa/sa1 600 6 & # Generate a daily summary of process accounting at 23:53 53 23 * * * root /usr/lib64/sa/sa2 -A |
「root /usr/lib64/sa/sa1 1 1」の設定を次のように変更することで、1分間隔で取得が可能になります。
1 |
*/1 * * * * root /usr/lib64/sa/sa1 1 1 |
sarコマンドの使い方
ここでは、CentOS6を前提に説明してきます。
sarコマンドの実行方法(過去の情報を見る場合)
当日の情報を見る場合
当日の情報をみるためには次のコマンドを実行します。
1 |
sar <確認対象オプション> |
確認対象オプションは別途説明します。何も指定が無い場合は、CPUの情報が確認できます。
前日の情報を見る場合
前日以前の情報を見るためには、「-f」オプションを利用します。
1 |
sar -f <ログファイル名> |
ログファイルは、「/var/log/sa/」へ保存されており、sa01のように、saの後に日付がついたファイル名になっています。
時間を区切ってみる場合
「-s」「-e」:オプションを利用することで、時間を絞って確認することも可能です。
1 |
sar -s <hh:mm:ss> -e <hh:mm:ss> |
「-s」では、開始時刻を指定します。「-e」では終了時刻を指定します。
当日の11時から12時の時間帯の情報を表示する場合は、次のように指定します。
1 |
sar -s 11:00:00 -e 12:00:00 |
同じ条件で、日付を指定する場合は、「-f」オプションを追加します。
1 |
sar -f /var/log/sa/sa02 -s 11:00:00 -e 12:00:00 |
sarコマンドの実行方法(現在の情報を見る場合)
リアルタイムで情報を見たい場合は、確認間隔と繰り返し回数を指定します。
1 |
sar <確認間隔> <繰り返し回数> |
1秒おきに60回確認したい場合は次のようになります。
1 |
sar 1 60 |
sarコマンドで確認できるもの
主要なオプションは次の通りです。
オプション | 確認項目 |
---|---|
-u | CPU |
-u -P ALL | CPUを各コアごとに |
-q | ロードアベレージ |
-r | メモリ |
-W | スワップ |
-n DEV | ネットワーク |
-b | ディスクIO |
2日の12時から13時の間の、メモリ状態を確認したい場合は次のようなコマンドになります。
1 |
sar -r -f /var/log/sa/sa02 -s 12:00:00 -e 13:00:00 |
sarコマンドの結果の見方
[-u] CPUの結果の見方
1 2 3 4 5 |
sar -u 00時00分01秒 CPU %user %nice %system %iowait %steal %idle 00時01分01秒 all 0.69 0.00 1.11 0.00 0.00 98.21 00時02分01秒 all 0.22 0.00 0.20 0.07 0.00 99.52 |
オプション | 確認項目 |
---|---|
%user | ユーザが利用しているCPU使用率 |
%nice | nice値を変更しているプロセスのCPU使用率 |
%system | システムが利用しているCPU使用率 |
%iowait | IO待ちしているCPU使用率 |
%steal | ゲストOSが割り当て要求をしたが、割り当ててもらえなかったCPU使用率 |
%idle | 待機中のCPU使用率 |
%userが上昇している場合
httpdやmysqlなどの特定アプリケーションでCPUが消費されている可能性があります。psコマンド等で対象のアプリケーションを確認しましょう。
%systemが上昇している場合
コンテキストスイッチが頻発している可能性があります。httpdへのアクセス集中が発生していないか等を確認します。
%iowaitが上昇している場合
メモリ不足でswapアウトしているか、コピー処理などの大きなディスクIOが発生している可能性があります。プロセスの確認や、メモリ状況を調べます。
[-q] ロードアベレージの結果の見方
1 2 3 4 5 |
sar -q 01時25分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 01時26分01秒 0 119 0.12 0.07 0.03 01時27分01秒 0 117 0.04 0.05 0.03 |
項目 | 内容 |
---|---|
runq-sz | 実行待ちのキューに入っているプロセス数 |
splist-sz | プロセスリスト中のプロセス数とスレッド数 |
ldavg-1 | 過去1分間のロードアベレージ |
ldavg-5 | 過去5分間のロードアベレージ |
ldavg-15 | 過去15分間のロードアベレージ |
[-r] メモリの結果の見方
1 2 3 4 5 |
sar -r 01時25分01秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 01時26分01秒 3580532 262448 6.83 13756 115812 1203780 20.27 01時27分01秒 3580828 262152 6.82 13796 115816 1203756 20.26 |
項目 | 内容 |
---|---|
kbmemfree | 物理メモリの空き容量 |
kbmemused | 使用中の物理メモリ量 |
%memused | 物理メモリの使用率 |
kbbuffers | バッファとして使用されている物理メモリの容量 |
kbcached | キャッシュとして使用されている物理メモリの容量 |
kbcommit | 事前に確保されているメモリ容量 |
%commit | 事前に確保されているメモリ容量の割合 |
バッファとキャッシュはカーネルが自動で確保するメモリ量です。実際のアプリケーションにて、利用されているメモリ量を調べる場合は、使用中の物理メモリからバッファとキャッシュ分を引く必要があります。
1 |
kbmemused-(kbbuffers+kbcached) |
[-W] スワップの結果の見方
1 2 3 4 5 |
sar -W 01時25分01秒 pswpin/s pswpout/s 01時26分01秒 0.00 0.00 01時27分01秒 0.00 0.00 |
項目 | 内容 |
---|---|
pswpin/s | 1秒あたりスワップインしたページ数 |
pswpout/s | 1秒あたりスワップアウトしたページ数 |
[-n DEV] ネットワークの結果の見方
1 2 3 4 5 |
sar -n DEV 01時25分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 01時26分01秒 eth0 0.22 0.22 0.02 0.02 0.00 0.00 0.00 01時26分01秒 lo 0.10 0.10 0.01 0.01 0.00 0.00 0.00 |
項目 | 内容 |
---|---|
IFACE | インターフェース名 |
rxpck/s | 1秒あたりの受信パケット数 |
txpck/s | 1秒あたりの送信パケット数 |
rxkB/s | 1秒あたりの受信データサイズ(KByte) |
txkB/s | 1秒あたりの送信データサイズ(KByte) |
rxcmp/s | 1秒あたりの圧縮受信パケット数 |
txcmp/s | 1秒あたりの圧縮送信パケット数 |
rxmcst/s | 1秒あたりのマルチキャスト受信パケット数 |
全てのインターフェースの情報がでてくるので、grepして確認すると見やすいと思います。
1 |
sar -n DEV|grep eht0 |
[-b] ディスクIOの結果の見方
1 2 3 4 5 |
sar -b 01時25分01秒 tps rtps wtps bread/s bwrtn/s 01時26分01秒 2.47 0.05 2.42 0.40 80.89 01時27分01秒 0.38 0.00 0.38 0.00 4.40 |
項目 | 内容 |
---|---|
tps | 1秒あたりのIOリクエスト数 |
rtps | 1秒あたりの読み込みIOリクエスト数 |
wtps | 1秒あたりの書き込みIOリクエスト数 |
bread/s | 1秒あたりの読み込みデータ量 |
bwrtn/s | 1秒あたりの書き込みデータ量 |
バイナリファイル出力の仕方
通常saファイルは、cronで自動で出力されます。これを手動で出力したい場合は、-0オプションを利用します。
下のコマンドは全情報を「/tmp/sa_dummy」ファイルへ出力する例です。
1 |
sar -A -o /tmp/sa_dummy |
クラウド環境で利用する場合の注意点
クラウド環境で利用する場合は、スケールアップに注意する必要があります。コア数が変更になると、sarのログ情報が壊れてしまいます。スケールアップ前には必ずログ情報を退避するようにしましょう。
1 2 |
sar -f sa01 システム動作情報ファイルの形式が正しくありません: sa01 |
ログファイルが無いとcronの定期実行の際に自動で作成されてしまうので、スケールアップ後も、必ずログが正常に読み込めることを確認するようにしてください。
sarファイルが読み込めない場合は
別の環境で取得したデータファイル(saXX)を-fオプションで読もうとした場合に、次のようなエラーで読み込めない場合があります。
1 2 3 4 5 6 7 8 |
sar -f sa05 システム動作情報ファイルの形式が正しくありません: sa05 sysstat バージョン 9.0.4 の sar/sadc を使って作られたファイル sysstat の現在のバージョンではこのデータファイル (0x2170) の形式を読み込めなくなっています Format of this file had been changed in sysstat-9.0.4-20.el6 due to incompatibility of the certain data types with the current kernel. For more information, please refer to the description of the "--legacy" option in the sar(1) manual page. |
データファイルsaXXを作ったサーバと、実際に読み込もうとしているサーバのsysstatのバージョンが異なると正常に読み込むことができません。
その場合は、「–legacy」オプションを試してみましょう。古いバージョンで作成されたデータファイルを読むことができます。
1 |
sar -f sa05 --legacy |
まとめ
sarコマンドを利用することで、Linuxサーバの様々な情報を確認することができるようになりました。ログを残しておくことは、何かあったときに役立つ情報なので、必ず取得するようにしましょう。
sarコマンドの特徴をまとめると次の通りです。
- プラットフォームはLinux
- CPU、メモリ、DISK IOなどの情報が確認できる
- リアルタイムだけでなく、過去の情報を確認できる
- 過去情報の収集はcrontabにて実施
- クラウド環境でスケールアップをするときは要注意
追伸.文字だけじゃイヤだ!俺は、グラフィカルにsarの結果を見たいんだっ!という人は、ksarを使って、sarの結果をグラフ化する方法をご覧ください。
はじめまして、情報処理の勉強をしている者です。
モニタリングについて色々学ばせていただきます!
よろしくお願いいたします!