はじめに
この連載では監視用プロトコルとして広く知られているSNMPについて設定方法などを交えて説明していきます。今回は実際にSNMPを通して情報の取得および設定を行います。
構築環境はFedora7(2.6.23.17-88.fc7)、32bit、glibc-2.6-4、gcc-4.1.2を使用しています。
これまでの記事
- 第1回:net-snmpについて(基礎知識)
- 第2回:net-snmpについて(環境構築)
5. SNMPによる機器監視
SNMPでやり取りされる情報は、大きく3つの区分に分類されることを2.1章で述べました。当章ではその中の2つ、get-request と set-request について実際の動作に基づいて説明します。
監視したい項目は業務要件などによって異なりますが、一般的に、CPU情報・メモリ情報・ディスク情報・特定プロセスの存在有無、は必須監視項目と言えます。これらの情報は、MIBツリー内のucdavisサブツリー(OID 1.3.6.1.4.1.2021)を参照(get-request)することで得られます。
ucdavisサブツリーはよく知られてる監視対象なので、他のサイトでも詳細に解説されています。よって当レポートでは、取得する方法と取得できる大まかな情報について、なるべく簡単に纏めます。
OID | 名称 | 取得できる情報 |
ucdavis.2 | prTable | 特定のプログラムおよびデーモンが起動しているか調査。snmpd.confの編集が必要。 |
ucdavis.4 | memory | メモリ情報の取得、"/proc/meminfo"の情報を展開している。 |
ucdavis.8 | extTable | 指定されたコマンドの実行と結果。snmpd.confの編集が必要。 |
ucdavis.9 | dskTable | Disk情報の監視、"df -k"の情報を展開している。snmpd.confの編集が必要。 |
ucdavis.10 | laTable | ロードアベレージ情報の取得、"/proc/loadavg"を取得している。 |
ucdavis.11 | systemStats | vmstatコマンドで得られる情報の取得(vmstatは/proc/meminfo /proc/stat等から取得している)。 |
ucdavis.15 | fileTable | 指定されたファイルをstatコマンドによって取得。snmpd.confの編集が必要。 |
個人的な感想ですが、データを取得するためにわざわざsnmpd.confに記述しなくてはいけない(さらにsnmpd
を再起動しなくてはいけない)というのは、スマートな仕様とは思えませんが、まあしょうがない。
5.1 prTable(OID .1.3.6.1.4.1.2021.2)
snmpd.confに必要な情報を設定することで、起動中のプログラムおよびデーモンの起動中・停止中等の情報を取得できます。例えばhttpd(apache)
プロセスとsyslog
デーモンを監視する場合、下記の記述を、/usr/share/snmp/snmpd.conf に記述します。
proc httpd 10 1 <- httpdプロセスが10個以上、1個未満時はエラー proc syslogd <- syslogdが1個も起動していない時はエラー
記述後、snmpd.confを保存し、snmpd
をrestart
します。ついでにhttpd
も起動します。
% service snmpd restart snmpd を停止中: [ OK ] snmpd を起動中: [ OK ] % % service httpd start httpd を起動中: httpd: [ OK ] %
簡易SNMPマネージャである、snmpwalk
コマンドを利用し、ucdavis.prTable に対してアクセスします。
詳しくはTWSNMPのヘルプを参照してください。
% snmpwalk -v 2c -c localcom localhost prTable UCD-SNMP-MIB::prIndex.1 = INTEGER: 1 ↑ リファレンス値:1 UCD-SNMP-MIB::prIndex.2 = INTEGER: 2 ↑ リファレンス値:2 UCD-SNMP-MIB::prNames.1 = STRING: httpd ↑ :1のチェック対象プロセス名 UCD-SNMP-MIB::prNames.2 = STRING: syslogd ↑ :2のチェック対象プロセス名 UCD-SNMP-MIB::prMin.1 = INTEGER: 1 ↑ :1のプロセスの最低起動数 UCD-SNMP-MIB::prMin.2 = INTEGER: 0 ↑ :2のプロセスの最低起動数 UCD-SNMP-MIB::prMax.1 = INTEGER: 10 ↑ :1のプロセスの最大起動数 UCD-SNMP-MIB::prMax.2 = INTEGER: 0 ↑ :2のプロセスの最大起動数 UCD-SNMP-MIB::prCount.1 = INTEGER: 9 ↑ :1の現在起動プロセス数 UCD-SNMP-MIB::prCount.2 = INTEGER: 1 ↑ :2の現在起動プロセス数 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: noError(0) ↑ :1のプロセスのエラー数値 UCD-SNMP-MIB::prErrorFlag.2 = INTEGER: noError(0) ↑ :1のプロセスのエラー数値 UCD-SNMP-MIB::prErrMessage.1 = STRING: ↑ :1プロセスのエラーメッセージ UCD-SNMP-MIB::prErrMessage.2 = STRING: ↑ :2プロセスのエラーメッセージ UCD-SNMP-MIB::prErrFix.1 = INTEGER: noError(0) ↑ 5.8章にて解説 UCD-SNMP-MIB::prErrFix.2 = INTEGER: noError(0) ↑ 5.8章にて解説 UCD-SNMP-MIB::prErrFixCmd.1 = STRING: ↑ 5.8章にて解説 UCD-SNMP-MIB::prErrFixCmd.2 = STRING: ↑ 5.8章にて解説 %
httpd
を停止させ、再度取得します。
% service httpd stop httpd を停止中: [ OK ] % % snmpwalk -v 2c -c localcom localhost prTable ・・・ UCD-SNMP-MIB::prCount.1 = INTEGER: 0 UCD-SNMP-MIB::prCount.2 = INTEGER: 1 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: error(1) UCD-SNMP-MIB::prErrorFlag.2 = INTEGER: noError(0) UCD-SNMP-MIB::prErrMessage.1 = STRING: Too few httpd running (# = 0) UCD-SNMP-MIB::prErrMessage.2 = STRING: ・・・ %
起動していないとエラー情報を取得できます。