【Hinemos】マネージャによる監視が正常に行われているかを監視する
投稿日: / 更新日:
マネージャの機能に何らかの障害が発生した場合、通常はマネージャのセルフチェック機能により、障害が発生したことを検知することができます。しかし、マネージャサーバ自体に深刻な障害が発生した等の場合、セルフチェック機能をもってしてもマネージャの障害を検知できない可能性があります。このような場合に備えて、マネージャの外側からマネージャの正常性を確認する仕組みを入れておくと、より安心です。
1.概要
ここでは、Hinemosのリソース監視やプロセス監視等、SNMPポーリングを行う監視機能が正しく実行されているかどうか、任意の外部サーバ上で定期的に確認する仕組みを検討してみます。仕組みとしては単純で、大まかには以下の方法で、マネージャ以外のサーバ(以下、監視役サーバ)上で確認します。
- マネージャサーバからのSNMP要求を受信したら、iptablesがシステムログを出力
- syslogデーモンが、上記1.のシステムログを特定のファイルへ出力
- ファイルのタイムスタンプが更新されているかどうかを定期的に確認
上記の3.では、ファイルのタイムスタンプをそのサーバのシステム時刻と比較する簡易なスクリプトを作成して、それをcronで定期的に実行します。ファイルのタイムスタンプが更新されていないと判定した場合には、そのスクリプトがメールを送信する等して運用担当者へ知らせる、という寸法です。
2.設定手順
それでは、実際に設定してみたいと思います。まずは監視役サーバにて、iptablesにシステムログを出力するルールを追加します。なお、システムログのファシリティは”kernel”になります。
1 2 |
# iptables -I INPUT 1 -s [マネージャのIPアドレス] -p udp --dport 161 -j LOG --log-level debug --log-prefix "iptables: " # service iptables save |
次に、同じく監視役サーバにて、syslogデーモンがこれを特定のファイルへ出力するよう設定します。ここでは、rsyslogの設定方法をご紹介します。/etc/rsyslog.conf
へ以下の行を追記して、rsyslogを再起動します。
1 |
:msg,contains,"iptables: IN=" /var/log/iptables.log |
これで、マネージャサーバからSNMPパケットを受信した時に、/var/log/iptables.logへ以下のようなログが出力されるようになります。なお、マネージャサーバ以外のサーバからSNMPパケットを受信した場合には、ログには何も出力されません。
1 2 |
Mar 31 12:27:44 [監視役サーバ] kernel: iptables: IN=eth0 OUT= MAC=00:0c:29:93:16:dd:00:0c:29:94:05:71:08:00 SRC=[マネージャのIPアドレス] DST=[監視役サーバのIPアドレス] LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=59828 DPT=161 LEN=53 ... |
そして、/var/log/iptables.logのタイムスタンプを確認し、現在のシステム時刻と比較して10分前より古い場合にアラートを上げるよう、監視役サーバのcrontabを設定します。ここでは便宜上、自身のシステムログへアラートメッセージを出力する内容の簡単なワンライナーを設定していますが、実際には運用担当者へメールを送信するスクリプトを設定する等、障害を早期に把握しやすい内容にした方が良いでしょう。
1 2 |
# crontab -e */5 * * * * /usr/bin/env perl -MFile::stat -le 'system "logger", "No SNMP requests received from HinemosManager within the last $ARGV[1] minutes." if (time - stat($ARGV[0])->mtime) > ($ARGV[1] * 60)' /var/log/iptables.log 10 |
ファイルのタイムスタンプが10分以上更新されていない場合に、実際に上記のワンライナーでアラートメッセージがシステムログへ出力されるかどうかを確認します。
1 2 3 |
Mar 31 13:20:01 [監視役サーバ] root: No SNMP requests received from HinemosManager within the last 10 minutes. Mar 31 13:25:01 [監視役サーバ] root: No SNMP requests received from HinemosManager within the last 10 minutes. ... |
期待どおりアラートメッセージが出力されていることが確認できました。これで、監視役サーバ側の準備は完了です。あとはHinemos上で、監視役サーバに対して適当なリソース監視(あるいはプロセス監視、もしくはSNMP監視)を設定すればOKです。なお、既にそのような監視が設定されていれば、この手順はもちろん省略可能です。
上記のリソース監視を設定した後、期待どおりアラートメッセージが出力されなくなりましたので、今度はマネージャの障害発生という状況を擬似的に作り出すため、マネージャサービスを停止してみます。
1 |
# service hinemos_manager stop |
マネージャ停止から約10分後、監視役サーバのシステムログを見ると、
1 2 3 |
Mar 31 13:40:01 [監視役サーバ] root: No SNMP requests received from HinemosManager within the last 10 minutes. Mar 31 13:45:01 [監視役サーバ] root: No SNMP requests received from HinemosManager within the last 10 minutes. ... |
期待どおり、先のアラートメッセージが出力されました。これで、マネージャに深刻な障害が発生した場合でも、いち早く検知することができそうです。
以上、簡単ですがHinemosに関する話題をご紹介しました。