レイヤー 2 ネットワーク接続のディスカバリー (物理接続)Issue このナレッジベース記事では、レイヤー 2 ディスカバリー情報がどのように処理されるかについて説明します。 デバッグ手順 「sa.discolog.sys_log」システムプロパティを true に設定します。スクリプトバックグラウンドで次のスクリプトを実行します。 var npm = new SNC。NetworkPathManager();npm.createPhysicalConnections(ciId); サーバとスイッチ間のレイヤ 2 接続の場合、ciId はサーバの sys id である必要があります。2 つのスイッチ間のレイヤ 2 接続の場合、ciId はいずれかのスイッチの sys id である必要があります。デバッグメッセージを確認して、接続が作成されなかった理由を理解してください。注:CMDBの実際の関係は、デバイスのポート間、または1つのデバイスのポートと別のデバイス間の直接の関係(ターゲットポートが見つからなかった場合)に作成されます。このアルゴリズムは、サーバーとネットワークデバイス間、または 2 つのネットワークデバイス間の直接的な関係を作成しません。 レイヤー 2 接続とは何ですか? レイヤー 2 接続は、ネットワークデバイス間、およびネットワークデバイスと他のコンポーネント (サーバーなど) との間の物理的な接続です。レイヤー 2 アルゴリズムは、さまざまなテーブルからの情報とともにいくつかの戦略を使用して、CMDB 内の Connects to:Connected by 関係を作成します。これらの関係は、デバイスのポート間、またはあるデバイスのポートと別のデバイス間の直接関係を作成できます(ターゲットポートが見つからなかった場合)。結果は、関連するデバイスに「物理ネットワーク接続」依存関係タイプを適用することで、依存関係ビューマップで表示できます。この依存関係タイプを適用すると、ポート間ではなく、デバイス間の依存関係が常に表示されます (CMDB の「Connects to::Connected by」関係が実際にはデバイスのポート間であっても)。 必要なプラグイン ディスカバリープラグイン 仕組み New York より前は、「レイヤー 2 接続を作成」と呼ばれるスクリプトアクションが「discovery.device.complete」イベントをリッスンし、そのようなイベントごとにレイヤー 2 接続アルゴリズムをトリガーしていました。New York 以降、レイヤー 2 接続作成用の新しいイベントを作成し、このイベント用に別のイベントキューを作成しました。イベントキューの名前は「physical_connections_creation」で、新しいイベントの名前は「physical_connections.create」です。「レイヤー 2 接続計算をキューに入れる」という名前のスクリプトアクションは、「discovery.device.complete」イベントをリッスンし、「physical_connections_creation」イベントキューのパラメーターとして CI Sys ID を持つ「physical_connections.create」イベントを作成します。「Layer 2 Connectivity Creation」という名前の新しいジョブが「physical_connections.create」イベントの処理を担当します。「レイヤー 2 接続を作成」という名前のスクリプトアクションは、これらのイベントをリッスンし、そのようなイベントごとにレイヤー 2 接続アルゴリズムをトリガーします。この変更の目的は、レイヤ 2 接続イベントの処理時間が他のイベントの処理に影響を与えず、イベント キューのパフォーマンスを低下させないことです。この変更はPRB1344266を介して導入されました(NY、MP6、LP10で修正)。 Orlando では、レイヤー 2 接続アルゴリズムがトリガーされる回数を減らすための拡張機能が追加されました。「discovery.device.complete」イベントごとに「physical_connections.create」イベントをキューに入れる代わりに、「レイヤー 2 接続の計算をキューに追加」スクリプトアクションは、イベントで報告された CI に対してレイヤー 2 接続アルゴリズムが最後にトリガーされた時刻を検索します。アルゴリズムが最後にトリガーされてから経過した時間が 1 日を超える場合にのみ (「sa.create_physical_connections.minutes_frequency」プロパティで構成可能)、この CI に対して「physical_connections.create」イベントが作成されます。この変更はPRB1359923を介して導入されました(O、NP4、MP9で修正)。「レイヤー 2 接続を作成」スクリプトアクション (「physical_connections.create」イベントをリッスン) は、Java メソッド NetworkPathManager.jsFunction_createPhysicalConnections(文字列 deviceId) を呼び出します。このメソッドは、レイヤー 2 接続を検索し、CMDB に「Connects to::Connected by」タイプの関係を作成します。ESX サーバーの場合:java メソッド NetworkPathManager.jsFunction_createPhysicalConnections(String deviceId) を呼び出す「Create Layer 2 Connections from ESX」というビジネスルールがあります。 関連テーブル レイヤー 2 接続を作成するために、次のテーブルを使用します。 discovery_switch_fwd_table スイッチの転送テーブル discovery_device_neighbors スイッチ間のレイヤ 2 接続を見つけるために使用されますCDP または LLDP にすることができる neighbor_source と呼ばれるフィールドが含まれています discovery_switch_spanning_tree_table スイッチ間のレイヤ 2 接続を見つけるために使用されます。 discovery_switch_bridge_port_table discovery_switch_fwd_table のポート番号とインターフェイスインデックスをマッピングするために使用されます。 ポートテーブル: cmdb_ci_network_adapterdscy_switchportdscy_router_interface すべてのテーブルは、デバイスの水平ディスカバリー中に入力されます。 レイヤ 2 接続戦略 PhysicalHostConnectionStrategy – ネットワークデバイスではない検出されたサーバーとネットワークデバイスの間にレイヤー 2 接続を作成します。VMLayer2ConnectionStrategy:VM とネットワークデバイスの間にレイヤー 2 接続を作成します。NetworkDeviceLayer2ConnectionStrategy:ネットワークデバイスとその近接デバイスの間にレイヤー 2 接続を作成します。SpanningTreeLayer2ConnectionStrategy:ネットワークデバイスとスパニングツリー内のネットワークデバイスの親の間にレイヤー 2 接続を作成します。JavaScriptLayer2ConnectionStrategy – 実装が空の Java スクリプト関数を呼び出します。別の戦略を追加する場合は、顧客インスタンスに関数の実装を追加できます。 PhysicalHostConnectionStrategy 検出されたサーバー (ネットワークデバイスではない) とネットワークデバイスの間にレイヤー 2 接続を作成します。必須条件: サーバーの水平ディスカバリーネットワークデバイスの水平ディスカバリー。 注:ディスカバリーの順序は重要です。転送テーブル、スイッチポートテーブルなどを入力するには、まずスイッチを検出する必要があります。次に、サーバーを検出する必要があります。サーバーのディスカバリーが完了すると、レイヤー 2 接続アルゴリズムが実行されます。水平ディスカバリーが実行された後、以下を検証する必要があります。 ネットワークデバイスには転送テーブルがあります。サーバーにポート (ネットワーク アダプターまたはルーター インターフェイス) がある。 ステップ1:サーバーのポート(ネットワークアダプタとルーターインターフェイス)を見つけます。ステップ2:各ポートについて、ポートからのレイヤー2接続があるかどうかを調べます。 ポートの MAC アドレスを取得します。[discovery_switch_fwd_table] に移動し、この MAC アドレスを持つレコードを検索します (ステータスフィールドが「self」ではありません)。このようなレコードごとに、転送テーブルに同じスイッチ (構成アイテム) とポートで異なる MAC アドレスを持つレコードがさらにあるかどうかを検索します。スイッチの転送テーブルのポートにMACが1つしかない場合にのみ、このスイッチが候補と見なされます(複数のMACがある場合は、複数の送信元アドレスが存在するため、サーバーとスイッチの間にレイヤー2接続がないことを示します)。候補スイッチの数が sa.network.max_candidate_switches プロパティで定義された値 (デフォルトは 2) を超えない場合は、すべての候補スイッチへのレイヤー 2 接続を作成します。 ステップ3:ターゲットスイッチのポートを見つけて、レイヤー2接続を作成してみてください discovery_switch_bridge_port_tableに移動し、スイッチ (構成アイテム) とdiscovery_switch_fwd_tableからのポートでこのテーブルを照会します。レコードが見つかった場合は、レコードのインターフェイスインデックスを取得します。ポートを見つけるために、スイッチ(構成アイテム)とインターフェイスインデックス(インターフェイス番号)によってdscy_switchportクエリー。ポートが見つからなかった場合は、ポートを見つけるために、スイッチ(構成アイテム)とインターフェイスインデックス(番号)によってクエリdscy_router_interface。dscy_switchportテーブルまたはdscy_router_interfaceテーブルにあるポートのインストールステータスが存在しない場合、レイヤ 2 接続はポートではなく、スイッチに直接作成されます。スイッチのポートが見つかった場合は、サーバーのポートとスイッチのポートの間に「Connects to::Connected by」タイプの関係を作成します。それ以外の場合は、サーバーのポートとスイッチ自体の間に「Connects to::Connected by」タイプの関係を作成します。 VMLayer2ConnectionStrategy VM/ESX とネットワークデバイスの間にレイヤー 2 接続を作成します。必須条件: ネットワークデバイスの水平ディスカバリー。vCenter ディスカバリー (ESX およびこの ESX 上にあるすべての VM の水平ディスカバリー) - 2 回実行する必要があります。 注:ディスカバリーの順序は重要です。転送テーブル、スイッチポートテーブルなどを入力するには、まずスイッチを検出する必要があります。次に、vCenter ディスカバリーを実行する必要があります。VM または ESX の検出が完了すると、レイヤー 2 接続アルゴリズムが実行されます。水平ディスカバリーが実行された後、以下を検証する必要があります。 ネットワークデバイスには転送テーブルがあります。VM/ESX にはポート (ネットワーク アダプターまたはルーター インターフェイス) があります。各 VM には 次のいずれか があります。 ESX との「仮想化者」関係ESX との「登録」関係を持つ VMWare 仮想マシンインスタンスとの「インスタンス化者」関係 ステップ 1: VM の ESX を検索し、この ESX 上のすべての VM を見つけます。ESX とすべての VM (ネットワークアダプターとルーターインターフェイス) のポートを検索し、それらのポートの MAC アドレスを取得します。ESX のすべての VMware 仮想マシンインスタンスを検索し、VMware ネットワークアダプター (cmdb_ci_vmware_nic) の MAC アドレスを取得します。 ステップ 2: VM のポート (ネットワークアダプタとルーターインターフェイス) を検索します。 ステップ3:各ポートについて、ポートからのレイヤー2接続があるかどうかを調べてみてください。 ポートの MAC アドレスを取得します。discovery_switch_fwd_table に移動して、この MAC アドレスを持つレコードを検索します。ステータスフィールドが「self」ではなく、Absent=false です。このようなレコードごとに、スイッチとポートが同じで、MAC アドレスが ESX またはその VM の 1 つに属していないレコードが転送テーブルにさらにあるかどうかを検索します。このような例外的な MAC アドレスの数をカウントします。例外的な MAC アドレスの数が少ない場合(ESX および VM のすべての MAC アドレスの最大 51% である最大 3 つの MAC アドレス)にのみ、このスイッチが候補と見なされます。許可される候補スイッチの数に関するロジックは、「 PhysicalHostConnectionStrategy」で説明されているロジックと同じです。 ステップ4:ターゲットスイッチのポートを見つけて、レイヤー2接続を作成してみてください PhysicalHostConnectionStrategy と同じロジック。 NetworkDeviceLayer2ConnectionStrategy ネットワークデバイスとその近接 (他のネットワークデバイス) の間にレイヤー 2 接続を作成します。必須条件: ネットワークデバイス (スイッチまたはルーター) の水平ディスカバリーは、2 回実行する必要があります。 水平ディスカバリーが実行された後、以下を検証する必要があります。 discovery_device_neighborsテーブルは、少なくとも 1 つのスイッチに対して入力されました。 ステップ1:スイッチのポートを見つけます。ステップ2:各ポートについて、ポートからのレイヤー2接続があるかどうかを調べます。 discovery_device_neighborsテーブルに移動し、スイッチ (構成アイテム) とポート (作成元インターフェイス) でテーブルをクエリします。レコードの近接アドレスと近接インターフェイスを確認します。近接インターフェイスのインストールステータス = absent のレコードを無視します。ネイバー アドレスまたはネイバー インターフェイス、あるいはその両方を持つネイバーが 1 つだけある場合は、レイヤ 2 接続を作成します。 ステップ 3: レイヤー 2 接続を作成する 近接インターフェイスが存在する場合は、元のインターフェイスと近接インターフェイスの間に「Connects to::Connected by」タイプの関係を作成します。それ以外の場合は、発信元インターフェイスと近接アドレスを持つスイッチの間に「Connects to::Connected by」タイプの関係を作成します。 JavaScriptLayer2ConnectionStrategy JavaScriptLayer2ConnectionStrategy は、Layer2ConnectionStrategy スクリプトインクルードで createConnections (hostId) 関数を呼び出しています。この関数の実装は空であり、別の戦略を追加したり、既存の戦略を上書きしたりする場合は、顧客インスタンスの他の実装に置き換えることができます。 機能を有効/無効にするシステムプロパティ デフォルトでは、レイヤー 2 接続アルゴリズムはアクティブです。「sa.create_physical_connections.active」プロパティを false に設定することで無効にできます。PRB1359923 (O、NP4、MP9 で修正) では、特定のタイプのデバイスに対してのみレイヤー 2 アルゴリズムを実行できるようにするシステム プロパティを追加しました。 sa.create_physical_connections.vm.activesa.create_physical_connections.network_device.activesa.create_physical_connections.physical_host.active 既知の問題 レイヤー 2 接続が依存関係ビューに表示されません (「Connects to::Connected by」関係は cmdb に存在しますが、「物理ネットワーク接続」依存関係タイプを適用する場合は依存関係ビューに表示されません)。 スクリプトバックグラウンドで次のスクリプトを実行します。 var npm = new SNC。NetworkPathManager();npm.getNetworkNeighbors(<host_sys_id>); 「データベースによって構文エラーまたはアクセスルール違反が検出されました (where 節に不明な列「cmdb$par10.a_ref_8」) (Syntax Error or Access Rule Violation detected by database (Unknown column 'cmdb$' in 'where clause'))」のようなエラーが発生した場合は、永続性チームに対してタスクを開きます (類似のケース/タスク:CSTASK008547、TASK475910 を参照)。 「レイヤー 2 接続の作成」によりメモリの問題が発生する: すでに述べたように、このプロセスは "sa.create_physical_connections.active" プロパティを false に設定することで無効にすることができます。これは、顧客がレイヤー 2 機能を使用しない場合に十分なソリューションであり、顧客が関心のないプロセスにメモリが費やされないようにします。または、イベントキューテーブルに移動します (ナビゲーターからアクセスした場合は、すべてのフィルターを削除してください)。「name=physical_connections.create」でフィルタリングします。「処理期間」でソートします。本当に高い価値を持つレコードがいくつか見つかった場合は、これが疑わしいです。疑わしいレコードの「Parm 1」の値を確認します。これはsys_idです。cmdb_ciテーブルで検索します。ここで問題が見つかる可能性があります。あるケースでは、20Kを超えるネットワークアダプタを搭載したコンピューターのSys IDが見つかりました。コンピューター自体が長期間検出されなかったため、この CI に問題があることを示しています。 [スクリプト - バックグラウンド] からのレイヤー 2 アルゴリズムの実行 スクリプトバックグラウンドで次のスクリプトを実行します。 var npm = new SNC。NetworkPathManager();npm.createPhysicalConnections(ciId); サーバとスイッチ間のレイヤ 2 接続の場合、ciId はサーバの sys id である必要があります。2 つのスイッチ間のレイヤ 2 接続の場合、ciId はいずれかのスイッチの sys id である必要がありますデバッグメッセージを表示するには、アルゴリズムを実行する前に「sa.discolog.sys_log」プロパティを true に設定します。