SNMP属性トラップ(Alert機能)の確認-Pacemaker1.1.18

Pacemaker1.1.18から追加されている属性のSNMPトラップ機能(Alert)について紹介します。

Pacemaker1.1.17までの構文と異なり、select内に送信するトラップの種類などが追加され、select_attirubteとして属性の変化時のトラップが可能となっています。
また、以前のバージョンでは、crmdプロセスがAlertの実行を担当していましたが、1.1.18からはlrmdを経由する形に変更されました。

ただし、構文にはcrmshも、pcs(多分)もまだ対応していない為、クラスタ構成時に初期のselect構文に対応したAlert設定をcibadminコマンドで流し込む必要があります。
 * ※)一部記載に誤りがあります。crmshは対応していないわけではありませんが、対応リリース版が出ていない状態のようです。pcsは、ちゃんと調べていない為、不明です。 

Pacemakerのドキュメントには、既に機能が記載さています。
 - http://clusterlabs.org/pacemaker/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/_alert_filters.html

#環境
 * SNMPマネジャーノード - SNMPトラップを確認する為に準備しておきます。
 * Pacemakerノード - 確認環境の為、１ノードのみ準備しています。

#動作確認
 * Pacemakerノードを起動します
 * cibadminコマンドで以下の様なxmlテキスト指定を流し込みます。
  * 今回は、属性のトラップのみを確認する為に、select指定ではselect_attributesのみを指定していますが、ノード、フェンシング、リソースなども指定することも可能です。(この辺りの指定については、Pacemakerのドキュメントを参考にしてください。 )
  * また、select構文を指定しないPacemaker1.1.17までの構文も利用可能です。
  * 事前に/usr/share/pacemaker/alert/alert_snmp.sh.sampleをalert_snmp.shに変更して、適切な実行権限など(chmod +xなど)を与えておきます。
 
```
cibadmin --create --xml-text '<configuration> 
    <alerts>
      <alert id="notify1" path="/usr/share/pacemaker/alerts/alert_snmp.sh">
        <select>
          <select_attributes>
            <attribute name="master-pgsql" id="atr1"/>
          </select_attributes>
        </select>
        <instance_attributes id="notify_9-instance_attributes">
          <nvpair name="trap_add_hires_timestamp_oid" value="false" id="notify_9-instance_attributes-trap_add_hires_timestamp_oid"/>
        </instance_attributes>
        <recipient id="notify_9-recipient-1" value="192.168.40.1"/>
      </alert>
    </alerts></configuration>'

```

 * 続けて、crmコマンドで簡易なDummyリソースの設定を流し込みます。
 
```
[root@rh73-01 ~]# crm_mon -1    
Stack: corosync
Current DC: rh73-01 (version 1.1.18-2b07d5c5a9) - partition with quorum
Last updated: Tue Apr 24 22:56:44 2018
Last change: Tue Apr 24 22:55:46 2018 by root via cibadmin on rh73-01

1 node configured
1 resource configured

Online: [ rh73-01 ]

Active resources:

 Resource Group: grpDummy
     prmDummy2  (ocf::pacemaker:Dummy): Started rh73-01
```

 * Dummyリソースが起動し、クラスタ構成が完了したら、次のコマンドで、master-pgsql属性を変化させてみます。

```
[root@rh73-01 ~]# attrd_updater -n master-pgsql -v 10
```

 * SNMPマネージャーにトラップが送信されます

```
Apr 24 22:56:43 rh68-stone snmptrapd[1986]: 2018-04-24 22:56:43 <UNKNOWN> [UDP: [192.168.40.80]:39843->[192.168.40.1]]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (806113) 2:14:21.13#011SNMPv2-MIB::snmpTrapOID.0 = OID: PACEMAKER-MIB::pacemakerNotificationTrap#011PACEMAKER-MIB::pacemakerNotificationNode = STRING: "rh73-01"#011PACEMAKER-MIB::pacemakerNotification.8 = STRING: "master-pgsql"#011PACEMAKER-MIB::pacemakerNotification.9 = STRING: "10"
```

 * さらに、次のコマンドで属性を再度変化させてみます。

```
[root@rh73-01 ~]# attrd_updater -n master-pgsql -v 20
```

 * 再び、SNMPマネージャーにトラップが送信されます

```
Apr 24 22:56:53 rh68-stone snmptrapd[1986]: 2018-04-24 22:56:53 <UNKNOWN> [UDP: [192.168.40.80]:43292->[192.168.40.1]]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (807093) 2:14:30.93#011SNMPv2-MIB::snmpTrapOID.0 = OID: PACEMAKER-MIB::pacemakerNotificationTrap#011PACEMAKER-MIB::pacemakerNotificationNode = STRING: "rh73-01"#011PACEMAKER-MIB::pacemakerNotification.8 = STRING: "master-pgsql"#011PACEMAKER-MIB::pacemakerNotification.9 = STRING: "20"

```

 * 実際には、DRBDやpgsql(PG-REX)などでの属性を指定して監視することで運用に利用できるかと思います。
  * トラップ監視出来る属性にはattrdを経由して送受信される属性のみという制限があるので注意が必要です。
   * pgsql(PG-REX)では、pgsql-data-status属性以外の変化がトラップ可能です。

#その他