Agent Client Collector Visibility (エージェントクライアントコレクターヴィジビリティ)ヴィジビリティ/ディスカバリーに固有ではないエージェントクライアントコレクターの詳細については、以下を参照してください。 エージェントクライアントコレクター Agent Client Collector for Visibility (ACC-V) は、Windows および Linux サーバーにインストールされる ServiceNow エージェントで、ホスト上でプッシュベースのディスカバリーを実行します。ACC-V は、OS クエリーコマンドと OS 固有のコマンドを実行して情報を収集する Ruby スクリプトを展開します。さまざまなファイルシステムとストレージデバイス、TCP 接続、実行中のプロセス、およびターゲットホストに関するその他の情報からデータを検出できます。 ACC-V プッシュベースのモデルを使用して、ServiceNow 構成管理データベース (CMDB) にターゲットシステムを登録して管理できます。資格情報の提供、スケジュールの構成、IP 範囲のスキャンなどは必要ありません。 ACC-V は、ディスカバリーを実行するための追加メカニズムです。これは、システム情報、ネットワークインターフェイス、実行中のプロセスなどの OS 関連属性の水平 IP ベースのディスカバリーの代替手段です。ACC-V は、オンプレミスサーバーおよびクラウドインスタンスに適しています。ACC-V を使用するには、ターゲットホストに ServiceNow エージェントクライアントコレクター (ACC) をインストールする必要があります。 Quebec パッチ 3 以降、CI が ACC-V によって検出されたことを明確に示すdiscovery_sourceである ACC-ヴィジビリティが導入されました。 プッシュディスカバリーと SAM を一緒に使用する方法の詳細については、以下を参照してください。 プッシュベースのディスカバリーと SAM の併用 目次 メリット要件ACC-V の仕組みトラブルシューティング メリット エージェントは通信を開始し、MID サーバーを介して ServiceNow インスタンスへの接続を維持します。ACC とともにインストールされたエージェントは自己認識型であり、ディスカバリーデータをパッケージ化し、ACC-V ポリシーで設定された事前決定されたスケジュールでこのデータを MID サーバー経由で ServiceNow インスタンスに送り返します。ターゲットホストで興味深いイベント (長時間シャットダウンした後にオンラインに戻るなど) が発生すると、ディスカバリーがトリガーされます。アプリケーションは、ACC をインストールし、MID サーバーと通信する特定のターゲットを既に追跡しています。 要件 ディスカバリー [com.snc.discovery] プラグインをインストールしてアクティブ化する必要があります。エージェントクライアントコレクターフレームワーク (ACC-F) を ServiceNow インスタンスにインストールする必要があります。エージェントをターゲットホストにインストールする必要があります。Quebec パッチ 3 以降にアップグレードしていることを確認してください。ITOM ディスカバリーまたは ITOM ヴィジビリティ SKU (SU ベースのライセンス) が必要です ACC-V の仕組み 高いレベルでは、ACC-V は以下と連携して機能します。 ServiceNow インスタンスServiceNow MID サーバーターゲットホストマシン上記のターゲットホストマシンで実行される ServiceNow エージェントクライアントコレクター ACC-V アーキテクチャ ACC-V は、チェックとポリシーを適用して、ディスカバリーをスケジュールして実行します。ディスカバリーは、次の場合にトリガーされます。 定期的なスケジューリング:ディスカバリーが定期的にトリガーされるポリシーベースのアプローチCI 削除時:コンピューターまたはサーバーの CI レコードが削除されたとき 「拡張ディスカバリー – CI 削除時」ビジネスルールは、エンドポイントディスカバリーをトリガーします。指定された CI に関連付けられている CI が sn_agent_cmdb_ci_agent から削除されました。 MID サーバーのサイクル:MID サーバーが停止して復旧したときターゲットホストサイクル:ターゲットホストが停止して復旧した場合ネットワーク切断:ターゲットへのネットワークリンクに切断がある場合 エージェントのディスカバリーの実行頻度 / ディスカバリーのトリガー方法 「拡張ディスカバリーポリシー」で構成されているとおり ポリシーを表示するには、[エージェントクライアントコレクター > 構成] > [ポリシー] に移動します。チェックインスタンスの「上書き間隔」は、ポリシー間隔を上書きできますポリシーによってディスカバリーがトリガーされたときに ECC キュー出力が作成されない ディスカバリーは、エージェントレコードを開いて [ディスカバリーを実行] をクリックすることで、オンデマンドで実行できます オンデマンドでトリガーされると、トピック「MonitoringProbe」と名前「on_demand_request」のecc_queue出力レコードが作成されます出力ペイロードには、実行するエージェントやポリシーなど、ディスカバリーの実行に必要な情報が含まれますペイロードでは、sn_agent_cmdb_ci_agentのエージェント ID である json に「clients_cis」が表示されます 入力をどのように処理しますか ビジネスルール「AgentNowResponseProcessor」はecc_queue入力を処理しますビジネスルールはスクリプトインクルードを呼び出します AgentNowHandler.processEccRecord(current);スクリプトインクルードは、ペイロードを使用してcheck_type_idとクエリー sn_agent_check_typeを取得します 検出の場合は、[sn_agent_disco_check_type] の下のタイプになります チェックタイプ ID は、ペイロードを処理するスクリプトの呼び出しに使用されます EnhancedDiscoveryHandler.handleDiscovery(checkResults)その他のスクリプトインクルードが使用されます。 メインディスカバリーハンドラーエンハンスドディスカバリーハンドラーエンドポイントディスカバリークラウドヘルパー スクリプトは、識別および調整エンジンに渡される最終的な JSON ペイロードを構築します プロパティ sn_agent.disco_minimum_threshold_for_rediscovery_minutes システムの検出頻度が高すぎないようにするため sn_agent.disco_disable_ci_clobber_of_agentless_disco 競合を避けるために、ターゲットホストの IP に水平 IP ベースのディスカバリーによって検出された CI が既に存在する場合 (ServiceNow discovery_source、ACC-V はディスカバリーを実行しません。この動作を上書きするには、システムプロパティ sn_agent.disco_disable_ci_clobber_of_agentless_disco を false に設定します sn_agent.disco_ci_clobber_of_agentless_disco_threshold_days 水平 IP ベースのディスカバリーが特定の時間にわたって実行されなかった場合、この設定は無視されます。必要に応じて、システムプロパティ [sn_agent.disco_ci_clobber_of_agentless_disco_threshold_days] を更新します。デフォルトは 14 日です トラブルシューティング データはecc_queue入力ペイロードで正常に返されましたが、それに応じて CI が更新されません 注: 次の手順では、アドミン権限が必要になる場合があります。本番環境でスクリプトを実行する前に、非本番インスタンスでスクリプトをテストしてください。 ペイロードが処理されるときにシステムログ/ノードログを確認し、エラーを探します エラー:エラーを解決します。アクションはエラーの内容によって異なりますエラーなし:次のステップに進みます 入力ペイロード処理のデバッグ方法 ecc_queue入力のsys_idを取得します (正しい入力を見つけるには、エージェント ID を含む入力ペイロードをecc_queueで検索します)スクリプトインクルード AgentNowHandler を開いていますスクリプトセクションで、[スクリプトデバッガーを開く] (バグのあるアイコン) をクリックしますprocessEccRecord() 関数にブレークポイントを設定[システム定義>スクリプト - バックグラウンド] に移動しますスコープを「sn_agent」に設定次のスクリプトを実行します。 // In the following line, place the sys_id of the ecc_queue input (次の行に、ecc_queue入力のsys_idを配置します。)var payloadSysID = ""; var eccRecord = new GlideRecord('ecc_queue'); eccRecord.get(payloadSysID); var ANH = new AgentNowHandler(); ANH.processEccRecord(eccRecord); 必要に応じて、問題があると思われるスクリプトにデバッグステートメントを追加します。 Linux デバイスのシリアル番号と TCP 接続がない エージェントが、関連する実行中のプロセスとともに OS シリアル番号と TCP 接続を取得するには、Linux システムで「dmidecode」と「ss」の sudo アクセスが必要です。たとえば、このコンテンツを /etc/sudoers または /etc/sudoers.d/ の個別ファイルに追加できます。 Cmnd_Alias AGENT_ACC_V = /usr/sbin/dmidecode,/usr/sbin/ss servicenow ALL=(root) NOPASSWD:AGENT_ACC_V ペイロードが出力セクションでエラーを返して返される エラーの例: "output" : "C:/Program Files/ServiceNow/agent-client-collector/embedded/lib/ruby/gems/2.7.0/gems/json-2.3.0/lib/json/common.rb:156:in `parse': 783: unexpected token at '' (JSON::ParserError) トラブルシューティング例 01 - デバッグをホスト上のファイルに送信: endpoint_discovery.rb を更新次のコード $logger = Logger.new(STDOUT)$logger.level = options.log_level.nil? ? "FATAL" : options.log_level 次のコードに置き換えます $logger = Logger.new('pathAccountCanWriteTo')#Comment out log level or set to debug#$logger.level = options.log_level.nil? ? "FATAL" : options.log_level 問題を再現作成されたログファイルを確認 トラブルシューティング例 02 - デバッグステートメントをさらに追加: 拡張ディスカバリーチェックを更新して、デバッグパラメーターを渡します。例: endpoint_discovery.rb --compact --select=basic_inventory,installed_software,file_systems,serial_numbers,network_adapters,tcp_connections,storage_devices,running_processes --log-level DEBUG エージェントクライアントコレクターのcheck-allow-list.jsonファイルを更新して、上記のコマンドを実行できるようにします新しいテストディスカバリーの実行新しい出力とacc.logファイルをレビューオプションで、endpoint_discovery.rb スクリプト、またはそれによって呼び出される他のスクリプトに、さらにデバッグステートメントを追加します デバッグを追加する例: # Creating a logger to log information to C:\temp\accDebug.log # in a path the acc service user can write to$logger = Logger.new('C:\temp\accDebug.log')# Log additional information$logger.info('variableOrStringToGetMoreInformation') 作成された新しいログファイルを確認する トラブルシューティング例 03 - ホストで直接チェックを実行する: 拡張ディスカバリーチェックのファイルはエージェントのキャッシュディレクトリにダウンロードされるため、トラブルシューティングのためにエージェントで直接チェックを実行することもできます。 次の画像は、osqueryコマンドを実行した結果を示しています。 osqueryi --json --logger_min_status 1 "select hostname,hardware_vendor,hardware_model,hardware_version,physical_memory,cpu_brand from system_info" Rubyスクリプトは、トラブルシューティングのためにコマンドラインから直接実行することもできます。ただし、これは ACC が実行した場合とまったく同じではなく、異なる結果またはエラーが生じる可能性があることに注意してください。 endpoint_discovery.rb スクリプトは、パラメーター「--select」の配列を受け取ります。これらは、endpoint_discovery.rb によって呼び出される他のスクリプトの名前です。これらの各スクリプトは、サーバー内のデータを検出し、JSON ファイルを返します。これらの結果はすべて加算され、インスタンスに返されます。完全なコマンド: endpoint_discovery.rb --compact --select=basic_inventory,installed_software,file_systems,serial_numbers,network_adapters,tcp_connections,storage_devices,running_processes 次の例では、endpoint_discovery.rb によって呼び出されたスクリプトの 1 つをテストします。 ACC キャッシュディレクトリでosqueryi.exeパスを検索し、ユーザーパスに追加します。そうでない場合は、ファイルが見つかりませんというエラーが発生する可能性がありますACC サービスユーザーでコマンドプロンプトを開きます渡されたbasic_inventoryのみで endpoint_discovery.rb を実行し、出力をファイルに送信します endpoint_discovery.rb --log_level DEBUG --compact --select=basic_inventory >> basicInventoryOutput.txt ファイルのレビュー、出力例: