SNMPトラップの確認-Pacemaker1.1.13(簡易ですが。。。)

corosyncとPacemakerのSNMPトラップをSNMPマネージャー(snmptrapd)で確認する環境を簡易に作成してみます。

# SNMPマネージャー(トラップの監視側)のインストール
 * SNMPマネージャーノードとして、CentOS7を最小インストールします。
  * 念の為、firewalldは停止しておきます。
  * この例では、SNMPマネージャーのIPアドレスは192.168.40.2だということとします。
 * DVD(もしくはiso)をマウントして参照できるようにリポジトリに登録します。
 * net-snmpをインストールします。

```
[root@snmp-manager2 Packages]# yum install net-snmp

(snip)
依存性関連をインストールしました:
(snip)
  perl-libs.x86_64 4:5.16.3-285.el7       perl-macros.x86_64 4:5.16.3-285.el7       perl-parent.noarch 1:0.225-244.el7    perl-podlators.noarch 0:2.5.1-3.el7          perl-threads.x86_64 0:1.87-4.el7      
  perl-threads-shared.x86_64 0:1.43-6.el7

完了しました!
```
 * corosync+PacemakerのMIBファイルを転送しておきます
   * COROSYNC-MIB.txt、PCMK-MIB.txtをcorosync+Pacemakerをインストールしたノードから、SNMPマネージャーノードの /usr/share/snmp/mibs/ディレクトリに転送しておきます。
 * /etc/sysconfig/snmptrapdを編集します。(OPTIONSを変更します)

```
# snmptrapd command line options
# '-f' is implicitly added by snmptrapd systemd unit file
OPTIONS="-Ls6 -p /var/run/snmptrapd.pid"
```

 *  /etc/snmp/snmp.confを新規に作成します。(mibdirs/mibsを追加します)

```
mibdirs /usr/share/snmp/mibs
mibs ALL

```

 * /etc/snmp/snmptrapd.confを編集します。(disableAuthorizationを追加します)

```
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity   log,execute,net public
# traphandle SNMPv2-MIB::coldStart    /usr/bin/bin/my_great_script cold
disableAuthorization yes
```

 * /etc/rsyslog.confを編集します。
   * snmpのトラップを別ログ(local6でsnmptrapd.log)に出力するように編集して、rsyslogを再起動します。
 
```
(snip)
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local6.none                /var/log/messages

(snip)
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local6.* /var/log/snmptrapd.log

```

 * 最後にsnmptrapdサービスを再起動しておきます。

```
[root@snmp-manager2 ~]# systemctl restart snmptrapd
[root@snmp-manager2 ~]# systemctl status snmptrapd
snmptrapd.service - Simple Network Management Protocol (SNMP) Trap Daemon.
   Loaded: loaded (/usr/lib/systemd/system/snmptrapd.service; disabled)
   Active: active (running) since 金 2015-11-20 14:28:55 JST; 3s ago
 Main PID: 10283 (snmptrapd)
   CGroup: /system.slice/snmptrapd.service
           └─10283 /usr/sbin/snmptrapd -Ls6 -p /var/run/snmptrapd.pid -f

11月 20 14:28:55 snmp-manager2 snmptrapd[10283]: NET-SNMP version 5.7.2
11月 20 14:28:55 snmp-manager2 systemd[1]: Started Simple Network Management Protocol (SNMP) Trap Daemon..
```

 * トラップが見れるように、SNMPマネージャーノードでログを監視します。

```
[root@snmp-manager2 ~]# tail -f /var/log/snmptrapd.log 
Nov 20 14:30:19 snmp-manager2 snmptrapd[10283]: 2015-11-20 14:30:19 NET-SNMP version 5.7.2 Stopped.
Nov 20 14:30:19 snmp-manager2 snmptrapd[10283]: Stopping snmptrapd
Nov 20 14:30:19 snmp-manager2 snmptrapd[10291]: NET-SNMP version 5.7.2
```

# corosync+Pacemaker(トラップの送信元)での設定
 * corosyncのトラップ送信用に/etc/sysconfig/corosync-notifydを作成します。
  * -mパラメータで送信先のSNMPマネージャーを指定します。
 
```
OPTIONS="-s -m 192.168.40.2"
```

 * Pacemakerのトラップ送信用に/etc/sysconfig/crm_monを編集します。
  * -Sパラメータで送信先のSNMPマネージャーを指定します。

```
#
# Example for SNMP : OPTIONS="-d -S <snmp manager address> -W -p <pid file>"
#    OPTIONS="-d -S 192.168.40.2 -W -p /tmp/ClusterMon-upstart.pid"
#
# Please refer to a help and a manual for the detailed option.
#
OPTIONS="-d -S 192.168.40.2 -W -p /var/run/ClusterMon-upstart.pid"
```

 * corsoync,corosync-notifyd,crm_mon,pacemakerを起動(startやsystemctl)します。
    * なお、SNMPが利用出来るように構築されているモジュールを利用する必要があります。
  
# SNMPトラップの確認
 *  crmコマンドなどでPacemakerのクラスタでリソースを起動するとSNMPマネージャーノードのログにトラップが出力されます。
 * クラスタを構成するノードの停止や起動でもトラップは確認出来ます。

```
[root@snmp-manager2 ~]# tail -f /var/log/snmptrapd.log 
Nov 20 14:30:19 snmp-manager2 snmptrapd[10283]: 2015-11-20 14:30:19 NET-SNMP version 5.7.2 Stopped.
Nov 20 14:30:19 snmp-manager2 snmptrapd[10283]: Stopping snmptrapd
Nov 20 14:30:19 snmp-manager2 snmptrapd[10291]: NET-SNMP version 5.7.2
Nov 20 14:31:46 snmp-manager2 snmptrapd[10291]: 2015-11-20 14:31:46 <UNKNOWN> [UDP: [192.168.40.100]:41163->[192.168.40.2]:162]:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1447997505) 167 days, 14:12:55.05     SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.32723.1        SNMPv2-SMI::enterprises.32723.1.2 = STRING: "prmStonith2-1"     SNMPv2-SMI::enterprises.32723.1.1 = STRING: "snmp1"     SNMPv2-SMI::enterprises.32723.1.3 = STRING: "start"     SNMPv2-SMI::enterprises.32723.1.4 = STRING: "OK"        SNMPv2-SMI::enterprises.32723.1.6 = INTEGER: 0  SNMPv2-SMI::enterprises.32723.1.7 = INTEGER: 0  SNMPv2-SMI::enterprises.32723.1.5 = INTEGER: 0

```

現状、crm_monを経由したSNMPトラップはクラスタの再構成時に、通知済みのトラップが再トラップされる事象があります。
これらは、Pacemaker1.1.14以降のSNMPトラップ機能で、改善される予定です。

 * 2015/12/22追記 - 残念ながら、PM1.1.14での新SNMP機能の公式リリースはなくなりました。再度、仕様が検討されてPM1.1.15で登場する模様です。
 * 2016/04/24追記 - PM1.1.15rc1で新SNMP機能が盛り込まれした。もう少しするとリリースですが、その前にまた別途、新SNMP機能について投稿したい思います。

以上です。