ClusterControlには、他の監視システムにはない特徴的なアラート(またはアラーム)が多数付属しています。 ClusterControlは、データベースクラスタートポロジ全体を理解します。すべてのデータベースノードと、依存ノードまたはスレーブクラスター、リバースプロキシ、アービトレーターノードなどのクラスターを含むそれらの間の関係を理解します。たとえば、ClusterControlは、パーティション化されたクラスター、クラスター内のすべてのノード間の時間ドリフト、クラスター回復の失敗、クラスター間のレプリケーションの失敗、およびクラスター全体に固有のさらに多くのアラームを検出して報告できます。したがって、ClusterControlアラームを既存のSNMPベースの監視またはページングシステムと統合できれば素晴らしいと思います。
このブログシリーズでは、ClusterControlをSNMPプロトコルと統合する方法の概念実証を紹介します。ブログシリーズの最後に、最終的にSNMPトラップをSNMPマネージャー(Nagios、Zabbixなど)に送信できるようになります。このパートでは、次のパートについて説明します。
- MIB(SNMPオブジェクト定義)
- SNMPエージェント(レポート)
この例では、SNMPマネージャーとしてNagiosサーバーがあり、次の図に示すように、ClusterControlサーバー(SNMPエージェント)が3ノードのGaleraクラスターを監視しています。
ClusterControlサーバーへのSNMPのインストール
1)SNMP関連のパッケージをインストールします:
$ yum -y install net-snmp net-snmp-perl net-snmp-utils perl-Net-SNMP perl-CPAN
2)/etc/snmp/snmpd.confのコンテンツに次の内容が含まれていることを確認してください。
$ grep -v '^\s*$\|^\s*\#' /etc/snmp/snmpd.conf
com2sec notConfigUser default public
com2sec mynet 192.168.10.0/16 private
com2sec mynet localhost private
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
group myGroup v2c mynet
view all included .1
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
access notConfigGroup "" any noauth exact systemview none none
access myGroup "" any noauth exact all all none
master agentx
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <[email protected]> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
ちょっとした説明:
-
SeveralninesのMIBはプライベートコンポーネントであるため、ネットワーク192.168.10.0/16のみを許可する必要があります。およびlocalhostは、SNMPデータを照会します。これは「com2sec」セクションで定義します。
-
次に、「mynet」ネットワークからの接続のみを許可する「myGroup」というセキュリティグループを作成します。プロトコルSNMPバージョン2cを受け入れます。
-
次に、ビュー(リクエスターから見えるもの)を定義します。 「すべて」は、SNMPリクエスターがすべてを表示できることを意味します(OID .1から開始)。 「systemview」は、ホスト名、日時など、パブリックSNMPユーザーのデフォルトである安全に公開される情報にのみ制限されます。
-
次に、「myGroup」に「すべて」のビューを許可します。
3)SNMPサービスを再起動して、変更をロードします。
$ systemctl restart snmpd
4)これで、snmpwalkを実行すると、いくつかのMIBが表示されるはずです。
$ snmpwalk -v2c -cpublic localhost # should return limited entries
$ snmpwalk -v2c -cprivate localhost # should return thousands of entries because the private view starts with .1
ClusterControlサーバーへのClusterControlMIBのインストール
MIBは管理情報ベースの略です。これは、特定のSNMP機器で使用されるデータオブジェクトを一覧表示するフォーマットされたテキストファイルです。 MIBがないと、SNMPで使用されるOIDを「モノ」に変換できません。 SNMP MIB定義は、RFC 1212に従って簡潔なMIB形式で記述されています。Severeninesには独自のプライベートエンタープライズ番号(PEN)57397があります。登録済みのエンタープライズ番号データベースはここで確認できます。
1)SEVERALNINES-CLUSTERCONTROL-MIB.txtをコピーして、/ usr / share / snmp/mibsの下に置きます。 SNMPが検索するMIBパスを確認するには、次のコマンドを使用します。
$ net-snmp-config --default-mibdirs
2)カスタムMIBをロードするには、/ etc / snmp / snmp.confに新しい構成ファイルを作成し(「d」なしで通知)、次の行を追加する必要があります。
mibs +SEVERALNINES-CLUSTERCONTROL-MIB
3)/ etc / sysconfig / snmpd内に次の行を追加して、SNMPサービスへのリモートアクセスを許可します。
OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
4)SNMPデーモンを再起動して変更をロードします:
$ systemctl restart snmpd
5)MIBが正しくロードされているかどうかを確認するには、次のsnmptranslateコマンドを使用します。
$ snmptranslate -IR -On -Tp severalnines
+--severalnines(57397)
|
+--clustercontrolMIB(1)
|
+--alarms(1)
|
+--alarmSummary(1)
| |
| +-- -R-- Integer32 totalAlarms(1)
| | Range: 0..2147483647
| +-- -R-- Integer32 totalCritical(2)
| | Range: 0..2147483647
| +-- -R-- Integer32 totalWarning(3)
| | Range: 0..2147483647
| +-- -R-- Integer32 clusterId(4)
| Range: 0..2147483647
|
+--alarmSummaryGroup(2)
|
+--alarmNotification(3)
|
+--criticalAlarmNotification(1)
+--criticalAlarmNotificationEnded(2)
上記の出力は、ClusterControlのMIBをロードしたことを示しています。この概念実証では、「アラーム」と呼ばれる主要なコンポーネントが1つだけあり、その下に、データ型の横に3つのサブコンポーネントがあります。
-
alarmSummary-アラームの概要。クリティカル、警告、および対応するクラスターIDを表示するだけです。
-
alarmSummaryGroup-SNMPオブジェクトのグループ化。
-
alarmNotification-これはSNMPトラップ定義用です。これがないと、SNMPトラップをSNMPマネージャーが理解できません。
その横の番号は、オブジェクト識別子(OID)を示します。たとえば、totalWarning OIDは.1.3.6.1.4.1.57397.1.1.1.3であり、criticalAlarmNotificationOIDは.1.3.6.1.4.1.57397.1.1.3.1です。民間組織の場合、OIDは常に「.1.3.6.1.4.1」で始まり、その後に企業番号(57397はSevereninesのPEN)、MIBオブジェクトが続きます。
ClusterControlサーバーへのSNMPエージェントのインストール
SNMPオブジェクト出力(クリティカルアラームの数、クラスターIDなど)を「提供」するには、SNMPデーモンをSNMPエージェントで拡張する必要があります。 SNMPでは、このプロトコルをAgentXと呼びます。これは、このセクションのsnmpd.confで定義されています。
master agentx
この概念実証のために、Perlで記述されたスクリプトを用意して、アラームの要約を取得してSNMP/OID形式で報告します。
1)Perl SNMPコンポーネントをインストールします:
$ yum install perl-Net-SNMP
2)SNMPプロセスがアクセスできる場所にclustercontrol-snmp-agent.plを配置します。 / usr / share/snmpディレクトリの下に配置することをお勧めします。
$ ls -al /usr/share/snmp/clustercontrol-snmp-agent.pl
-rwxr-xr-x 1 root root 2974 May 10 14:16 /usr/share/snmp/clustercontrol-snmp-agent.pl
3)スクリプト内で次の行を構成します(14行目から17行目):
my $clusterId = 23; # cluster ID that you want to monitor
my $totalAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | wc -l`;
my $criticalAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | grep CRITICAL | wc -l`;
my $warningAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | grep WARNING | wc -l`;
4)実行可能権限でスクリプトを設定します:
$ chmod 755 /usr/share/snmp/clustercontrol-snmp-agent.pl
5)スクリプトを実行します:
$ perl /usr/share/snmp/clustercontrol-snmp-agent.pl
NET-SNMP version 5.7.2 AgentX subagent connected
「サブエージェント接続」の行が表示されていることを確認してください。この時点で、ClusterControlアラームはSNMPプロトコルを介して正しく報告されるはずです。確認するには、snmpwalkコマンドを使用して、リモートサーバー、たとえばNagiosサーバーから実行します(snmpwalkはnet-snmp-utilsパッケージによって提供されます):
$ snmpwalk -v2c -c private 192.168.10.50 .1.3.6.1.4.1.57397.1.1.1
SEVERALNINES-CLUSTERCONTROL-MIB::totalAlarms = INTEGER: 3
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2
SEVERALNINES-CLUSTERCONTROL-MIB::totalWarning = INTEGER: 1
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 23
または、代わりにMIBオブジェクト名を使用して、同じ結果を生成することもできます。
$ snmpwalk -v2c -c private 192.168.10.50 SEVERALNINES-CLUSTERCONTROL-MIB::alarmSummary
SEVERALNINES-CLUSTERCONTROL-MIB::totalAlarms = INTEGER: 3
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2
SEVERALNINES-CLUSTERCONTROL-MIB::totalWarning = INTEGER: 1
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 23
これは、ClusterControlをSNMPプロトコルと統合する方法に関する非常に単純な概念実証(PoC)です。次のエピソードでは、ClusterControlサーバーからNagios、Zabbix、SensuなどのSNMPマネージャーにSNMPトラップを送信する方法を検討します。