第7回 障害の兆候を見逃さないためのサーバ監視
アイティーブースト(http://www.itboost.co.jp/)
2003/3/15
監視するデータ
集客力のあるサイトを運営しているWebサーバやメーリングリストを運営しているサーバ、ソフトウェアを配布するFTPサーバ、ファイル共有をするためのサーバなどは、クライアントからの非常に多くの要求を処理する必要があります。
サーバの応答が遅い場合は、ハードウェアの増強などで対応する必要があります。ボトルネックの特定のためには、原因がCPUのパワー不足なのか、メモリ容量が足りていないのか、回線容量が細過ぎるのかなどを判断しなければなりません。そのほかにもハードディスク容量、マザーボードの温度、UPSの電力、メールの配送効率、Webページのアクセス解析など、運用中に注意して見ておく必要のあるデータは多くあります。
ここでは、システムを運用するうえで、監視項目として挙げられる主要なデータおよびその確認方法を紹介します。
■プロセス
プロセス関連の監視項目には、以下のようなものが挙げられます。
- 総プロセス数
- CPU使用率の高いプロセス
- RAM使用率の高いプロセス
- ゾンビプロセス(defunct)
特定のプロセスを確認したい場合はpsコマンドを使用することが多いのですが、「全プロセスの中でCPU負荷が大きい」あるいは「メモリ使用量が多いプロセスを見つけたい」といった、相対的に負荷が高いプロセスを確認する場合はtopコマンドの利用が適切です。サーバに何か起こった場合は、まずtopで問題のあるプロセスを特定することから作業を始めると思います。
topコマンドは、以下のようにシステム全体の情報を表示します。また、特定の項目でプロセスの並べ替えを行うことが可能です。デフォルトではCPUの使用率が高いプロセス順にソートされていますが、表1の1文字のコマンドを利用することで、目的に応じてプロセスを並べ替えることが可能です。
7:28pm up 26 days, 14:17, 2 users, load average: 0.06, 0.03, 0.11
2172 root 23 5 2552 2552 1620 R N 3.5 1.3 0:00 read-data.pl (略) |
|
コマンド
|
機能
|
N
|
プロセスID順 |
A
|
新しいタスク順 |
P
|
CPUの使用時間率の長いもの順 |
M
|
メモリ使用量が多いもの順 |
T
|
実行時間が長い順 |
u
|
特定のユーザー権限のプロセスだけを表示 (uコマンド入力後、「Which User (Blank for All):」というプロンプトが表示されるので、ユーザー名を入力して[Enter]キーを押す。何も入力しない場合は全ユーザーのプロセスが表示される) |
s
|
表示の更新間隔を指定(単位は秒) (sコマンド入力後、「Delay between updates:」というプロンプトが表示されるので、数値を入力して[Enter]キーを押す) |
q
|
TOPの終了 |
表1 topのコマンド |
■CPU
計算量が多い処理を行うと、CPU負荷が高くなります。システム全体のCPUの利用状況を確認するためのコマンドとしては、vmstatなどさまざまなものが存在します(上記のtopコマンドでもシステム全体のCPU使用率が表示されます)。
■メモリ
メモリおよびスワップの状態を確認するには、freeコマンドが便利です。実行すると、以下のように表示されます。
# free |
メモリ使用量を確認する際、usedだけを見てしまうと正確な情報が分かりません。Linuxの場合、存在するメモリをできるだけ使用しようとするため、あまりプロセスを起動していなくても、9割以上は使用されている状態になります。
現実的にはfree+buffers+cachedが「自由な領域」と見なせる部分で、freeコマンドの実行例では「-/+ buffers/cache:」のusedが、実際にシステムを動作させるために「必要な」使用メモリです。
注:当然ですが、バッファやキャッシュ領域がまったく取れない状態ではシステムは動作しません。また、上記の場合、スワップ領域(Swap)を使用している状態になっていますが、スワップ・イン/アウトはハードディスクを利用するためパフォーマンスが悪くなります。Swapのusedが多いのは、メモリの増設によって速度向上が図れる可能性が高い状態です。 |
■ハードディスク
ディスクの使用状況を確認するには、dfコマンドを利用します。通常は、dfの結果を基に、どのディレクトリにあるファイルがディスクを圧迫しているのかをduで確認して対策を考えることになります。
■サーバとの接続性
ネットワークの情報は、さまざまな取得方法があります。各サーバとの接続性を確認する最も基本的な方法は、単純にpingを定期実行し、応答にかかる時間とパケットロスを監視することです。ただし、この場合はどこからpingを実行するのか、つまりEcho要求を出すホストとEcho応答を出すホストの経路が重要になることも認識する必要があります。
また、pingが通ったとしても、運用しているサービスが応答を返すかどうかは確認できません。TCPをトランスポート層で利用するサービスであれば、telnetコマンドで各TCPサービスとの接続性を簡単に確認できます。
以下のように、第2引数にポート番号を指定して実行すると、正常にコネクションが確立できる場合は結果1、確立できない場合は結果2のような表示になります。
# telnet xxx.xxx.xxx.xxx 80 |
結果1 |
# telnet xxx.xxx.xxx.xxx 80 |
結果2 |
■トラフィック量
トラフィック量に関しては、後述するSNMPというネットワーク管理プロトコルが広く利用されます。また、エラーパケットの数など基本的な項目に関してはifconfigでも確認できます。
また、netstatコマンドを利用すれば、ネットワークに関するさまざまな情報を取得することができます。netstatの使用方法については、「netstat - ホストのネットワーク統計や状態を確認する」を参照ください。
■サービス情報
監視したい項目は、サービスによってさまざまです。例えば、Webサーバであればクライアントの要求に正常に応答を返すか、ページのデータが改ざんされていないか、などを監視する必要があります。また、SMTPサーバであればキューにたまっているメール数などが監視項目として挙げられます。
sysstat(sar)を使ったシステム監視
sysstatは、Linuxで利用できるシステム情報取得ツールです。sar(System Admin Reporter)という、sysstatに含まれるコマンドの中の1つの名称で呼ばれることもあります。
システム状態を確認する際、ある瞬間だけを確認するのではなく、「通常の状態」「異常な状態」の切り分けのために「状態の推移」を確認したい場合があります。sysstatを利用することで、CPUやメモリの使用率、ディスクI/O、トラフィックなど、システムの動作に関するさまざまな統計情報を取得することが可能です。
すでに多くのディストリビューションでサポートされているので、各ディストリビューション付属のsysstatを利用すればよいでしょう。ここでは、Red Hat Linux 8.0付属のsysstatを使って説明しますが、仕組みとしては大きな違いはないので参考になると思います。
■sysstatの仕組み
sysstatの主な機能は、システム状態をバイナリデータとして収集するコマンドsadcと、収集したバイナリデータをテキスト形式に変換するsarで実現されます。
sar/sadcコマンド、ログファイルの関係は以下のようになっています。
図1 sar/sadcコマンド、ログファイルの関係 |
例えば、以下のように実行すると、システムデータを1秒間隔で2回取得し、/tmp/system-dataに書き込みます。
# /usr/lib/sa/sadc 1 2 /tmp/system-data |
ただし、このファイルはバイナリデータであるため、参照する場合はsarを以下のように実行する必要があります。
# /usr/bin/sar -f /tmp/system-data |
収集されたデータのうち、どのデータを参照するかはsarのオプションによって異なります。表2に主なオプションを挙げておきますが、初めて利用する場合は-Aオプションで全情報を確認してみることをお勧めします。
sadcコマンドでファイルにデータを落とさなくても、sarコマンド単独でシステム情報の取得が可能です。その場合、第1引数にデータ取得間隔(秒)、第2引数に取得回数を指定して実行します。
# sar 1 5 |
オプション
|
引数
|
説明
|
-A
|
- | 全情報表示 |
-n
|
DEV | 送信/受信パケットに関する情報表示 |
-n
|
EDEV | エラーパケットなどに関する情報表示 |
-u
|
- | CPU使用状況表示。%user+%nice+%systemで100%。%systemが40%を超えるようなら主メモリや入出力デバイス周りに問題がないか、ちゃんと認識されているのかを確認。暴走プロセスも確認する |
-b
|
- | ディスクI/Oの使用状況の表示 |
-r
|
- | メモリとスワップの使用状況の表示 |
-W
|
- | 秒当たりのスワップイン/アウト処理情報表示 |
表2 sarのオプション |
なお、使用している端末によっては日本語の文字化けが生じます。その場合は、環境変数LANGにCを設定します。
# export LANG=C |
以上、簡単にsadcコマンドとsarコマンドを紹介しましたが、基本的にはcronを利用して定期実行するように設定して使います。一般的な設定としては、以下のsa1、sa2という2つのスクリプトをそれぞれ10分に1回、1日1回実行するようにします。
これらのスクリプトでは、あらかじめデータを保存/参照するファイルの場所を定義したうえで、それぞれsadcコマンドやsarコマンドを実行しています。sa1もsa2も非常に単純なスクリプトなので、簡単に動作が把握できるはずです。
#!/bin/sh |
sa1スクリプト |
#!/bin/sh |
sa2スクリプト |
■sysstatのインストール
sysstatは以下のWebサイトから入手することもできます。ここではソースアーカイブをダウンロードしてインストールする手順を簡単に紹介します。
http://perso.wanadoo.fr/sebastien.godard/
# tar zxvf sysstat-4.1.2.tar.gz |
2/3
|
|
||||||
|
連載 Linux管理者への道 |
Linux Squareフォーラム Linux/システム学習関連記事 |
連載:Windowsユーザーに教えるLinuxの常識(全12回) Windowsのセオリーが通用しないLinux。Linux初心者向けに、LinuxというOSの考え方/常識をゼロから伝授! |
|
連載:LFSで作って学ぶLinuxの仕組み(全4回) 管理者(root)は、何をしなければならないのか? 管理に際して検討すべきことは? 管理のための技術とは? など、駆け出し管理者のための考え方や方法論を検討する |
|
連載:Linux管理者への道(全8回) 「Linux From Scratch」というシンプルなLinuxをインストール&環境構築する作業を通して、LinuxがOSとして機能するための仕組みや設定を見直そう |
|
Linux Squareフォーラム全記事インデックス |
|
TechTargetジャパン
- あなたの知らない>|と<>の使い方 (2012/7/13)
広く使われている>や>>、>&に比べ、「知られざる」リダイレクトという印象の強い>|や<>だが、実は興味深い機能なのだ - 共有メモリとファイルシステム――その1 (2012/7/6)
mmap(2)で共有メモリを実装すると処理能力の向上が見込めるが、その実装方法にはいくつもの選択肢がある - 自由な設定が可能な最新リソース制御機能 (2012/6/25)
静かに活躍の場を広げているFreeBSD。知られることなくお蔵入りしている機能や、新しく開発された機能を紹介していきます - OSSプロジェクトとベンダの関係に変化の兆し (2012/6/15)
オープンソースライセンスでソースコードを提供する程度の関係が、より深く、積極的に絡み合うものへと変化中
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -