いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.191 / 読者数:1697名

こんばんは、うすだです。

今年の目標を考えよう…と思っていたら、もう12月なんですね。
今年も、目標を立てられないまま、1年が終わってしまいそうです。

とはいえ、いまから来年の目標を考えるのはフツーのように思いますし、 また間に合わない可能性が高い気がします。

ですので、再来年の目標を、 来年1年かけて考えればいいんじゃないかという気がしています。 時代を先取りですね!

 

 

えーと、いま、わたしとその周辺がバタバタしておりまして、 あまり気の利いたことを書く余裕がございません。
申し訳ありませんが、この流れのまま、本題に突入させていただきたいと存じます。 ご了承くださいませ。

なんて、いままでたいしたことを書いた記憶はございませんが、 念のため許可をいただいておいてから、今回もはりきってまいりたいと思います。

今回のお題 - Munin でグラフィカルに状態を監視する

システムを維持することが最も大事なことだとしますと、 なにかトラブルが発生したとき、可及的速やかに復旧作業を行い、 システムの停止時間を極力短くすべきだということは、 声を大にして言えることだと思います。

ですが、トラブルの芽を察知して未然に防ぐことができれば、 システムが停止することもなくなりますので、もっと望ましいですよね。
(前者のほうが、ヒーローとして崇められる可能性はありますけれども。)

そのためには、普段から、システムの状態を監視しておく必要があるわけですが、 df やなんとかstat などのコマンドの出力結果を眺めるだけですと、 なかなかピンと来ないのではないかと思います。

人間の脳が入力する情報の8割は、視覚だと言われています。
ですので、システムの状態を、もっとビジュアルに表現できれば、 監視も直感的でわかりやすくなるように思います。

というわけで今回は、Munin という、システムの状態を定期的に収集してまとめ、 グラフィカルに表現するツールをご紹介したいと思います。

Munin とは?

似たような文言を何万回と書いたように思いますが、 大人な貴兄はさらりとスルーしてくださいまし。

さて、その Munin ですが、先ほども申し上げましたように、 プロセスやネットワーク、ディスクなど様々な情報を定期的に収集して、 グラフなどに変換するためのツールです。(注: 他にも機能はあります。)

Munin
http://munin-monitoring.org/

ありがたいことに、Linux や Solaris、*BSDなど幅広く対応しています。

また、ひとつのマシンで動かすことはもちろん、複数のマシンの情報を、 どこかの管理マシンでまとめて扱うこともできます。
ですので、部内のサーバ群を Munin で監視することも、やろうと思えばできます。 (がんばれば!)

ちなみに、Munin では、各マシンの情報を「ノード」が収集し、 各ノードの情報を「マスター」が取りまとめ、グラフなどにします。

SNMP でいうところのエージェント(機器から情報を取得して伝えるひと) とマネージャ(情報を取りまとめるひと)の関係に似ていますね。

インストールからはじめます

というわけで、まずは、Munin をインストールしてみましょう。
Ubuntu10.10 や Fedora14 の場合は、ありがたいことにパッケージが存在します。 マスター用の「munin」とノード用の「munin-node」を入れればOKです。 以下のように実行して、パッケージを入れてください。

  $ sudo apt-get install munin munin-node  (Ubuntuなどの場合)
  # yum install munin munin-node  (Fedoraなどの場合)

CentOS の場合、デフォルトではパッケージがありませんが、 DAG というadd-on なリポジトリを追加するとよいようです。
…が、わたしは試してませんので、各自で対応いただけますと幸いです。
(すみません、あとで調べておきます。そして機会があればご紹介を…。)

まずは単体で使ってみましょう

インストールが済んだところで、早速使ってみましょう。
…といっても、munin-node というデーモンを動かすだけです。

Ubuntu なかたは、パッケージをインストールすると自動的に動き出していますので、 実は、何もする必要がありません。

Fedora なかたは、chk-config コマンドで munin-node サービスを有効にして、 service コマンドで起動してやってください。
(初回のみ必要です。次回からは自動的に起動します。)

  # chkconfig munin-node on
  # service munin-node start

munin-node は、その名の通りノードに相当し、自分自身の状態をせっせと収集して、 マスターから要求があると、その情報を提供します。

マスターは、デーモンではなく、 cron で5分毎に起動される munin-cron というプログラムです。
といっても、中身はシェルスクリプトで、munin-update, munin-limits, munin-graph と munin-html を呼び出しています。

munin-update は、ノードから情報を集めるひとです。
集めた情報は、/var/lib/munin/ノード名/ 以下に記録されます。
Munin は、RRDtool というツールを使って、集めた情報を記録したり参照したりします。 ですので、先のディレクトリ以下には、 「.rrd」で終わる名前のファイルがたくさん格納されているはずです。
試しに、以下のように rrdtool コマンドで中身をダンプしてみますと、 XML形式ではありますが、それっぽい情報を参照することができます。

  $ rrdtool dump /var/lib/munin/localhost/どれかのファイル
  (↑環境によっては localhost ではなく localdomain かもしれません)

munin-limits は、監視している値がしきい値を越えたときに、 メールで通知してくれるひとです。

munin-graph と munin-html は、集めた情報をグラフにして、 それをHTMLで参照できるようにするひとです。具体的には、 以下のパスに HTML などを出力します。

/var/cache/munin/www/   (Ubuntuなどの場合)
/var/www/html/munin/   (Fedoraなどの場合)

ですので、同じマシンのブラウザから、以下の URL を開くと、 Munin が収集して HTML とグラフにしたものを見ることができます。

file:///var/cache/munin/www/index.html   (Ubuntuなどの場合)
file:///var/www/html/munin/index.html   (Fedoraなどの場合)

他のノードの情報も収集してみますよ

フツーに参照できたところで、今度は、 マスターとは別のマシンのノードの情報を参照できるようにしてみましょう。

そのためには、双方の設定ファイルを変更する必要があります。

マスターの設定ファイルは「/etc/munin/munin.conf」で、 ノードの設定ファイルは「/etc/munin/munin-node.conf」です。

デフォルトでは、マスターは、localhost のノードからしか情報を得ようとしません。 また、ノードも、localhost のマスターだけにしか情報提供を許可していません。

具体的には、/etc/munin/munin.conf に以下のような設定があります。
これにより、localhost(アドレスは 127.0.0.1)のノードから情報を収集しています。

  [localhost]
      address 127.0.0.1
      use_node_name yes

また、/etc/munin/munin-node.conf には以下のような設定があります。
正規表現のためややわかりにくいですが、 ようするに 127.0.0.1 からの要求に答えるよ、という設定です。

  allow ^127\.0\.0\.1$

ここで、マスターのIPアドレスが「192.168.1.1」だとして、 IPアドレスが「192.168.1.254」のノードの情報を収集したいと仮定します。
まず、マスターの /etc/munin/munin.conf に以下を追加します。

  [server]
      address 192.168.1.254

「server」には、ノードのホスト名を指定してください。
また、マスター側で「server」の名前を使用したい場合は、localhost と同様、 「use_node_name yes」を指定します。
(192.168.1.254のホスト名を参照できないときなどに指定すればよいのだと思います。)

  [server]
      address 192.168.1.254
      use_node_name yes

そして、ノードの /etc/munin/munin-node.conf に以下を追加します。

  allow ^192\.168\.1\.1$

ノードはデーモンですので、以下を実行して、 設定ファイルが変更されたことを知らせて、再読み込みしてもらう必要があります。

  $ sudo service munin-node reload  (restart でも同じです)
  あるいは
  # service munin-node reload

5分以上経過してから、先のURLにブラウザでアクセスすると、localhost だけでなく、 今回追加したノードの情報が参照できる…はずです。

もしならなければ、ノードの /var/log/munin/munin-node.log を眺めてみてください。 たとえば、allow の設定に誤りがあれば、 以下のような行がどこかに含まれていると思います。

  日時 CONNECT TCP Peer: "192.168.1.1:数" Local: "192.168.1.254:4949"
  日時 [数] Denying connection from: 192.168.1.1

/var/log/munin/ 以下には、munin-node 以外のログもあります。
なにかあったときに参照するとよろしいのではないかと思います。

おわりに

以上、Munin の概要と、マスターとノードが別のマシンの場合の設定方法を、 さらっとご紹介しました。

とはいえ、ほんとにさらっとだけで終わってしまいました。
他にも、munin-limitsでメールによる通知とか、収集する情報の取捨選択とか、 ネタは少なからずありますので、次回にご紹介させていただこうと思っております。

ちなみに、グラフにしたり監視したりするネタは、 思ったほどたくさんはありませんでした。とりあえず以下が見つかりましたので、 Munin による監視が簡単で行き届いているなということを実感したい貴兄は、 さらっと眺めてみてくださいませ。

Vol.132 - ログを集計してグラフにする
http://www.usupi.org/sysad/132.html
Vol.177 - sysstat でシステムの状態を監視する
http://www.usupi.org/sysad/177.html

宿題の答え

前回の宿題は、

  nc を使って、Webサーバの稼働を定期的に監視してみましょう。

でした。

まずは、1発確認するだけのスクリプトを書いてみました。
対象は、192.168.1.1 のWebサーバです。
(WWWSERVER= に続くIPアドレスを、 実際のWebサーバのIPアドレスまたはホスト名に差し替えてください。)

#!/bin/sh
WWWSERVER=192.168.1.1
WWWPORT=80
MAILTO=root
RESULT=`printf "HEAD / HTTP/1.0\n\n" | nc -v $WWWSERVER $WWWPORT 2>&1`
if [ $? -ne 0 ]; then
    echo $RESULT | /usr/bin/mail -s "[NOTICE] $WWWSERVER is down" $MAILTO
fi

たとえば、これを /usr/local/sbin/wwwcheck.sh という名前で保存したなら、 chmod コマンドで実行権を与えて、試しに実行してみます。

  $ chmod +x /usr/local/sbin/wwwcheck.sh
  $ /usr/local/sbin/wwwcheck.sh

Ubuntu なかたや、意図した通り動作しないとお嘆きの貴兄は、 前回説明しましたように、nc コマンドの引数に「-q 1」などをつけてください。

で、たとえば、WWWSERVER に実在しないマシンを設定しておくと、 nc によるチェックに失敗してメールが届くはずです。
(mailコマンドでメールが届く設定になっているという前提ですが…。)

あとは、これを定期的に実行すれば、目的達成です。
1分に1回のチェックでいいやとおっしゃるかたは、 cronで毎分実行されるようにすればよいと思います。
たとえば、以下の一文を /etc/crontab などに追加してください。

  * * * * * root /usr/local/bin/wwwcheck.sh

もっと高頻度にチェックしたいという場合は、 upstart などを使う方法が考えられます。
たとえば、(おそらく)Ubuntuをお使いの貴兄に限られますが、 以下の内容のファイルを /etc/init/wwwcheck.conf という名前で保存します。

start on net-device-up IFACE=eth0
stop on net-device-down
respawn
script
    /usr/local/sbin/wwwcheck.sh
    sleep 10
end script

すると、eth0 が利用可能になると、 10秒毎に wwwcheck.sh が実行されるようになります。 (あるいは initctl コマンドで制御してください。)

ただ、これですと、Webサーバがとち狂っていると、 10秒毎に通知メールがやってきます。1時間に360通のメールが来てしまいますね。
それでは困りますので、1回でも失敗したら、 復旧されるまでチェックは行わないようにしてみましょう。

具体的には、失敗したら /etc/www_is_down というファイルを作成して、 /etc/www_is_down が存在するときはなにもしないようにします。
というわけで、wwwcheck.sh の内容を、以下のようにしてみました。

#!/bin/sh
WWWSERVER=192.168.1.1
WWWPORT=80
WWWFAILFILE=/etc/www_is_down
MAILTO=usu@usupi.org
if [ ! -f ${WWWFAILFILE} ]; then
    RESULT=`printf "HEAD / HTTP/1.0\n\n" | nc -v -q 1 $WWWSERVER $WWWPORT 2>&1`
    if [ $? -ne 0 ]; then
        echo $RESULT | /usr/bin/mail -s "[NOTICE] $WWWSERVER is down" $MAILTO
        touch ${WWWFAILFILE}
    fi
fi

これで、1回失敗したら、それ以降はチェックしなくなります。
Webサーバが復旧しましたら、/etc/www_is_down を削除してください。

あるいは、upstart 経由で実行する場合は、 initctl コマンドで自分自身を stop してしまってもよいかもしれませんね。

 

それから、前回の補足があります。

Ubuntu には netcat-traditional というパッケージもありまして、 これの nc コマンドは -e オプションが使えました。

netcat-traditionalパッケージの nc コマンドを使えるようにするには、 パッケージをインストールした後、 update-alternatives コマンドで選択する必要があります。

  $ sudo apt-get install netcat-traditional
  $ sudo update-alternatives --config nc
  There are 2 choices for the alternative nc (providing /bin/nc).

    Selection    Path                 優        Status
  ------------------------------------------------------------
  * 0            /bin/nc.openbsd       50        auto mode
    1            /bin/nc.openbsd       50        manual mode
    2            /bin/nc.traditional   10        manual mode

  Press enter to keep the current choice[*], or type selection number: 2
  update-alternatives: using /bin/nc.traditional to provide /bin/nc \
  (nc) in manual mode.

ちなみに、alternatives に関しては、過去に取り上げております。
気になる貴兄は、以下に目を通していただけますと幸いです。

Vol.150 - alternatives でいろんなものを共存させる
http://www.usupi.org/sysad/150.html
Vol.151 - alternatives に対応させる
http://www.usupi.org/sysad/151.html

今回の宿題

今回の宿題は、

  マスターだけ or ノードだけ動作するように設定してみましょう。

です。

デフォルトでは、1つのマシンでマスターもノードも動作します。
ですが、実際は、マスターがどこか1つのマシン上で動作していればよいはずです。 また、監視対象のマシンでは、ノードだけ動作していれば十分なはずです。

ですので、マスターかノードか、どっちかだけ動作する設定を、 試行錯誤してみてください。

あとがき

そろそろ、年末に向けて、大きめの掃除をせねばと思っております。

基本的に、掃除は嫌いではないし、整理整頓が全くできないということもないのですが、 ものを捨てるのが苦手なため、会社でも家でも、 多様多種なものに囲まれた生活を余儀なくされています。

今年は抜本的な対策を行いたいぜと思っていたところ、 非常に参考になる記事を発見しましたので、ご紹介します。

乱雑デスクのビフォーアフター: ケース1 -- 片付けできないIT系記者
(下記リンクは前編ですが、中編〜後編とたどっていけます)
http://bizmakoto.jp/bizid/articles/0704/23/news005.html

手順自体は、画期的というわけではない(と思う)のですが、 実際のカオスな机をもとに、ひとつずつ実践されていきます。ですので、 自分でもできそうだという気がしてきます。

とりあえず、その気になった状態をキープして、 自分ちの部屋を掃除してみようと思います。

また、元通りにならないための3つの心得も書かれています。
この通りにやれば、スマートかつシンプルな環境を維持できそうです。
ですが、捨てる勇気が要求されますので、 こちらは実践できる気があまりしていません…。

 

今回も、ここまで読んでいただき、たいへんありがとうございました。
次回は、12月19日(日) の未明にお会いしましょう!
(バタバタしてますが、今年最後なので、休まず発行したいと思います。)

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」- 今年こそは、栗年賀状を早めに描こうと思います。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本