インストール
yumでインストール$sudo yum install net-snmpこれでなにやら「snmpconf」snmpd」「snmptrapd」 がインストールされるらしい。
あれ?参考サイトとかに書いてある「snmpwalk」がねぇぞ?
というわけでutilityも入れてみる。
$sudo yum install net-snmp-utilsこれで以下のコマンドがインストールされる
$ snmp snmpbulkget snmpdelta snmpinform snmptable snmptrapd snmpbulkwalk snmpdf snmpnetstat snmptest snmpusm snmpconf snmpget snmpset snmptranslate snmpvacm snmpd snmpgetnext snmpstatus snmptrap snmpwalk
設定ファイルはここにできたらしい。
$ ls /etc/snmp/ snmpd.conf snmptrapd.confちゃんとサービスにも登録されてるらしい。
$ service snmpd status snmpd is stoppedさっそくデーモン起動
$sudo service snmpd start Starting snmpd: [ OK ]初期状態で試してみる、オプションの意味は「-v 1(SNMPv1モード)」「-c public(publicコミュニティ)」 「localhost(エージェント名はlocalhost)」みたい。
$ snmpwalk -v 1 -c public localhost SNMPv2-MIB::sysDescr.0 = STRING: (バージョン情報) SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (125598) 0:20:55.98 SNMPv2-MIB::sysContact.0 = STRING: Rootうまくいったらしい、忘れないうちに自動起動の設定(configure /etc/snmp/snmp.local.conf) SNMPv2-MIB::sysName.0 = STRING: (鯖のURI) SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf) SNMPv2-MIB::sysORLastChange.0 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1 SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching. SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching. SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB. SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP. SNMPv2-MIB::sysORUpTime.1 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.2 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.3 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.4 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.5 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.6 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.7 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.8 = Timeticks: (2) 0:00:00.02 HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (173763490) 20 days, 2:40:34.90 End of MIB
$ chkconfig --list snmpd snmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off $ sudo chkconfig snmpd on $ chkconfig --list snmpd snmpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
snmpdの設定ファイル(snmpd.conf)を編集
設定ファイルを覗いてみると、だいたいどんなことができるのか書いてあった。 とりあえず幾つかは設定してみる。Access Control(アクセスコントロール)
「1番目に、コミュニティ名とセキュリティ名を関連付ける」と書いてあるので、とりあえず「セキュリティ名local(ソースはlocalhost)とコミュニティpublic」を関連付ける。
ネットワークの場合はsourceにネットワークアドレスを設定すりゃいいらしい。
#### # First, map the community name "public" into a "security name" # sec.name source community #com2sec notConfigUser default public com2sec local localhost public com2sec mynetwork 192.168.0.0/24 public「2番めに、セキュリティ名をグループ名に挿入する」と書いてある。
「sevurityModel」にはSNMPで用意されているセキュリティモデルを設定するらしい。
「local_group」に「セキュリティモデルv1、セキュリティ名local」「セキュリティモデルv2c、セキュリティ名local」「セキュリティモデルusm、セキュリティ名local」を追加した。
「mynet_group」にも同じように設定。
#### # Second, map the security name into a group name: # groupName securityModel securityName #group notConfigGroup v1 notConfigUser #group notConfigGroup v2c notConfigUser group local_group v1 local group local_group v2c local group local_group usm local group mynet_group v1 mynetwork group mynet_group v2c mynetwork group mynet_group usm mynetwork「3番目に、ビューを作る」とかいてあるので、
「all_view」というビューにサブツリー「.1(つまり全て)」を「included(追加)」する、マスクはかけない。
#### # Third, create a view for us to let the group have rights to: # Make at least snmpwalk -v 1 localhost -c public system fast again. # name incl/excl subtree mask(optional) #view systemview included .1.3.6.1.2.1.1 #view systemview included .1.3.6.1.2.1.25.1.1 view all_view included .1「最後に、アクセス権を設定する」とあるので、
グループに対してどのビューを読み込み・書き込み・通知
#### # Finally, grant the group read-only access to the systemview view. # group context sec.model sec.level prefix read write notif #access notConfigGroup "" any noauth exact systemview none none access local_group "" any noauth exact all_view none none access mynet_group "" any noauth exact all_view none noneとりあえずここらで試してみるために再起動して実行してみると、なんかすごい量の情報が出てくる。
$ sudo service snmpd restart Stopping snmpd: [ OK ] Starting snmpd: [ OK ] $ snmpwalk -v 1 -c public localhost (省略)修正前は「systemview」を使って「.1.3.6.1.2.1.1(systemグループ)」と「.1.3.6.1.2.1.25.1.1( hrSystemUptime)」の以下の情報しか見ていなかったが、修正後は「all_view」を使って「.1」以下の情報を表示するようにしたかららしい。
これで上記の設定がうまくいっていることが確認できた。
ちなみに、どんなサブツリーがあるかはMIBdepotの検索ページをわかるらしいが、そもそも検索キーワドすらわかんないという人はググるといい。 ちなみに規約的にはRFC1213だが、ベンダーが拡張することもできる(1.3.6.1.4系統)のでこれだけ読んだってよくわからないというね・・・
System contact information(コンタクト情報)
システムのコンタクト情報として、設置場所(syslocation)と管理者の連絡先(syscontact)を設定する。 複数設定しても最後に書いた一つしか採用されないらしいので、連絡先はMLとかがいいかも?# It is also possible to set the sysContact and sysLocation system # variables through the snmpd.conf file: #syslocation Unknown (edit /etc/snmp/snmpd.conf) #syscontact Root再起動してsnmpwalkするとこんな感じ(configure /etc/snmp/snmp.local.conf) syslocation Sakura VPS syscontact Root
ポイント:RFC1213で定義されているものについてはIDではなくオブジェクト名(systemとか)で指定できるらしい。
$ snmpwalk -v 1 -c public localhost system SNMPv2-MIB::sysDescr.0 = STRING: Linux www8308uf.sakura.ne.jp 3.3.4 #1 SMP Thu May 3 17:49:57 JST 2012 x86_64 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (447) 0:00:04.47 SNMPv2-MIB::sysContact.0 = STRING: Root(以下略)
Logging(ログの設定)
(そのうち確認する)Process checks.(プロセス監視の設定)
とりあえず、今動いているプロセスを見てみる$ snmpwalk -v2c -c public localhost HOST-RESOURCES-MIB::hrSWRunNameもしくは以下でもOK
$ snmpwalk -v2c -c public localhost 1.3.6.1.2.1.25.4.2.1.2とりあえず、一旦止めても大丈夫そうなのを探してみる
HOST-RESOURCES-MIB::hrSWRunName.1168 = STRING: "ntpd"設定ファイルに以下を追加。
ちなみに意味は「プロセスntpdが1個以上2個以下稼働していればOK」
英語でも書かれている通り、「proc ntpd」とすることもできる。
############################################################################### # Process checks. # # The following are examples of how to use the agent to check for # processes running on the host. The syntax looks something like: # # proc NAME [MAX=0] [MIN=0] # # NAME: the name of the process to check for. It must match # exactly (ie, http will not find httpd processes). # MAX: the maximum number allowed to be running. Defaults to 0. # MIN: the minimum number to be running. Defaults to 0. proc ntpd 2 1確認には「1.3.6.1.4.1.2021.2」を使う
$ snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.2 UCD-SNMP-MIB::prIndex.1 = INTEGER: 1 UCD-SNMP-MIB::prNames.1 = STRING: ntpd UCD-SNMP-MIB::prMin.1 = INTEGER: 1 UCD-SNMP-MIB::prMax.1 = INTEGER: 2 UCD-SNMP-MIB::prCount.1 = INTEGER: 1 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: noError(0) UCD-SNMP-MIB::prErrMessage.1 = STRING: UCD-SNMP-MIB::prErrFix.1 = INTEGER: noError(0) UCD-SNMP-MIB::prErrFixCmd.1 = STRING:さて、止めてみるとどうなるか? エラーフラグが1になってるね
$ sudo service ntpd stop Shutting down ntpd: [ OK ] $ snmpwalk -v2c -c public localhost 1.3.6.1.2.1.25.4.2.1.2 |grep ntpd $ snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.2 UCD-SNMP-MIB::prIndex.1 = INTEGER: 1 UCD-SNMP-MIB::prNames.1 = STRING: ntpd UCD-SNMP-MIB::prMin.1 = INTEGER: 1 UCD-SNMP-MIB::prMax.1 = INTEGER: 2 UCD-SNMP-MIB::prCount.1 = INTEGER: 0 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: error(1) UCD-SNMP-MIB::prErrMessage.1 = STRING: Too few ntpd running (# = 0) UCD-SNMP-MIB::prErrFix.1 = INTEGER: noError(0) UCD-SNMP-MIB::prErrFixCmd.1 = STRING:ntpdを再起動するとエラーも消えます。
$ sudo service ntpd start Starting ntpd: [ OK ] $ snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.2 UCD-SNMP-MIB::prIndex.1 = INTEGER: 1 UCD-SNMP-MIB::prNames.1 = STRING: ntpd UCD-SNMP-MIB::prMin.1 = INTEGER: 1 UCD-SNMP-MIB::prMax.1 = INTEGER: 2 UCD-SNMP-MIB::prCount.1 = INTEGER: 1 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: noError(0) UCD-SNMP-MIB::prErrMessage.1 = STRING: UCD-SNMP-MIB::prErrFix.1 = INTEGER: noError(0) UCD-SNMP-MIB::prErrFixCmd.1 = STRING:
Executables/scripts (スクリプト実行)
(そのうちためす)disk checks (ディスク監視)
ディスクの空き容量などを監視できるらしい。 まずは現在の空き容量を確認してみる。$ df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/vda3 207098852 12853084 183878224 7% / tmpfs 1028012 0 1028012 0% /dev/shm /dev/vda1 262276 97727 151297 40% /bootとりあえずテストとして、ちょっとでも増えたらエラーになるように設定してみる。 「1.3.6.1.4.1.2021.9」で確認
############################################################################### # disk checks # # The agent can check the amount of available disk space, and make # sure it is above a set limit. # disk PATH [MIN=100000] # # PATH: mount path to the disk in question. # MIN: Disks with space below this value will have the Mib's errorFlag set. # Default value = 100000. # Check the / partition and make sure it contains at least 10 megs. #disk / 10000 disk / 183878000再起動した後、設定が適用されたことを確認
$ sudo service snmpd restart Stopping snmpd: [ OK ] Starting snmpd: [ OK ] $ snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.9 UCD-SNMP-MIB::dskIndex.1 = INTEGER: 1 UCD-SNMP-MIB::dskPath.1 = STRING: / UCD-SNMP-MIB::dskDevice.1 = STRING: /dev/vda3 UCD-SNMP-MIB::dskMinimum.1 = INTEGER: 183878000 UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: -1 UCD-SNMP-MIB::dskTotal.1 = INTEGER: 207098848 UCD-SNMP-MIB::dskAvail.1 = INTEGER: 183878208 UCD-SNMP-MIB::dskUsed.1 = INTEGER: 12853096 UCD-SNMP-MIB::dskPercent.1 = INTEGER: 7 UCD-SNMP-MIB::dskPercentNode.1 = INTEGER: 1 UCD-SNMP-MIB::dskTotalLow.1 = Gauge32: 207098848 UCD-SNMP-MIB::dskTotalHigh.1 = Gauge32: 0 UCD-SNMP-MIB::dskAvailLow.1 = Gauge32: 183878208 UCD-SNMP-MIB::dskAvailHigh.1 = Gauge32: 0 UCD-SNMP-MIB::dskUsedLow.1 = Gauge32: 12853096 UCD-SNMP-MIB::dskUsedHigh.1 = Gauge32: 0 UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: noError(0) UCD-SNMP-MIB::dskErrorMsg.1 = STRING:とりあえずダミーファイルを作成
$ dd if=/dev/zero of=temp_file bs=1M count=1 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.00167384 s, 626 MB/s $ ls -l temp_file -rw-r--r-- 1 myuser users 1048576 7月 29 17:42 2012 temp_file確認してみると、たしかにエラーになっている。
$ snmpwalk -v 1 localhost -c public .1.3.6.1.4.1.2021.9 UCD-SNMP-MIB::dskIndex.1 = INTEGER: 1 UCD-SNMP-MIB::dskPath.1 = STRING: / UCD-SNMP-MIB::dskDevice.1 = STRING: /dev/vda3 UCD-SNMP-MIB::dskMinimum.1 = INTEGER: 183878000 UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: -1 UCD-SNMP-MIB::dskTotal.1 = INTEGER: 207098848 UCD-SNMP-MIB::dskAvail.1 = INTEGER: 183877184 UCD-SNMP-MIB::dskUsed.1 = INTEGER: 12854120 UCD-SNMP-MIB::dskPercent.1 = INTEGER: 7 UCD-SNMP-MIB::dskPercentNode.1 = INTEGER: 1 UCD-SNMP-MIB::dskTotalLow.1 = Gauge32: 207098848 UCD-SNMP-MIB::dskTotalHigh.1 = Gauge32: 0 UCD-SNMP-MIB::dskAvailLow.1 = Gauge32: 183877184 UCD-SNMP-MIB::dskAvailHigh.1 = Gauge32: 0 UCD-SNMP-MIB::dskUsedLow.1 = Gauge32: 12854120 UCD-SNMP-MIB::dskUsedHigh.1 = Gauge32: 0 UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: error(1) UCD-SNMP-MIB::dskErrorMsg.1 = STRING: /: less than 183878000 free (= 183877184)
load average checks(ロードアベレージの監視)
ロードアベレージを監視して、一定以上になるとエラーにするように出来る。でもわが鯖はこき使う前提なので特に設定しない。
0 comments:
コメントを投稿