RHEL 6.1 で、クラスタノードを設定してクラスタリングに対して SNMP トラップを送る方法
Issue
- はじめに
- システム構成
- Foghorn が提供する SNMP トラップとは何ですか?
- SNMP クライアントの設定
- SNMPTrapd サーバーの設定
- SNMP トラップをキャッチしたことを確認
- SNMP トラップをキャッチすると起こること
はじめに
Red Hat Enterprise Linux (RHEL) 5 以降では高可用性クラスタリングには SNMP MIB がありますが、送信される SNMP トラップはフェンシングや、クラスターサービス状態変化ステータスなどは対象としていませんでした。RHEL 6.1 では、これらのトラップを送信する foghorn という名の新しいパッケージが導入されました。foghorn サービスは、特定の D-Bus シグナルをリッスンするデーモンで、これらのシグナルを SNMPv2 トラップに翻訳します。現在、foghorn は、5 つの D-Bus シグナルをリッスンし、5 つの SNMPv2 トラップを生成します。foghorn サービスは、messagebus (dbus-daemon) サービスおよび snmpd サービスが実行している必要があります。Foghorn は、トラップをリッスンしている snmp サーバーが必要です。
snmp サーバーを、監視している別のクラスターノードにはしませんが、クラスターに含まれるトラップをキャッチする別のホストにします。 この記事では、cluster-snmp および foghorn パッケージにある SNMP トラップの送受信について記載しています。
SNMP および foghorn の詳細については、以下を参照してください。
- 10.2.Configuring SNMP with the Red Hat High Availability Add-On
- How do I configure an SNMP server on Red Hat Enterprise Linux?
- How do I monitor my Red Hat Enterprise Linux 4, 5 and 6 Clustering with net-snmp?
ここでは、サーバーに送信されたトラップをキャッチする snmptrapd サーバー (snmptrap サーバー) を設定します。事前に設定された snmptrapd サーバー、または SNMP トラップを収集するネットワーク管理デバイスがすでに存在する場合、snmptrapd サービスは必要ありません。
システム構成
- Red Hat Enterprise Linux Server 6.1 (および High Availability Add on)
Foghorn が提供する SNMP トラップとは何ですか?
Foghorn は、cluster-snmp パッケージに含まれる SNMP トラップを追加します。fenced、rgmanager、および corosync にトラップが追加されます。
- fenced:
fenced DBus interface: com.redhat.cluster.fence SNMP MIB:REDHAT-FENCE-MIB DBus signal SNMP trap FenceNode fenceNotifyFenceNode (1) string fenceNodeName.0 (2) int32 fenceNodeID.0 (3) int32 fenceResult.0
- rgmanager:
rgmanager DBus interface: com.redhat.cluster.rgmanager SNMP MIB:REDHAT-RGMANAGER-MIB DBus signal SNMP trap ServiceStateChange rgmanagerServiceStateChange (1) string rgmanagerServiceName.0 (2) string rgmanagerServiceState.0 (3) string rgmanagerServiceFlags.0 (4) string rgmanagerServiceCurrentOwner.0 (5) string rgmanagerServicePreviousOwner.0
- corosync:
corosync DBus interface: org.corosync SNMP MIB:COROSYNC-MIB DBus signal SNMP trap NodeStateChange corosyncNoticesNodeStatus (1) string corosyncObjectsNodeName.0 (2) uint32 corosyncObjectsNodeID.0 (3) string corosyncObjectsNodeAddress.0 (4) string corosyncObjectsNodeStatus.0 DBus signal SNMP trap QuorumStateChange corosyncNoticesQuorumStatus (1) string corosyncObjectsNodeName.0 (2) uint32 corosyncObjectsNodeID.0 (3) string corosyncObjectsQuorumStatus.0 DBus signal SNMP trap ConnectionStateChange corosyncNoticesAppStatus (1) string corosyncObjectsNodeName.0 (2) uint32 corosyncObjectsNodeID.0 (3) string corosyncObjectsAppName.0 (4) string corosyncObjectsAppStatus.0
SNMP クライアントの設定
ここでは、特定のトラップをリッスンし、テキストファイルにトラップを書き込むサーバーを正しく設定するために実行する必要があるすべての手順が記載されています。この 3 ノードクラスターで使用されるクラスターノードは、rh6node1.examplerh.com、rh6node2.examplerh.com、rh6node3,examplerh.com となります。ホスト snmptrapserver.examplerh.com は、クラスターのすべてのクラスターノードからトラップをキャッチする snmp サーバーです。
必要なパッケージをすべてインストールします。クラスターのすべてのノードで以下を実行します。
$ yum -y install foghorn cluster-snmp net-snmp net-snmp-utils
すべてのクラスターノードで以下のコマンドを実行すると、SNMP トラップが corosync に対して生成されます。
$ echo "OPTIONS=\"-d\" " > /etc/sysconfig/corosync-notifyd
foghorn サービスは AgentX を使用して、snmpd (マスターエージェント) と通信します。すべてのノードで /etc/snmp/snmpd.conf ファイルを編集します。ファイルの最後に以下を追加します。
###############################################################################
# Cluster SNMP Traps
###############################################################################
dlmod RedHatCluster /usr/lib64/cluster-snmp/libClusterMonitorSnmp.so
view systemview included REDHAT-CLUSTER-MIB:redhatCluster
###############################################################################
# Foghorn
###############################################################################
master agentx
trap2sink snmptrapserver.examplerh.com
SNMP クライアントに対して起動時にサービスを開始
マシンを起動したあとに SNMP トラップを送信したい場合は、起動時にサービスを開始する必要があります。
$ chkconfig messagebus on
$ chkconfig snmpd on
$ chkconfig corosync-notifyd on
$ chkconfig foghorn on
SNMP クライアントに対してサービスを開始
それぞれのサービスは前のサービスに依存するため、この特定の順番ですべてサービスを開始します。corosync-notifyd を開始するまえに cman サービスを開始する必要があります。
$ service messagebus restart
$ service snmpd start
$ service forghorn start
$ service corosync-notifyd start
SNMPTrapd サーバーの設定
snmp トラップをキャッチする他のサービスがない場合は snmptrapd サービスだけが必要になります。SNMP トラップをリッスンしているネットワーク管理デバイスまたは SNMP サービスがある環境もあります。以下は、サービスに送信される SNMP トラップをキャッチする snmptrapd サービスのインストールおよび設定方法を説明します。
送信された snmp トラップをサーバーがキャッチするのに必要なパッケージをすべてインストールします。snmpd および foghorn サービスは、開始する必要はありません。SNMP トラップを、以下から人間が読めるコードに翻訳するために必要とされる MIB を含むパッケージがインストールされます。
$ yum -y install foghorn cluster-snmp net-snmp
/var/log/messagesファイルがすべてのSNMPを含んでいないために、/etc/snmp/snmptrapd.conf 設定ファイルを編集します。すべてのトラップは、/var/log/snmptrapd.logで
# Authorises traps with the specified community to trigger the types of processing listed.
authCommunity log,execute,net public
# Add a trap handler for fenced,rgmanager notification.
traphandle REDHAT-FENCE-MIB::fenceNotifyFenceNode /root/bin/fenced-FenceNotifyFenceNode.sh
traphandle REDHAT-RGMANAGER-MIB::rgmanagerServiceStateChange /root/bin/rgmanager-ServiceStateChange.sh
/etc/sysconfig/snmptrapd 設定ファイルを編集すると、/var/log/messages ファイルにはすべての SNMP トラップが含まれません。すべてのトラップのログは /var/log/snmptrapd.log ファイルに記録されます。
# snmptrapd command line options
# OPTIONS="-Lsd -p /var/run/snmptrapd.pid"
OPTIONS="-Lf /var/log/snmptrapd.log -p /var/run/snmptrapd.pid"
このドキュメントに添付されているバイナリをインストールします。/root/bin ディレクトリにインストールされる 2 つのバイナリがあります。
$ mkdir /root/bin
$ tar jxvf snmptrapd-scripts.tar.bz2
$ cp /root/snmptrapd-scripts/* /root/bin
$ chmod 700 /root/bin/fenced-FenceNotifyFenceNode.sh
$ chmod 700 /root/bin/rgmanager-ServiceStateChange.sh
SNMPTrapd サーバーに対して起動時にサービスを開始
マシンを起動したあとに SNMP トラップを受信したい場合は、起動時にサービスを開始する必要があり、これは、snmp トラップをリッスンしているホストに対して有効にする必要があります。この例では、snmptrapserver.examplerh.com となります。
$ chkconfig snmpdtrapd on
SNMPTrapd サーバーに対してサービスを開始
snmp サーバーで snmptrapd サービスを開始するだけです。ここでは、snmptrapserver.examplerh.com となります。
$ service snmptrapd start
SNMP トラップをキャッチしたことを確認
このコマンドを使用して、フェンスイベントに送信される SNMP トラップをシミュレートします。dbus は、dbus メッセージを SNMP トラップに変更する foghorn によってキャッチされるメッセージを送ります。メッセージには、rh6node3.examplerh.com(nodeID:3) had an unsuccesfully(-1) fence と書かれています。メッセージがキャッチされたらメッセージは root のメールボックスに送られる必要があります。そして、ファイルへのログを有効にすると、ログエントリーは /var/log/snmptrapd-traps/fenced.log に書き込まれる必要があります。
$ dbus-send --system --type=signal / com.redhat.cluster.fence.FenceNode string:rh6node3.examplerh.com int32:3 int32:-1
クラスター名を取得すると、snmpd が正しく機能していることを確認します。
$snmpwalk -v 1 -c public localhost REDHAT-CLUSTER-MIB:rhcClusterName.0
REDHAT-CLUSTER-MIB::rhcClusterName.0 = STRING:"rh6nodesThree"
このコマンドは、定期的な SNMP トラップを送信し、この SNMP トラップのログを /var/log/snmptrapd.log に記録する必要があります。
$ snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.116.33960.0.10002 .1.3.6.1.4.1.116.33960.0.1000 s "TEST"
SNMP トラップをキャッチすると起こること
すべての SNMP トラップのログが、/var/log/messages ではなく、/var/log/snmptrapd.log に記録されます。設定では、定義した SNMP トラップがキャッチされた場合にバイナリを実行するトラップハンドラーをいくつか定義しました。
- REDHAT-FENCE-MIB::fenceNotifyFenceNode: /root/bin/fenced-FenceNotifyFenceNode.sh
- REDHAT-RGMANAGER-MIB::rgmanagerServiceStateChange: /root/bin/rgmanager-ServiceStateChange.sh
バイナリを実行すると、root@localhost にメッセージを送信し、ファイルへのログが有効の場合に、SNMP トラップを /var/log/snmptrapd-traps/ ディレクトリのログファイルに書き込みます。
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.