Last-Modified: 2009/6/21
いますぐ実践! Linux システム管理 / Vol.159 / 読者数:1319名
こんばんは、うすだです。
というわけで、クリエーターズマーケットで燃えつきてまいりました。
やっぱり目立たないといかんよねとか、今回は高い商品を用意しようとか (平均購入価格が上がるそうです)、いろいろ考えていたわりには、あっと いう間に月日が流れ、いつものように前日まで突貫工事となりました。
結局、ブースは地味に仕上ってしまい、全部栗の絵なんです、と説明して はじめて面白さに気づいてもらえるという、前回と同じ轍をふんでしまい ました。
…が、それでも、概ね好意的に反応していただき、中にはテンション高く 喜んでいただくこともできまして、とても有意義な一日を過ごせました。
とはいえ、まだまだいろいろ改善の余地があります。
とりあえず、毎回、人件費をゼロにして計算しても「赤字」になるため、
次回こそは「黒字」になるよう、がんばりたいと思います。
自分が何屋さんか忘れたところで、今回も、はりきってまりましょう!
今回のお題 - monit でいろいろ監視する
前回、monit を使って、プロセスといいますかサービスといいますか、を 監視して、止まっていたら起動させる、ということを行いました。
Vol.158 - monit でプロセスを監視する http://www.usupi.org/sysad/158.html
とはいえ、monit は、プロセスだけではなくファイルなどの監視にも使用 できますし、ただ単に動いているかどうか以外の確認もできます。
実際、とりあえずサービスが動いていればいいなんていうことはまれで、 たとえば、CPU パワーを浪費していたり、メモリをばか食いしていた場合 には、なんらかの対策を講じる必要があると思います。
というわけで、今回は、monit を使ったさまざまな監視の仕方を、ご紹介 したいと思います。
− − − − − − − − − − − − − − − − − −
最初は、前回に引き続き、プロセスの監視です。
まず、確認のために、ウソウソなサービスをでっちあげます。
/etc/init.d/usouso というファイルを作成してください。
中身は、以下の通りです。
#!/bin/sh
PIDFILE=/var/run/usouso.pid
case "$1" in
start)
yes > /dev/null 2>&1 &
echo $! > $PIDFILE;;
stop)
[ -f $PIDFILE ] && kill `cat $PIDFILE`
rm -f $PIDFILE;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit $?
以下のように、実行可能にしてから start を引数に渡して実行すると、 yes コマンドがめいいっぱい走ります。
# chmod +x /etc/init.d/usouso
# /etc/init.d/usouso start
そして、stop を引数にして実行すると、yes コマンドが終了します。
# /etc/init.d/usouso stop
ではまず、CPU利用率が 60% を越えたら、メールで通知させるための設定 を、以下に示します。
check process usouso with pidfile "/var/run/usouso.pid"
start = "/etc/init.d/usouso start"
stop = "/etc/init.d/usouso stop"
if cpu usage > 60% then alert
これを、たとえば /etc/monit.d/usouso.conf という名で保存し、monit
を起動(もしくは再起動)しますと、監視を開始します。
当然、yes コマンドがめいいっぱい走行していますので、CPU利用率 60%
を軽く越える状況になり、メールがぽんぽん飛んでくることになります。
通知ではなく、再起動させたければ、最後の1行を以下のようにします。
if cpu usage > 60% then restart
これはどうしようもないよねということで、CPU利用率が 60% を越えたら 監視対象から外すには、最後の1行を以下のようにします。
if cpu usage > 60% then unmonitor
ちなみに、cpu usage の他に、mem usage を使用すると、メモリ使用率の 監視が可能です。
− − − − − − − − − − − − − − − − − −
次に、ファイルやディレクトリを監視してみましょう。
まずはファイルです。
/etc/apache2/conf/httpd.conf の内容が変わったら、httpd にその設定
を反映してもらいましょう。設定例を以下に示します。
check file httpd.conf with path /etc/apache2/conf/httpd.conf
if changed checksum then exec "/etc/init.d/apache2 graceful"
これを、/etc/monit.d/httpd.conf という名前で保存して、monit を起動
(もしくは再起動)します。
そして、/etc/apache2/conf/httpd.conf を適当に編集しますと、apache2
のログに以下が出力され、/etc/init.d/apache2 graceful が実行された
ことが確認できます。
[日時] [notice] Graceful restart requested, doing restart
チェックサムの変化ではなく、タイムスタンプでチェックするには、上記 の2行目を以下のように変更します。
if changed timestamp then exec "/etc/init.d/apache2 graceful"
では、ディレクトリに対しても、同様の設定を行ってみましょう。
設定例を以下に示します。
check directory httpd.conf.dir with path /etc/apache2/conf.d
if changed timestamp then exec "/etc/init.d/apache2 graceful"
同様の手順で上記設定を有効にしますと、/etc/apache2/conf.d のタイム スタンプが変更された時点で、/etc/init.d/apache2 graceful を呼出し ます。
− − − − − − − − − − − − − − − − − −
最後に、オマケ? です。
monit は、WWWサーバの機能も持っており、HTTP 経由で設定を参照したり サービスの制御を行ったりすることができます。
そのためには、以下のような設定を加えます。
set httpd port ポート番号 and use address アドレス
allow アクセスを許可する相手
allow ユーザ名:パスワード
allow @グループ名
2行目以降の allow に関しては、すべて必要というわけではありません。
ただ、複数用いたほうが、セキュリティ的に好ましいと思います。
「ポート番号」には、HTTP のポート番号を指定します。
「アドレス」には、listen する自分のアドレスを指定します。省略する
とすべてのインターフェースから待ち受けますが、その際は use address
アドレス を外してください。
「アクセスを許可する相手」には、ホスト名 や IPアドレスだけでなく、
IPアドレス/マスク である範囲に許可をあたえることも可能です。
「ユーザ名:パスワード」には、HTTP の Basic認証で使用されるユーザ名
とパスワードを指定します。
「@グループ名」には、許可するグループを指定します。PAM を使います
ので、あらかじめ /etc/pam.d/monit を作成しておく必要があります。
設定例を以下に示します。
ポート番号に 2812 を使用し、192.168.1.0/24 からのみ接続を受け付け
ます。ただし、ユーザ名が monit でパスワードが password か、もしく
は adm グループに属するユーザである必要があります。
set httpd port 2812 and
allow 192.168.1.0/255.255.255.0
allow monit:password
allow @adm
ちなみに、/etc/pam.d/monit ですが、Vine では以下のようにすることで 使えることを確認しております。
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session include system-auth
実行例などは省略しますが、現在の設定の確認に使うだけでも重宝します ので、一度お試しくださいませ。
− − − − − − − − − − − − − − − − − −
以上、monit によるさまざまな監視について、ご紹介しました。
monit に関する詳しい情報が、検索などしても意外と見つかりませんが、 そんなときは、ソースコードを覗いてみるとよいかもしれません。
たとえば、doc/ 以下には、ドキュメントがいくつか存在します。
presentation.odp には monit に関する全般的な説明が、examples.html
にはいろいろな設定例が記述されています。
また、protocols/ 以下には、対応するプロトコルとそのチェックの方法
が、記述されています。
前回〜今回を通して、結局 HTTP しか扱いませんでしたが、具体的にどの
ようなやりとりをするのか、気になる貴兄は、中身を覗いてみるとよいと
思います。(C言語で書かれていますけどね…。)
宿題の答え
前回の宿題は、
メールでの通知が一切行われないよう monit を設定してみましょう。
でした。
オンラインマニュアルを見ますと、変化が起きたときに警告メールを送信
してほしければ set alert を設定してね、と書いてあります。
じゃあ、書かなければいいんですね。コメントアウトしてみましょう。
# set alert usu@usupi.org
これで、monit を再起動してみますと、
# /etc/init.d/monit restart
monit 自身の停止や起動を知らせるメールが来なくなりました。
メールを送る必要がなくなりましたので、set mailserver の設定も不要
になります。(あるとまずい、というわけでもないですが。)
# set mailserver localhost
…以上、あっけない答えをお送りしました。
今回の宿題
今回の宿題は、
Monit で、同じ条件で複数の処理を行わせてみましょう。
です。
たとえば、CPU利用率が 80% を越えたときに、再起動しつつメールで通知 したい、といったときに、どのような設定を行えばよいか、試行錯誤して みてくださいませ。
あとがき
すみません、クリマの話の続きです。
今回も、いろいろ気づいたことがありましたが、その中でも、モーレツに 感じたことが3つほどあります。
まず最初は、自分の得意な分野で勝負すべきだ、ということです。
これは、お客さんから指摘していただいて、気づいたことです。
その指摘とは、ポストカードの絵に比べて、栗ストラップのクオリティが
低い、というものでした。
樹脂粘土で栗のマスコットを作り、ストラップにしたものが栗ストラップ
なのですが、よく考えますと、わたしが日々描いている栗の絵とは、栗と
いうキーワード以外に接点がありません。
自分が日々がんばって作っているモノを活かすべきだ、と思いました。
そして次に、子どもの反応がとても素直でストレートだということです。
キラキラした目で「栗?」「栗だ!」と言ってもらえると、すごくうれしい
ですし、大きい声で言ってもらえば、よい宣伝にもなります。
そして自らも、大人の醒めた目で見るのではなく、純粋に、感じたことを
そのまま素直に表現できるようになりたい、と思いました。
そして最後は、ありきたりですが、自分一人の力だけで成し遂げたのでは
ないんだ、ということです。
いつも、よめには、あれやこれやと手伝ってもらっているのですが、今回
はいとこにも手伝ってもらって、いろいろな準備が間に合いました。
以上をふまえて、次回は、もっといいモノにして、もっと多くの方に栗の よさを知っていただき、栗による世界征服に少しでも近づけられるよう、 がんばりたいと思います。(まじめに間違っている気もしますが…)
今回も、ここまで読んでいただき、誠にありがとうございました。
次回は、7月5日(日) 未明にお会いしましょう!
「いますぐ実践! Linux システム管理」はこちらです。
メルマガの解除、バックナンバーなども、以下からどうぞ。
https://www.usupi.org/sysad/ (まぐまぐ ID:149633)
その他、作者に関するページは、概ね以下にございます。
https://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
https://twitter.com/kuriking/ (twitter)
https://facebook.com/kuriking3 (facebook)
https://jp.pinterest.com/kuriking/pinterest)
https://www.instagram.com/kuri_king_/ (instagram)