「スマート」スイッチの頭脳を掘り下げましょう

数年前、私はzabbix監視サーバーを入手しました。 当然、私はすぐに自分の機器について可能な限り多くの情報を取得したいと考えました。 従来のzabbixコンピューターシステムでは、エージェントはこれに対して可能な限り幅広いオプションを提供します。 ネットワーキングはますます難しくなっています。 snmpwalkコマンドは、さまざまな値とカウンターのシートを出力しますが、そこから有用なものを抽出するのはそれほど簡単ではありません。







管理されたスイッチを検討してください。 それらの典型的な例は、各ポートのステータス、過去のトラフィックの量と構成をポーリングすることです。 これはzabbix自体によって行われますこちらをご覧ください 。 これらのパラメータを監視する必要はありません。 どのデバイスがスイッチに接続されているかを追跡することは非常に興味深いです。 結局のところ、MACアドレスをポートにバインドするテーブルを保存および更新します。必要なのは、それを取得して美しく作成するだけです。 一度ハブでこのテーブルを受け取る方法を見つけました 。 2つのsnmp要求を使用して、ポートとMACアドレスのリストを抽出し、OID値のサフィックスによって対応を設定します。 詳細については元の投稿をご覧ください。ここでは、このような監視を改善する方法について説明します。



元の実装にはいくつかの欠点があります。 まず、外部スクリプトを実行して各ポートをポーリングすると、zabbixサーバーに過度の負荷がかかり、何らかの理由でスクリプトが設定時間内に正しく動作しないか完了しない場合、データ項目は静かに「サポートされない」状態になります。情報は更新されなくなります。 第二に、MACアドレスでデバイスを識別するのは不便で、IPアドレスやドメイン名さえ持つ方が視覚的です。 第三に、データはスイッチのキャッシュから取得されるため、このキャッシュを予熱しておくと便利です。そうしないと、最近ネットワークで非アクティブになっている機器が表示されなくなります。



これらの問題を解決するために、小さなpythonプログラムを作成しました。 これは悪魔です。 所定の頻度で、ローカルネットワークをスキャンし、スイッチをポーリングして、情報をzabbixサーバーに送信します。 すべてのスイッチのすべてのポートの情報は、最初に一時ファイルに書き込まれ、次に1つの接続のzabbix_senderユーティリティによってサーバーに送信されます(--input-fileキーを使用)。 SNMPは、標準のsnmpwalkプログラムを使用してスイッチを照会します。 これの前に、デーモンはnmapスキャナーで利用可能なLANのarpスキャンを実行します。 これは、一方ではキャッシュを「加熱」し、もう一方ではMACアドレスをIPにマッピングします。 デーモンはさらに、この方法で取得したIPアドレスをドメイン名に変換できます(逆ドメインゾーンが定義されている場合は機能します)。



これは、zabbixサーバーでの結果の表示です





HP Procurve 2520スイッチは、vlan'esの助けを借りて、5つのローカルサブネットと2つの異なるインターネットプロバイダーの外部に定義されています。 以下の2つのMACアドレスは、プロバイダーのゲートウェイに属します。 デーモンを搭載したマシンは外部サブネットを参照しないため、IPアドレスは定義されていません。 ポートに多数のデバイスがハングしている場合、わかりやすくするために「別のスイッチ」エントリが表示されます(必要に応じてオフにします)。



そして、ここにポートの一つの物語があります。 IPフォンとコンピューターが接続されています。 従業員が1日の初めにコンピューターの電源を入れ、働き、働き、そして早めに去った様子を見ることができます。 結局金曜日。





デーモンはsmonitorと呼ばれ、github.comで入手できます。

git clone github.com/ifke/smonitor.git







作業をデバッグしてエラーを追跡するために、デーモンは、syslogサービスを通じてデーモンカテゴリを使用してログを書き込みます。 さらに、デモが発生せず、すべてのログがコンソールに表示される場合、プログラムをデバッグモードで起動する予定です。 これを行うには、-debugスイッチを使用します。

./smonitor.py --debug







アプリケーション設定はSettings.pyファイルにあります。 Pythonコードもありますが、変数の定義のみで構成されているため、簡単に把握できます。 利用可能なオプションのヒントについては、Settings.py.sample.rusファイルを参照してください。 私は主にubuntuを使用しているため、プログラムはこのディストリビューションでテストされており、インストール手順はそれだけです。 スイッチにも同じことが当てはまります-デーモンは、利用可能なものをチェックしました:HP Procurve 2520、HP Procurve 1700、およびD-Link DES-3028。 この情報から判断すると、SNMP要求はVLANごとに個別に実行する必要があるため、プログラムは終了せずにシスコ機器で動作しません。



デーモンは、zabbixに特に関連付けられていません。 別の監視システムと友達になるには、データの送信を担当する1つの関数を書き換えるだけで十分です。 実際、さらに多くを改善できます。 たとえば、逆の問題を解決します。つまり、ホストに接続されているスイッチのポートを表示します。 スイッチの相互接続方法を決定するように悪魔に教えること。 ファイルからのMACアドレスとIPアドレスの対応のインポートを追加すると、デーモンが直接接続していないネットワークを含む、arpスキャンなしの本格的な監視を整理できます(IPアドレスのリストによってping要求でキャッシュをウォームアップします)。 要するに、怠と戦うのに十分な時間とエネルギーしかなければ、多くのアイデアがあるでしょう。



All Articles