GUIによる効率的なシステム管理、監視
GUIツールによる運用管理
LinuxやFreeBSDなどのシステムでは、コマンド・ラインによる監視、管理が多くみられます。一方、サーバーの性能履歴を把握する場合や、複数のサーバーを同時に監視しなければならない場合は、コマンド・ラインだけでは管理に限界があります。
特に、システムの状況を過去にさかのぼって調査する場合は、コマンド・ラインやログ・データだけを頼りに調査すると、膨大な時間を費やしてしまいかねません。
こうした問題を解決する1つの手段が、GUI管理ツールです。以下では、Linux環境における便利なGUIベースのシステム管理、監視ツールを紹介します。
kSarを使いこなす
システム障害の多くは、人為的操作のミス、ハードウエアの故障、ソフトウエアのバグなどによります。人為的ミスは、手順書の徹底や、簡素で単純なスクリプト、cronの導入などで、ある程度は防ぐことができます。
しかし、システム負荷が高くなることによるサービス障害は、管理者にとって悩ましい問題です。負荷によるサービス障害は、バグでもなければハードウエア故障でもないため、サービス低下の原因を追及する必要があます。
負荷が高くなっている原因追及の手法に、リソース利用率の履歴調査があります。「何時から何時の間に、どのハードウエア・コンポーネントに負荷が集中し、どのプロセスが高負荷を招いているのか」など、リソースの変遷が分かるため、対策を立てやすくなります。
ハードウエア・コンポーネントの負荷の履歴を調査するツールとして、sarコマンドがあります。一方、sarコマンドの結果を人間に分かりやすく閲覧できるようにするツールとして、kSarがあります。kSarは、sarで取得したシステムの負荷状況のデータを読み込みます。kSarは、Red Hat Enterprise Linux 6に含まれていないため、以下のサイトから入手する必要があります。
2010年12月時点での安定版は、バージョン5.0.6です。上記URLから「kSar-5.0.6.zip」を入手し、unzipコマンドでRed Hat Enterprise Linux 6に展開します。展開先は作業用ディレクトリ(/tmpや/rootなど)で構いません。
# unzip kSar-5.0.6.zip
ディレクトリが作られるので、/usr/local/などにパスを変更します。
# mv kSar-5.0.6 /usr/local/
kSarはJavaで動作しますので、javaコマンドが利用できるかどうかを確認しておきます。
# which java /usr/bin/java
kSarを起動させる前に、sarコマンドを用いてデータを取得しておきます。CPU、メモリー、I/Oのすべてのデータを取得する場合は、sarコマンドに-Aオプションを付加します。ここで注意すべき点は、kSarにデータをロードさせるには、sarコマンドの実行時にLC_ALLを適切に設定しておく必要がある点です。以下のように、sarコマンドを実行します。
# (LC_ALL=C sar -A 1 100 -o /var/log/sa/sar_A_1_100.bin)
ここでは、CPU、メモリー、I/Oすべてのデータを-Aオプションによって1秒ごと100回データ取得し、/var/log/sa/sar_A_1_100.binというバイナリ・データに出力しています。Linuxのbashシェルでは、コマンドを括弧でくくることにより、変数が及ぶ範囲を制限することができます。今回は、LC_ALLの値を括弧内のコマンドのみで有効にするため、コマンドを括弧でくくっています。
sarコマンドで得られたバイナリ・データを、リダイレクションによってテキスト・データに変換します。既存のバイナリ・データは、-fオプションで指定できます。
# (LC_ALL=C sar -A 1 -f /var/log/sa/sar_A_1_100.bin > /var/log/sa/sar_A_1_100.txt)
得られたテキスト・データをkSARにロードしてみましょう。kSarは、展開したkSar-5.0.6ディレクトリの下にあるrun.shスクリプトを実行すると起動できます。
# (LC_ALL=C sh /usr/local/kSar-5.0.6/run.sh)
|
図1: kSarをRed Hat Enterprise Linux 6上で起動させた様子。kSarはJavaで実装されているため、javaコマンドが利用できる環境が必要となる |
kSarのウインドウが起動したら、sarのテキスト・データをロードしてみます。kSarウインドウ内の「Data」をクリックし、「Load from text file」をクリックします。すると、ファイルを選択するウインドウが現れるので、sarコマンドで取得しておいたテキスト・データを選択します。ここでは、/var/log/sa/sar_A_1_100.txtファイルを指定します。
|
図2: kSarのメイン・ウインドウから「Load from text file」をクリックする。事前にsarコマンドにより用意しておいたテキスト・ファイルをロードできる |
|
図3: 事前にsarコマンドにより用意しておいたテキスト・ファイル「/var/log/sa/sar_A_1_100.txt」をロードする |
sarコマンドで取得したテキスト・データがうまくロードできた場合には、kSarのウインドウに、取得したデータの各リソースが表示されるはずです。ここでリソースが表示されない場合は、sarコマンドやkSarの実行時のLC_ALLの設定がうまくできていないか、取得したテキスト・データがkSarに対応していない形式である可能性があります。再度sarコマンドによるデータの取得方法を確認してください。
|
図4: sarコマンドの結果のテキスト・ファイル「/var/log/sa/sar_A_1_100.txt」のロードに成功すると、テキスト・データに含まれる項目が左側に表示される |
プロセスの履歴を見てみましょう。左側の「Processes」という項目をクリックすると、単位時間あたりのプロセスの数を見ることができます。横軸は時間なので、プロセス数が時間を追ってどのように増減しているかが分かります。
|
図5: kSarでプロセスの履歴を確認している様子。この例では20時00を過ぎたところからプロセスの数が増えていることが分かる |
kSarのグラフ表示を画像データに保管してみる
kSarは、sarコマンドの結果をグラフ表示できる、強力な可視化ツールです。グラフを画像データに変換して保存する機能もあります。kSarにsarコマンドのテキスト・データをロードさせた状態で、kSarウインドウの左下の「Stop」ボタンをクリックします。「Data」をクリックすると、画像ファイルへのエクスポート・メニューが現れるので、変換したい画像形式の項目をクリックします。例えば、JPEG画像に変換して保存したい場合は「Export to JPG」を選択します。
|
図6: kSarで表示しているグラフを画像データにエクスポートする様子。ここでは「Export to JPG」を選択し、グラフをJPEG画像で保管する例 |
JPEG画像を保存するフォルダを作成する場合は、「New Folder」をクリックします。通常、CPUやディスク、メモリー、NICなどの複数のパフォーマンス・データを保存します。JPEG画像も複数に分かれるため、フォルダを作成して整理しておくことを勧めます。ここでは、/root/kSarJPEGsというディレクトリ名で保管するため、「kSarJPEGs」と入力し、「OK」をクリックします。
|
図7: 画像データを保管するためにディレクトリを作成する。ディレクトリはkSarからも作成可能である |
画像データの保存先フォルダが作成できたら、kSarウインドウ上で保存先フォルダに移動し、ファイル名のベース・ネームとなる文字列を入力します。これは、保存される画像ファイルのファイル名の先頭に付与されるため、分かりやすい名前をつけておきます。今回は、kSarTestとしました。ファイル名となる文字列を入力したら、「OK」をクリックします。
図8: 画像データのファイル名となる文字列を入力する。ここではkSarTestとした(左)。CPU、メモリ、ディスク、NICなど、保存したいリソースを選択することができる(右)(クリックで拡大) |
JPEG画像が保存されているかどうかを確認します。指定したフォルダ、/root/kSarJPEGsに画像ファイルが保存されているはずなので、lsコマンドなどにより、画像ファイルを確認します。
|
図9: kSarによって画像データが得られた様子。画像データはJPEG以外にもPNG形式を選択可能である。JPEG画像以外にWebブラウザでの閲覧を考慮したHTML形式も生成される |
画像データの確認は、WebブラウザのFirefoxやファイル・ブラウザのNautilusなどで行えます。kSarは、JPEG画像に変換した場合、HTML形式のファイルも生成します。このため、Webブラウザで画像データを見ることができます。Red Hat Enterprise Linux 6の環境においてファイル・ブラウザのNautilusを起動させる場合は、コマンド・ラインからnautilusと入力します。
# nautilus
下図は、Nautilusを使って、kSarが出力したJPEG画像を閲覧している様子です。画像データをダブル・クリックすれば、拡大画像を見ることも可能です。
|
図10: kSarによって得られた画像データをNautilusで閲覧している様子。kSarが生成したHTMLファイルを指定して、Webブラウザで閲覧することも可能である |
kSarをコマンド・ラインから利用してみる
kSarは、コマンド・ライン・ベースによる実行も可能です。以下は、sarコマンドの結果のテキスト・ファイルをロードし、グラフの画像データを出力するkSarのコマンド・ラインでの利用例です。
# LC_ALL=C java -jar [kSarのパス]/kSar.jar \ -input “file://[テキストファイルのパス]” \ -outoutJPG [JEPGファイル保存ファイル名] (実際には一行)
これにより、テキスト・ファイルをグラフの画像(上記例ではJPEG形式)に変換できます。このため、スクリプトなどでバッチ処理を行うことが可能となります。以下は、kSarとsarコマンドを使って、sarコマンドで得られたバイナリ・データから、テキスト・ファイルとグラフのJPEG画像データを生成するスクリプトの例です。
sarバイナリ・データからグラフのJPEG画像を生成するkSar2jpg.shスクリプト
#!/bin/sh # Put kSar.jar into /usr/local/kSar-x.x.x/ before using this script. # This script creates a sar text output and jpgs from a sar binary file. # The sar binary file is required to use this script. # Reference: # - Binary: sar -A 1 -o /var/log/sarA1.log # - Text: sar -A -f /var/log/sarA1.log > /var/log/sarA1.txt # - JPG: java -jar kSar.jar \ # -input "file:///var/log/sarA1.txt" \ # -outputJPG /var/log/sar_result/sarA1.XXX.jpg Usage(){ echo "Usage: $0 binaryfile textfile startime endtime " echo "e.g. : $0 binaryfile textfile" echo "e.g. : $0 binaryfile textfile 09:00:00 17:30:00"; exit 1 } kSarPath(){ echo "kSar.jar not found."; exit 1 } export LANG=C JAR=/usr/local/kSar-5.0.6/kSar.jar BIN=$1 TXT=$2 START=$3 END=$4 DIR=${TXT}_jpgs_${START}_${END} [ -f $JAR ] || kSarPath [ -e $BIN ] || Usage [ -z $BIN ] && Usage [ -z $TXT ] && Usage JPG=${DIR}/$(basename ${TXT}) if [ "$START" != "" -a "$END" = "" ]; then Usage fi [ -d $DIR ] || mkdir -p $DIR echo "Now converting a sar binary file to a text file..." if [ "$START" = "" -a "$END" = "" ]; then LC_ALL=C sar -A -f $BIN > $TXT \ || (rm -rf $DIR; Usage) else LC_ALL=C sar -A -f $BIN -s $START -e $END > $TXT \ || (rm -rf $DIR; Usage) fi echo "Now converting a sar txt file to jpg files..." LC_ALL=C java -jar $JAR -input "file://${TXT}" -outputJPG ${JPG} \ || exit 1 exit 0
このスクリプトは、引数にsarコマンドで得られたバイナリ・データ、出力したいテキスト・ファイル名を指定します。例えば、
- バイナリ・データ : /root/sarA1.bin
- 出力したいテキスト・ファイル名 : /root/sarA1.txt
とすると、以下のように指定します。
# ./kSar2jpg.sh /root/sarA1.bin /root/sarA1.txt
出力される画像データは、テキスト・データと同じディレクトリ配下の「/root/sarA1.txt_jpg__」ディレクトリに保存されます。また、特定の期間のみ、例えば、朝の9時0分から夕方の17時30分までのデータを抽出したい場合は、以下のように指定します。
# ./kSar2jpg.sh /root/sarA1.bin /root/sarA1.txt 09:00:00 17:30:00
この場合は、画像データが、/root/sarA1.txt_jpg_[開始時刻]_[終了時刻]ディレクトリに保存されます。下図は、kSar2jpg.shの実行の様子です。sarコマンドのバイナリ・データ、/root/sarA1.binを読み込んで、朝9時0分から夕方17時30分までのテキスト・データ、/root/sarA1.txtとグラフのJPG画像が得られていることが分かります。
図11: kSar2jpg.shスクリプトの実行の様子。過去の履歴が記録されたバイナリ・データから、朝9時~夕方17時30までのデータを抽出してグラフのJPEG画像に変換している(クリックで拡大) |
ディスク使用率とCPU使用率にしきい値を設定して通知する無料のGUIツール
sarコマンドは、リアルタイムでサーバーのリソースを取得し、このうえでテキスト・データの数値を目視で行う運用や、過去の履歴を閲覧して解析を行うといった運用に威力を発揮します。
この一方で、現在稼働中のシステムでリソースが不足気味になった場合に、その状況を管理者に通報させたい場合があります。特に、ディスク使用量やCPU使用率が高くなると、システムのパフォーマンスに大きく影響するため、システム管理者にいち早く知らせておきたい、という場合が少なくありません。
この場合、ディスク使用量やCPU利用率にしきい値を設定し、そのしきい値を超えていないかどうかの監視を行うのが一般的です。しかし、スクリプトによる作り込みなどを行わなくても、簡単に設定できるGUIツールがベンダーから提供されています。
HP ProLiantサーバーの場合、オープンソースではありませんが、無料で提供されているHP System Management Homepage(通称SMH)とよばれるGUIツールがあります。ディスク使用量とCPU利用率のしきい値を、Webブラウザから簡単に設定できます。
ディスク使用量 | CPU利用率 |
図12: HP System Management Homepageによるディスク使用量(左)とCPU利用率(右)のしきい値をGUIで設定している様子。管理者へのメール通知、SNMP通知、ログ出力も容易に設定できる(クリックで拡大) |
HP SMHは、WebブラウザからCPU利用率とディスク使用量のしきい値を設定でき、しきい値を超えると、/var/log/messagesにログを残し、管理者にメール通知します。また、別途構築したHP Insight Controlなどの管理サーバーに、SNMPによる通知も行います。
管理者にメール通知を行うためには、/opt/hp/hp-snmp-agents/cma.confファイルに、trapemailから始まる記述を挿入します。以下は、管理者のtestuserに監視エージェントからメール通知を行う設定例です。
# vi /opt/hp/hp-snmp-agents/cma.conf … trapemail /bin/mail -s 'ProLiant DL360G7 + RHEL6 Trap Alarm' testuser …
ファイルを編集したら、hp-snmp-agentsサービスを再起動しておきます。
# /etc/init.d/hp-snmp-agents restart
CPU利用率のしきい値をGUIで設定したら、ddコマンドなどによりCPUに負荷を与えて、テストを行うとよいでしょう。
# dd if=/dev/urandom of=/dev/null
ディスクの使用量のテストも、ddコマンドなどによりテスト・データを作成し、システムに影響が及ばない範囲でディレクトリを圧迫させて、テストしてみるとよいでしょう。
以上、GUIベースの管理ツールを使った、ハードウエア・リソースの基本的な監視方法を解説しました。
オープンソースのsarコマンドによる性能データの保存、kSarによる性能データの履歴の確認や傾向の把握、グラフ作成、そしてHP SMHによるしきい値設定と管理者への通知を組み合わせれば、比較的少ない工数で、システムの状態を詳細に管理、監視できるようになるはずです。
最近のパブリック・クラウド・システムや仮想化技術を駆使したホスティング・サーバー・システムなどでは、仮想化環境を含めたシステム管理や監視、ハードウエア調達時間の短縮、社内サーバー・システム配備の迅速化、電力やスペースを含めた運用コスト削減の効率化や予測が、課題になっています。コマンド・ラインだけの管理では、もはや限界が来ています。
OSに付属しているGUIツールや、オープンソースで入手できる優秀な監視ツール、ベンダー提供のGUIツールを組み合わせれば、膨大なサーバーで構成されたシステムを、簡単に監視できるようになります。
オープンソースのGUIツールは、膨大な数が存在しますが、使いやすくても自社のシステムの目的を達成できなければ、あまり意味がありません。本連載で掲載したツールは、あくまでも一例に過ぎませんが、汎用性が高いと思われるものを紹介しました。紹介したオープンソース・ソフトウエアを駆使することで、自社システムで抱えている課題を解決できそうかどうか、今一度考えてみてください。