Last Updated on 2021年7月4日 by かんりにん
10年ぶりにmonitを入れてみますた。
常駐型の監視/オペレーションツールで、『プロセスの起動、停止、再起動ができるnagios』のようなもの(?)
daemontoolと同様に、指定した条件でプロセスの再起動を実行できます。
制限事項としては、オープンソースで提供されているものはローカル単体での監視・オペレーションのみ、統合監視をする場合は有償版の”M/Monit”が提供され、インシデントサポートも提供されます。
※ちなみに10年前に試したときのログはこちら
基本的な部分はあまり変わっていないので、旧バージョンからのアップデートはしやすいかも。
参考:お世話になっております!
公式サイト
公式マニュアル
そのほか、インストール後のコマンドヘルプ”man monit”でも詳細な情報を確認できる。とても親切!
▼テスト環境は以下の通り。
テストしたバージョン monit-5.5(RPM)
グローバルIP 203.0.113.254
プライベートIP 192.168.101.254
ホスト名(仮) localhost.example.com
Contents
1)インストール
1-1)yumでのインストール
CentOS6でのRPM版monitのバージョンは5.5。
# yum install monit --- snip --- Running Transaction Installing : monit-5.5-1.el6.rf.x86_64 1/1 Verifying : monit-5.5-1.el6.rf.x86_64 1/1 Installed: monit.x86_64 0:5.5-1.el6.rf Complete!
– インストールされたファイルを確認。割とシンプル。
# rpm -ql monit /etc/monit.conf /etc/monit.d /etc/rc.d/init.d/monit /usr/bin/monit /usr/share/doc/monit-5.5 /usr/share/doc/monit-5.5/CHANGES /usr/share/doc/monit-5.5/COPYING /usr/share/doc/monit-5.5/README /usr/share/man/man1/monit.1.gz /var/lib/monit /var/monit
1-2)ソースで最新版をインストールする場合。
2015.09.13現在最新の5.14を別のホストに入れてみたので、こちらもログを。
– 事前準備:依存関係パッケージのインストール
# yum -y install pam-devel ←Web画面の認証オプションでPAMを使えるので、依存関係として必要
ソースのダウンロード、インストール
$ wget https://mmonit.com/monit/dist/monit-5.14.tar.gz $ tar -zxvf monit-5.14.tar.gz %% cd monit-5.14 $ ./configure ←コンフィグファイルの指定が可能。 デフォルトでは/etc/monitrc、/usr/local/etc/monitrcなどを指定している。 $ make # su - # make install
※サーバー設定以降はRPM版5.5を前提に進めます。
2)サーバー設定
monitの全体的な設定
コンフィグファイルは”/etc/monit.conf”。
# cd /etc/ # ll monit.conf -rw------- 1 root root 10652 Mar 20 2013 monit.conf # cp -p monit.conf monit.conf.bak # vi monit.conf
監視インターバルの設定
デフォルト設定は60秒、サーバーの負荷次第では長くしてもOK。
set daemon 60 # check services at 1-minute intervals
ログファイルの指定
デフォルト設定でOKだが、コメントされているのでコメントアウトして有効にする。
set logfile /var/log/monit
IDファイルの指定(デフォルトのままでOK)
set idfile /var/monit/id
IDファイルはmonit実行時に一意のIDを生成し、出力されたもの。
ステータスファイルの指定(デフォルトのままでOK)
set statefile /var/monit/state
ステータスファイルは、monit実行中の監視対象、リソースを一覧でキャッシュしている。
アラートメールのフォーマット設定
コメントされている。アラートメールをを使う場合はコメントアウトして有効にする。
Fromアドレスを設定すること。
subject、messageはカスタマイズ可能だが、デフォルトでも問題なし。
set mailserver localhost # primary mailserver set mail-format { from: monit@localhost.example.com subject: monit alert -- $EVENT $SERVICE message: $EVENT Service $SERVICE Date: $DATE Action: $ACTION Host: $HOST Description: $DESCRIPTION Your faithful employee, Monit }
アラートメールの配信先設定
こちらもデフォルトではコメントになっているので、フォーマット指定と合わせて送信先アドレスを指定する。
アドレスは複数指定可能だが、1行ごとにエントリを追加していく。
set alert alert@example.com set alert system@example.com set alert manager@example.com
Web管理画面の設定
Web管理画面へのアクセスに使用するポートおよびアドレスと、ログイン認証の設定。
– ポートはデフォルトで2812番を使用。ポートを変更しない場合はこのままで可。
– デフォルトではリモートから管理画面へのアクセスを禁止しているので、リモートアクセスを許可する。
– 認証はベーシック認証のほか、PAMも利用可能。
— ベーシック認証を使用する場合はアドレスと認証ユーザーとパスワードを設定する。
※PAMの設定はこちらを参考のこと→https://mmonit.com/monit/documentation/monit.html#Authentication
▼デフォルト
set httpd port 2812 and use address localhost allow localhost # アクセス許可制限 allow admin:monit # ベーシック認証 allow @monit # こちらはPAM認証の設定 allow @users readonly # おなじくPAM認証の設定
▼変更例
set httpd port 2812 and use address 203.0.113.254 # Web管理画面にアクセスさせたいアドレスを設定。IP、ドメイン名ともに可 allow ***.***.***.*** # リモートアクセスをしたい場合は、アクセス許可IPを指定する allow admin:<パスワード> # デフォルトのadminを使う場合でも、パスワードは一意のものに変更しましょう。 #allow @monit # PAMは今回は使わないのでコメントアウト #allow @users readonly # PAMは今回は使わないのでコメントアウト
インクルード設定
指定したディレクトリ以下にコンフィグファイルがあればインクルードする。
デフォルトでは/etc/monit.d/となっているが、このままでもOK。
このディレクトリ以下に、監視対象のプロセスのファイルを個別に作成する。
include /etc/monit.d/*
3)起動と停止、およびステータス確認
設定後、プロセスを起動して監視を開始。
デフォルトではリソースのステータスをレポーティングする。
monitプロセスの起動や停止
/etc/init.d/monit start / stop / restart /status
参考:最初の起動時にコンソールに出力されるメッセージ
monit: generated unique Monit id 4c07ac6a1e6c3e5e9293bcae092c9175 and stored to '/var/monit/id' Starting monit daemon with http interface at [203.0.113.254:2812] [ OK ]
起動時に生成されるIDが”/var/monit/id”にストアされる。
参考:起動時のログ
Sep 10 14:20:46 localhost monit[24269]: monit: generated unique Monit id 60dd77099aeb718412b98c51b5e48ec1 and stored to '/var/monit/id' Sep 10 14:20:46 localhost monit[25574]: Starting monit daemon with http interface at [203.0.113.254:2812] Sep 10 14:20:46 localhost monit[24271]: State file '/var/monit/state': Unable to read magic Sep 10 14:20:46 localhost monit[25576]: Starting monit HTTP server at [203.0.113.254:2812] Sep 10 14:20:46 localhost monit[24271]: monit HTTP server started Sep 10 14:20:46 localhost monit[24271]: 'localhost.example.com' Monit started
参考:トップ画面
参考:ホストステータス
4)サービス監視の設定
httpdやmysqldなどのサービス監視の設定。
/etc/monit.confへ直接記述するほか、monit.confにてincludeを許可している場合
指定したディレクトリ以下に、個別に設定ファイルを作成してインクルードすることも可能。
デフォルトでは/etc/monit.d/以下へファイルを作成することで監視対象に追加される。
追加した場合はmonitプロセスを再起動してインクルードさせる。
★★★メモ:バージョン5.7から”restart program”を使用可能になっている。
障害発生時のrestartを行う際は、”restart program”を使用すると、より安全。
今回はhttpd、mysqld、sshを追加したのでその設定を。
参考:サービス監視追加後のホストステータス
httpd監視
ファイル:/etc/monit.d/httpd
タイムアウト20秒で再起動
– プロセスIDの指定
check process httpd with pidfile "/var/run/httpd/httpd.pid"
– 各プロセスの起動/停止/再起動などの指定
start program = "/etc/init.d/httpd start" with timeout 30 seconds stop program = "/etc/init.d/httpd stop" restart program = "/etc/init.d/httpd stop && "/etc/init.d/httpd start"
– 監視対象・閾値・アクションの指定
if cpu > 85% for 2 cycles then alert if cpu > 95% for 2 cycles then restart if totalmem > 200.0 MB for 5 cycles then restart if loadavg(5min) greater than 2 for 3 cycles then restart if failed host 203.0.113.254 port 80 protocol http #and request "/somefile.html" then restart if failed port 443 type tcpssl protocol http with timeout 20 seconds then restart
– プロセス実行グループの指定
group apache
まとめるとこんな感じ。
check process httpd with pidfile "/var/run/httpd/httpd.pid" start program = "/etc/init.d/httpd start" with timeout 30 seconds stop program = "/etc/init.d/httpd stop" restart program = "/etc/init.d/httpd stop && "/etc/init.d/httpd start" if cpu > 85% for 2 cycles then alert if cpu > 95% for 2 cycles then restart if totalmem > 200.0 MB for 5 cycles then restart if loadavg(5min) greater than 2 for 3 cycles then restart if failed host 203.0.113.254 port 80 protocol http #and request "/somefile.html" then restart if failed port 443 type tcpssl protocol http with timeout 20 seconds then restart group apache
参考:httpd監視ステータス
mysqld監視
ファイル:/etc/monit.d/mysqld
タイムアウト20秒で再起動
– プロセスIDの指定
check process mysqld with pidfile "/var/run/mysqld/mysqld.pid"
– 各プロセスの起動/停止/再起動などの指定
start = "/etc/init.d/mysqld start" # as uid root and gid root stop = "/etc/init.d/mysqld stop" # as uid root and gid root
– 監視対象・閾値・アクションの指定
if failed unixsocket /var/lib/mysql/mysql.sock with timeout 20 seconds then restart if 5 restarts within 5 cycles then timeout
– プロセス実行グループの指定
group mysql
まとめるとこんな感じ。
check process mysqld with pidfile "/var/run/mysqld/mysqld.pid" start = "/etc/init.d/mysqld start" # as uid root and gid root stop = "/etc/init.d/mysqld stop" # as uid root and gid root if failed unixsocket /var/lib/mysql/mysql.sock with timeout 20 seconds then restart if 5 restarts within 5 cycles then timeout group mysql
参考:mysqld監視ステータス
sshd監視
ファイル:/etc/monit.d/sshd
こちらはタイムアウト60秒で再起動。
– プロセスIDの指定
check process sshd with pidfile /var/run/sshd.pid
– 各プロセスの起動/停止/再起動などの指定
start program "/etc/init.d/sshd start" with timeout 60 seconds stop program "/etc/init.d/sshd stop"
– 監視対象・閾値・アクションの指定
if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then time
– プロセス実行グループの指定
group root
まとめるとこんな感じ。
check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/sshd start" with timeout 60 seconds stop program "/etc/init.d/sshd stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then time group root
参考:sshd監視ステータス
/etc/monit.d/以下のファイルを新規作成、編集した後monitプロセスを再起動させると
指定したインターバルを経過したのち、ステータスの取得/更新が行われる。
5)monitコマンドでの各種操作
運用中のmonitはコマンドラインから様々なオペレーションを実行できますが
比較的利用頻度が高そうな操作を抜粋しました。
1)プロセス操作
monitの監視対象下にあるプロセス/サービスで、ログを残したい場合などは
通常のinitコマンドでの再起動でなくmonit restartを使います。(監視対象のプロセスのみ可能)
起動
# monit start <プロセス名>
– mysqlの場合の実行例
# monit start mysqld
– 監視対象の全プロセスに対する操作
# monit start all
停止
# monit stop <プロセス名>
– mysqlの場合の実行例
# monit stop mysqld
– 監視対象の全プロセスに対する操作
# monit stop all
再起動
# monit restart <プロセス名>
– mysqlの場合の実行例
# monit restart mysqld
監視対象の全プロセスに対する操作
# monit restart all
2)モニタリング操作
– モニタリングの開始
# monit monitor <プロセス名>
– mysqlの場合は
# monit monitor mysqld
– 監視対象の全プロセスに対する操作
# monit monitor all
モニタリングの停止
# monit unmonitor <プロセス名>
– mysqlの場合は
# monit unmonitor mysqld
– 監視対象の全プロセスに対する操作
# monit unmonitor all
3)監視プロセスのステータスのサマリ出力
監視対象リソースやサービスのステータスを簡易表示。
# monit summary
– 実行例
# monit summary The Monit daemon 5.5 uptime: 20m Process 'sshd' Running Process 'mysqld' Running Process 'httpd' Running System 'localhost.example.com' Running
4)監視プロセスのステータスの詳細確認
Web管理画面で表示されるステータスと同じ内容のものですが、コマンドラインからも確認できます。
# monit status
– 実行例
# monit status The Monit daemon 5.5 uptime: 20m Process 'sshd' status Running monitoring status Monitored pid 28068 parent pid 1 uptime 23m children 0 memory kilobytes 1232 memory kilobytes total 1232 memory percent 0.0% memory percent total 0.0% cpu percent 0.0% cpu percent total 0.0% port response time 0.006s to localhost:22 [SSH via TCP] data collected Thu, 10 Sep 2015 15:50:06 Process 'mysqld' status Running monitoring status Monitored pid 28706 parent pid 28256 uptime 19m children 0 memory kilobytes 106688 memory kilobytes total 106688 memory percent 5.0% memory percent total 5.0% cpu percent 0.0% cpu percent total 0.0% unix socket response time 0.000s to /var/lib/mysql/mysql.sock [DEFAULT] data collected Thu, 10 Sep 2015 15:50:06 Process 'httpd' status Running monitoring status Monitored pid 28849 parent pid 1 uptime 17m children 11 memory kilobytes 16192 memory kilobytes total 334232 memory percent 0.7% memory percent total 15.9% cpu percent 0.0% cpu percent total 0.0% port response time 0.011s to 203.0.113.254:80 [HTTP via TCP] data collected Thu, 10 Sep 2015 15:50:06 System 'localhost.example.com' status Running monitoring status Monitored load average [0.15] [0.03] [0.01] cpu 0.4%us 0.0%sy 0.0%wa memory usage 642276 kB [30.6%] swap usage 16900 kB [0.8%] data collected Thu, 10 Sep 2015 15:50:06
今回はこんなところで。
そのほか、スマートフォンアプリもリリースされており、リモートでのシステムオペレーションにも対応しているのがステキ。
スタンドアロンでの監視はいささか現実的ではないながら、有償ライセンス利用前の検証としては良いかも。
ちなみに5ホスト/65ユーロのプランから1000ホスト/699ユーロのプランまでラインナップされ、個人的にはリーズナブルに感じられました(最上位のエンタープライズライセンスは12000ユーロと、なかなかのプライスですが…)