sql >> データベース >  >> NoSQL >> MongoDB

ClusterControlとSNMPの統合-概念実証:パート1

    ClusterControlには、他の監視システムにはない特徴的なアラート(またはアラーム)が多数付属しています。 ClusterControlは、データベースクラスタートポロジ全体を理解します。すべてのデータベースノードと、依存ノードまたはスレーブクラスター、リバースプロキシ、アービトレーターノードなどのクラスターを含むそれらの間の関係を理解し​​ます。たとえば、ClusterControlは、パーティション化されたクラスター、クラスター内のすべてのノード間の時間ドリフト、クラスター回復の失敗、クラスター間のレプリケーションの失敗、およびクラスター全体に固有のさらに多くのアラームを検出して報告できます。したがって、ClusterControlアラームを既存のSNMPベースの監視またはページングシステムと統合できれば素晴らしいと思います。

    このブログシリーズでは、ClusterControlをSNMPプロトコルと統合する方法の概念実証を紹介します。ブログシリーズの最後に、最終的にSNMPトラップをSNMPマネージャー(Nagios、Zabbixなど)に送信できるようになります。このパートでは、次のパートについて説明します。

    • MIB(SNMPオブジェクト定義)
    • SNMPエージェント(レポート)
    アーキテクチャ

    この例では、SNMPマネージャーとしてNagiosサーバーがあり、次の図に示すように、ClusterControlサーバー(SNMPエージェント)が3ノードのGaleraクラスターを監視しています。

    この投稿のすべての手順はCentOS7に基づいています。

    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トラップを送信する方法を検討します。


    1. MongoDBストアドプロシージャと同等

    2. MongoDB $ pull

    3. Mongoで$regexと$or演算子を組み合わせる

    4. Redis接続ECONNREFUSED127.0.0.1:6379