スイッチのどのポートが使用されなくなったかを調べる方法

1年少し前、私はおそらくすべての管理者によく知られている問題に遭遇しました。通信キャビネットの1つで、ほとんどすべての空きポートが使い果たされました。 視覚的には、ほぼすべてのポートにケーブルが接続されており、1つまたは2つのポートだけが空いており、約10の新しいデバイスを接続する必要があることが明らかでした。



すべてのポートが実際に使用されているわけではないことは明らかでした:おそらく、いくつかは一時的に接続され、その後切断を忘れ、ネットワークプリンターを移動して別のスイッチに接続することができ、一部のポートはキャビネットなど



いくつかのポートが現在非アクティブであるという事実は、10分前に使用されていなかったことを意味せず、ユーザーは単にコンピューターの電源を切って、たとえば会議に出たため、非アクティブポートを無効にすることは受け入れられませんでした。



当時、すべてのユーザースイッチはCisco 3560モデルであり、ユーザー用の100Mbpsポートとハブスイッチへの高速チャネル用のSFPスロットがあったため、本当に必要ではないと確信した場合、追加のスイッチに少なくとも2500ドルを費やしました。ただ手が上がりませんでした。



挑戦する



スイッチのどのポートが先月使用されなかったかを調べます。



解決策



すべてのスイッチは、中央のsyslogサーバーにメッセージを送信するように構成されています。 私の例では、Syslog-NGはArch Linuxで使用されましたが、もちろん、他のsyslogソリューションやLinuxディストリビューションを使用できます。 ログローテーションにはログローテーションが使用され、1か月以上前のログは消去されました。 また、スイッチについて:マネージドスイッチでは、リモートsyslogサーバーへのメッセージ送信を構成できると考えています-シスコを除き、NortelとHPでしか経験がありません-私が覚えている限り、この機能もサポートしています。



動作原理


デフォルトでは、Ciscoスイッチはポートのアクティブ化および非アクティブ化中にメッセージを生成します。すべてのスイッチは中央のsyslogサーバーにメッセージを送信するように構成されているため、残りはスイッチからのメッセージを保存するファイルを分析することだけです。 メッセージが1か月以上保存されないように、logrotateがサーバー上で構成されたことを思い出させてください。 1か月間使用されていなかったポートは、おそらくもう必要ではなく、他のニーズに使用できると仮定しても安全だと思います。



設定例


リモートのsyslogサーバーにメッセージを送信するようにCiscoスイッチを設定するのは非常に簡単です。端末モードを設定して、コマンドを1つだけ入力してください。



logging 10.20.100.12







(10.20.100.12-syslogサーバーのアドレス)



ネットワーク経由でメッセージを受信するsyslog-ng.confの行は次のとおりです。



source remote_udp {

udp();

};



destination d_switches { file("/var/log/remote/switches.log"); };



filter f_switches { netmask("10.20.120.0/255.255.255.0") or netmask("10.30.120.0/255.255.255.0"); };



log { source(remote_udp); filter(f_switches); destination(d_switches); };








例からわかるように、特定のサブネットからのメッセージのみが/var/log/remote/switches.logに配置されます。 これは、異なる機器からのメッセージが1つのログファイルで混乱することのないようにするためです。 異なる機能の機器からのメッセージは、異なるファイルに配置することを好みます:ユーザースイッチを個別に、集中スイッチを個別に、ルーターを個別に、ストレージシステムを個別になど この例では、10.20.120.0 / 24および10.30.120.0/24は、ユーザースイッチのサービスIPアドレスが配置されているネットワークセグメントです。



機器がスイッチポートに接続されるたびに、同様のメッセージが表示されます。



Apr 27 16:38:44 switch1 330827: Apr 27 15:39:27.317: %LINK-3-UPDOWN: Interface FastEthernet0/4, changed state to up







また、機器がシャットダウンした場合のメッセージの例を次に示します。



Apr 27 16:38:53 switch1 330830: Apr 27 15:39:37.635: %LINK-3-UPDOWN: Interface FastEthernet0/4, changed state to down







ログファイル分析アルゴリズムは次のとおりです。



1.特定のスイッチからのメッセージのみを選択します

2.「LINK-3-UPDOWN」という行を含むメッセージのみを選択します

3.回線の不要な部分(時間、スイッチ名など)を切り取り、ポート名とその番号のみを残します

4.「FastEthernet」行を含むメッセージのみを選択します(私の場合、すべてのユーザーポートは100Mbpsで、コンセントレータスイッチへの接続のみがギガビットでした)

5.ポート番号以外のすべてを遮断します

6.並べ替え

7.一意の行のみを残す



Bashの実装:



#!/bin/bash



cat /var/log/remote/switches.log* | grep $1 | grep LINK-3-UPDOWN | cut -d ':' -f 8 | cut -d ' ' -f 3 | grep FastEthernet | cut -d '/' -f 2 | cut -d ',' -f 1 | sort -n | uniq








使用例


# ./usedports.sh switch1

1

3

4

5

6

8

9

10

11

12

13

14

15

17

23

24

25

29

38

39

41

43








ご覧のとおり、スクリプトは、過去1か月間にステータス(アクティブ/非アクティブ)が変更されたすべてのポートを発行しました。 しかし、上記のポートのいずれかがこの間ずっと継続的にアクティブであり、そのステータスが変更されていない場合はどうでしょうか? 必要なスイッチに接続し、次のコマンドを実行します。



show interface description | include down







このコマンドは、すべての非アクティブポートをリストします。 ポートが非アクティブであり、そのステータスが先月中に変更されていない場合、別のアプリケーションを探すことができます。



追加


このソリューションは、すべて100Mbpsのユーザーポートを備えたスタンドアロンスイッチに最適です。 しかし、すぐに同じシスコ製の2975および2960モデルの新しいスイッチを追加し始めました。 持っているポートはすべてギガビットであり、複数のスイッチを1つの管理対象ユニットに結合できるスタックモジュールも装備されています。これにより、ポート番号だけでなくスタック内のスイッチの数も考慮されるため、ポートの名前が変更されました。



変更された実装は次のとおりです



#!/bin/bash



cat /var/log/remote/switches.log* | grep $1 | grep LINK-3-UPDOWN | cut -d ':' -f 8 | cut -d ' ' -f 3 | grep GigabitEthernet | cut -d 't' -f 4 | cut -d ',' -f 1 | sort -t '/' -k 1,1n -k 3,3n | uniq








おわりに



説明されたソリューションは、変更を加えることなく1年以上にわたって当社の組織で正常に機能しています。 その利点は、低価格(この場合、syslogサーバーがすでにあるため完全に無料です)、簡単なセットアップ(この場合、すべてのスイッチが既にリモートsyslogサーバーにメッセージを送信するように構成されているため不要です)、非常に簡単な使用です。 このソリューションにより、スイッチの追加購入が不要になりましたが、これは実際には必要ではなく、ネットワークの計画に役立ちます。これは、任意のスイッチで使用可能なポートの数をいつでも確認できるため、成長する組織のニーズに間に合うように準備できるためです。



この記事が誰かに役立つことを願っています。



頑張って!



All Articles