2012年7月29日日曜日

[SNMP]net-snmpインストールとsnmpdの設定

なんだかんだでSNMPに関わりそうになってきたので、 試しに自分の鯖にSNMP(net-snmp 5.5)入れてみたのでメモ。

インストール

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  (configure /etc/snmp/snmp.local.conf)
syslocation Sakura VPS 
syscontact Root  
再起動してsnmpwalkするとこんな感じ
ポイント: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(ロードアベレージの監視)

ロードアベレージを監視して、一定以上になるとエラーにするように出来る。
でもわが鯖はこき使う前提なので特に設定しない。

Extensible sections(拡張セクション)

(そのうちためす)

Pass through control.

(そのうちためす)

0 comments:

コメントを投稿