net-snmpを拡張する:古いSNMPdの新しいトリックを教える方法

長年の顧客のXNUMX人であるAppfolioは、優れたSaaSを作成しています 資産管理ソフトウェア、LogicMonitorを使用して、Linuxサーバーのフリート全体でいくつかのファイルのサイズを監視する方法を尋ねました。 単純な要求ですが、期待するほど単純ではありません。 何故なの? LogicMonitorは通常使用します SNMP Linuxサーバーを監視するために、サーバーに追加のソフトウェアをインストールする必要がないためです。 (LogicMonitorコレクターをエージェントとしてデプロイし、サーバーごとにXNUMXつずつデプロイする人もいることに注意してください。この場合、スクリプトベースのデータソースを使用して、任意のファイルに対して「ls」を実行できますが、これは別のブログエントリ用です。) SNMPには多くの定義済みOID(質問と回答が可能な質問を表現するための凝った方法)があり、「任意のファイルXの大きさ」に対する定義済みのOIDはありません。 つまり、デフォルトでは、SNMPを使用してシステムにリモートでクエリを実行し、ファイルサイズを決定する方法はありません。

SNMPdの拡張

幸い、事実上すべてのLinuxディストリビューションで使用されているNet-SNMPデーモンを拡張して、この(および他の多くの種類の)機能を提供できます。 たとえば、/ var / pool / rsyslogファイルのサイズを監視するには、次のような行を追加するだけです。

lm-rsyslog-size / usr / bin / du / var / pool / rsyslogを拡張します

snmpd.confに移動し、snmpdを再起動します。 これは、特定のOIDが照会されたときに指定されたコマンドを実行し、結果を返すようにSNMPデーモンに指示します。 これにより、ツリー.1.3.6.1.4.1.8072.1.3.2の下にいくつかの新しいOIDエントリが作成され、大きな長いドット付き1.3.6.1.4.1.8072.1.3.2.2.1.2進インデックスが使用されるため、オブジェクトが何であるかがわかりにくくなります。特にsnmpd.confに複数のextendコマンドがある場合はそうです。 ただし、.XNUMXをウォークすると、snmp拡張機能として追加されたコマンドを確認できます。

snmpwalk servername.1.3.6.1.4.1.8072.1.3.2.2.1.2ウォーキングOID.1.3.6.1.4.1.8072.1.3.2.2.1.2 version = v2c、timeout = 3秒:14.114.97.98.98.105.116.109.113.45.114.101.97.100.121 .15.108.109.45.114.115.121.115.108.111.103.45.115.105.122.101 => / usr / sbin / rabbitmqctl XNUMX => / usr / bin / du

したがって、追加したduコマンドのインデックスは15.108.109.45.114.115.121.115.108.111.103.45.115.105.122.101です。これは、ご存知のとおり、「lm-rsyslog-size」のオクテット文字列表現です。 (ただし、前に1.3.6.1.4.1.8072.1.3.2.3.1.1文字あります。)これで、実行時にコマンドの出力の最初の行を示すテーブル.1(nsExtendOutput1.3.6.1.4.1.8072.1.3.2.3.1.2Line)、またはのいずれかを照会できます。 XNUMX。これは、上記で計算したインデックスを使用して、完全な(複数行の)出力を提供します。 この場合、単一のファイルに対する「du」の出力はXNUMX行であるため、OIDは同等です。 例えば

>>!snmpget servername.1.3.6.1.4.1.8072.1.3.2.3.1.1.15.108.109.45.114。115.121.115.108.111.103.45.115.105.122.101

host = servername、version = v2c、timeout = 3秒からのOIDの取得:.1.3.6.1.4.1.8072.1.3.2.3.1.1.15.108.109。 45.114.115.121.115.108.111.103.45.115.105.122.101 => 1025360 / var / pool / rsyslog

LogicMonitorへのデータの取得

OK、SNMPを介して必要なデータを取得できるようにsnmpdを拡張しました。 (そして、私たちが賢い場合は、IT自動化ツール(puppet、chef、Ansible、またはwhat-have-you)を介して、これをすべてのシステムにプッシュしました。)これをどのように監視して警告しますか? データソースを作成します。 [設定...データソース]から、[新しいデータソース]をクリックします。 一般情報セクションを設定します。

ActiveDiscoveryセクションを次のように設定します。

「待って」、あなたが尋ねるのを聞きます。 「このsnmp拡張機能が単一のファイルのサイズのみを報告しているのに、なぜActive Discoveryを使用しているのですか?」 ええと、すべてのLinuxサーバーが作成したばかりのこのOIDに応答するとは限りません。 そのため、ActiveDiscoveryでの存在をテストします。 応答があれば、監視します。 そうでない場合は、インスタンスを作成しません。 (アクティブディスカバリーは常に取得ではなくSNMPウォークを実行するため、ディスカバリーOIDに追加するインデックスは、上記で見つけたインデックスよりもXNUMXつ短いことに注意してください。したがって、ウォークされた結果で少なくともXNUMXつのエントリを検索する必要があります。)

次に、単一のNormalDatapointをデータソースに追加する必要があります。

コマンドの出力はファイルのサイズとファイルパスの両方であるため、正規表現キャプチャグループを使用して先頭の数字を抽出します。 保存すれば完了です。 グラフを追加して、時間の経過に伴うファイルサイズなどを追跡したり、エラーやクリティカル状態などのしきい値を追加したりすることもできます。通常のすべてのLogicMonitorの機能。

もっと見たいです? ここで私たちに従ってください:

Facebookで
Twitterで
LinkedInで

または、@メールでお問い合わせください [メール保護]