ネットワークシステム監視とは
構築したシステムを適切に運用するためにはいくつかの要素があります。そのうちの 1 つがネットワークシステムの監視です。
システム監視を行うことで、問題を素早く把握し、問題が大きくなる前に、早急かつ適切な対処ができるようになります。
具体例としては、以下のことを行うことです。
2. ネットワーク機器やサーバの故障が発生したことを検知
3. ネットワーク機器のCPUが応答しなくなったことを検知
4. サーバのサービスが応答しなことや、プロセスが落ちたことを検知
5. CPUやメモリ、HDDの空きリソースが少ないことを検知
6. 温度異常を検知
7. L2ループやVRRP等の片系障害などを検知
8. 不良パケットが増加していることを検知
9. 『あらかじめ設定したキーワード』を含むログが出たことを検知
10.不正ログインが多数出ていることを検知
11.プリンタのトナー交換や用紙補給のタイミングを通知
これらはあくまで一例で、他にもできることは多岐に渡ります。
ネットワークシステム監視の標準的な構成
ネットワークシステム監視における標準的な構成を以下に示します。
ネットワークシステム監視の種類
ネットワークシステム監視の種類の代表的な例を以下に示します。いずれも問題が起きた場合にはメールで通知する、というのが一般的です。
死活監視
Ping (ICMP Echo)を使い、対象IPの機器が応答 (ICMP Echo-Reply) を返すことで、その機器の CPU が活きていることを確認します。NW 機器で多用されます。
応答が無い場合であっても (HW 処理 = CPU を使わない) パケット転送は継続できることもありますが、そういう場合はリブートすると直ることが多いです。ssh 等リモートによる設定変更や、機器故障を検知する SNMP trap 等が使えなくなったりしますので早めの対処が望ましいでしょう。
サービス監視
http (tcp:80) や pop3 (tcp:110), imap4 (tcp:143) などのサービスに実際に接続しに行きます。やり方として、対象 TCP ポートに TCP syn を送り、TCP syn/ack が返ってくることで OK とすることがあります。
ですがたまに『TCP コネクションまでは接続できるがその後のサービスに応答しない』というゾンビプロセスに当たると、実際にはサービスが使えないのにアラートが出ない、といった状態になります。
そういう場合は、例えば http であれば 3way ハンドシェイクで TCP コネクション確立後、さらに http GET メソッドを発行し、http 応答コード 200 が返ってくることや、その応答の中に特定の文字列 (例えばログイン画面の "Login"という文字列) が入ってくることを確認することや、pop や imap の監視用 ID/パスワードをセットし、監視サーバから TCP コネクション確立後、実際にその ID/パスワード情報を送り、成功するかどうかを見る、といったこともできます。
SNMPによる状態監視
SNMP の特定の MIB の状態を確認し、その MIB の状態が変わった際にアラートを上げます。これは標準 MIB ではなく、ベンダ独自の拡張 MIB を使うことが多いです。
例えば機器筐体内の温度情報取得もそうですし、その他、冗長構成の機器で片系が壊れた際に特定の MIB を 0 から 1 にする、といった実装をしていれば、その MIB を定期的に 0 であることを確認し、もし 1 であればアラートを上げる、といった監視ができます。例えば AlaxalA のリングプロトコルがこのような実装をしています。
その他、プリンタであればトナーや用紙残数の状態を確認できますし、UPS であればバッテリの状態なども確認できます。
上記は SNMP trap/inform による能動的な通知に対応しているものもあります。
リソース監視
CPU やメモリ、HDD の空き容量、ネットワークインタフェースの流量を監視し、一定の閾値以上になった場合にアラートを上げます。
プロセス監視
監視エージェントが OS の状態を覗き、特定のプロセス (例えば Windows の IIS サービスや Linux の Postfix 等) が動作しているかを定期的に確認し、プロセスが無い場合にアラートを上げます。
Linux の場合、SNMP Agent の net-snmp パッケージを使って、ベンダ独自の拡張 MIB を Request した場合に、予め仕込んだスクリプト (シェルスクリプト or Perl プラグイン) を走らせ、その結果を SNMP Response に乗せる、といったこともできるので、これによりプロセス監視を実装できたりもします。
例えば、以下のようなシェルスクリプトファイル "/usr/local/bin/httpd-proc.sh" を作成します。
#!/bin/sh NUMPIDS=`pgrep httpd | wc -l` exit $NUMPIDS
次に、 /etc/snmp/snmpd.conf に以下を記述します。
extend httpd_pids /bin/sh /usr/local/bin/httpd-proc.sh
そして net-snmp を再起動します。
[root@localhost ~]# systemctl restart net-snmp
そして、先程のスクリプトが拡張 MIB のどの OID に含まれたかを確認します。
snmptranslate -On NET-SNMP-EXTEND-MIB::nsExtendObjects
そして SNMP Manager から、表示された OID へ接続しに行けば OK です。
syslog監視
rsyslog 等では、特定のキーワードが記載されたログが出た際に、アラートを上げることができます。設定例については以下を参照下さい。
コメント