エージェントクライアントコレクターのレコードフィールドを理解し、空の CI 参照をトラブルシューティングSummary<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } エージェントクライアントコレクター (ACC) レコードには、いくつかのステータスフィールドと、構成アイテム (CI) および MID サーバーへの参照があります。これらのフィールドがどのように入力および更新されるかを理解すると、ACC の問題を解決するのに役立ちます。 関連テーブル 次のテーブルには ACC データが保存されます。 エージェントクライアントコレクター [sn_agent_cmdb_ci_agent]:メインの ACC レコード。これは CMDB CI クラスです。別のレコードから ACC を参照する場合は、このテーブルを使用します。エージェントクライアントコレクター情報 [sn_agent_ci_extended_info]:追加フィールドを格納します。各 ACC レコードには、対応するレコードがこのテーブルにあります。[エージェント] リストに表示されるほとんどのステータス列は、このテーブルからドット連結されています。MID サーバー [ecc_agent]:ACC が現在通信している MID サーバーレコード。構成アイテム:ACC がインストールされているホストサーバー CI。 エージェントクライアントコレクターリストの列 sn_agent_cmdb_ci_agentリストのデフォルトビューには、次の列が表示されます。ドット連結パスは、各フィールドがどのテーブルから取得されたかを示します。 nameagent_extended_info.ステータスagent_extended_info.cmdb_ci (cmdb_ciへの参照)agent_extended_info.cmdb_ci.sys_class_nameagent_extended_info.MID (ecc_agentへの参照)ip_addressagent_extended_info.up_sinceagent_extended_info.running_checks_numagent_extended_info.data_collectionagent_extended_info.is_duplicateagent_extended_info.last_refreshedagent_extended_info.agent_version レコードの作成とステータスの更新 ACC をインストールすると、接続された MID サーバーが REST 要求をインスタンスに送信します。これにより、sn_agent_cmdb_ci_agentとsn_agent_ci_extended_infoレコードのペアが作成されます。初期作成後、レコードを最新の状態に保つために、同じ REST メッセージが毎分送信されます。 syslog_transactionテーブルでは、これは MID サーバーユーザーによって URL /api/sn_agent/agents/updateClientTimestamp?api=api を使用して作成された REST トランザクションとして表示されます。 エージェントクライアントコレクター API (/api/sn_agent/agents) は、次のレコードによって定義されます。 スクリプト済み REST Web サービス:/sys_ws_definition.do?sys_id=cf0d4208c3e3030039a3553a81d3ae9aupdateClientTimestamp リソース: /sys_ws_operation.do?sys_id=b64dc208c3e3030039a3553a81d3ae76スクリプトインクルード (MonitoringConfig): /sys_script_include.do?sys_id=6c62a3f0c305130039a3553a81d3ae88 MonitoringConfig スクリプトインクルードは、 updateClients および classifyClientsAndUpdate 関数を使用します。 この API は、次の 3 つの状況を処理します。 新しくインストールされた ACC完全更新タイムスタンプとステータスのみを更新 ACC が新規の場合、 insertNewClients 関数によってレコードペアが挿入されます。それ以外の場合は、 updateClientKeepAlive 関数によって値が更新されます。 sn_agent_cmdb_ci_agentで更新されたフィールド: nameagent_idip_address sn_agent_ci_extended_infoで更新されたフィールド: statusMIDup_sincenameagent_idip_addressis_windowsagent_version 注意:エージェント情報の削除ビジネスルールでは、sn_agent_cmdb_ci_agentレコードを削除するときに対応するsn_agent_ci_extended_infoレコードが削除されるため、孤立レコードが防止されます。このルールが非アクティブな場合、孤立したsn_agent_ci_extended_infoレコードが残り、空のsn_agent_cmdb_ci_agentレコードが作成される可能性があります。たとえば、テーブルからエージェントを削除してもエージェントがまだインストールされている場合、次のキープアライブは孤立したsn_agent_ci_extended_infoレコードを検索し、空のsn_agent_cmdb_ci_agentレコードを作成します。 ホスト CI の識別と参照 レコードの作成後、ACC は、CMDB に新しいホストサーバー CI を作成するか、既存の CI レコードにリンクするために、自分自身を検出する必要があります。 check-discovery-basic チェックは、 check_discover.rb コマンド /sn_agent_check_def.do?sys_id=f9fe1e3c536113006dfeddeeff7b12a2 を使用してこのディスカバリーを実行します。 Paris リリース (ACC 2.2) では、このチェック定義には osquery プラグイン資産が必要です。 1 時間ごとのスケジュール済みジョブ [エージェントのホストデータをリフレッシュ (Refresh host data for Agents)] は、ホスト参照が空であるか、またはシステムプロパティ sn_agent.host_data_collection_refresh_duration_seconds (デフォルト:43200 秒/12 時間) で設定された時間内に再検出されていないすべてのエージェントに対して実行されます: /sysauto_script.do?sys_id=e59cc3d2531030100112ddeeff7b12f0 スケジュール済みジョブを待機しない場合は、エージェントフォームで [ホストデータの収集] を選択します。 プローブ出力は、MID サーバーが実行するために ECC キューに配置され、ACC がそれ自体を検出します。初期ディスカバリーでは、セットアップによっては、出力ペイロードがなく、入力のみの場合があります。 プローブは次のパラメーターを使用します。 エージェント:ACC の MID サーバートピック:MonitoringProbe名前:on_demand_requestソース:on_demand_requestペイロード:名前、コマンド、間隔、タイムアウト、資産、およびその他のパラメーターを含むチェック定義が含まれます 入力ペイロードには、ホスト名、シリアル番号、その他の識別情報など、ACC ホストの完全な詳細を含む JSON オブジェクトが含まれています。 この入力のセンサーは AgentNowResponseProcessor ビジネスルールで、AgentNowHandler スクリプトインクルードの processEccRecord 関数を使用します。 これはディスカバリータイプのチェック (/sn_agent_check_type.do?sys_id=4048774567633300b7b72dbd2685efa1) であるため、DiscoveryHandler スクリプトインクルードは handleDiscovery および createHostCis 関数を使用して、標準の IRE API を使用してホスト CI を作成または更新し、ACC レコードを検索して cmdb_ci フィールドを更新します。 注:Quebec リリース (ACC-F 2.3.0) 以降、ACC-F と ACC-V の両方で check_discover.rb の代わりに endpoint_discovery.rb が使用されます。追加の資産が必要です:acc-f-commons および acc-f-modules。これは今後のリリースで変更される可能性があります。 プラグインのダウンロード失敗のトラブルシューティング プラグイン資産に依存するチェックの場合、ACC は最初にプラグインをダウンロードする必要があります。Paris (ACC 2.2) では、osquery プラグイン (/sn_agent_asset_name.do?sys_id=175dddb4533a1010b9ffddeeff7b1203) の関連レコードに OS 固有の tarball が添付されています。ACC は、次のような URL からプラグインを要求します。 https://<mid server IP>:<web service port>/static/acc_plugin/linux/all/all/all/osquery.tar.gz (セキュリティポリシーなどの理由で) ファイルをダウンロードできない場合、プラグインはエージェントに同期されず、チェックは実行されず、プローブは失敗し、ホスト CI はエージェントレコードにリンクされません。これにより、監視イベントとメトリクスを CMDB の CI に関連付けることができないため、ほとんどの ACC 機能が妨げられます。 acc.yml構成ファイルでデバッグが有効になっているacc.logファイルには、次のようなエラーが表示される場合があります。 {"component":"agent","error":"error getting plugin for check: sha512 'f60522ecfc7db6d18f50b6e317905e8e4bb737757c0b4b7642a53af19ca7aef3fcb349af36c643a216ab240d5f069797800f8ea6ba074207e3ff7854acbc1f5f' does not match specified sha512: 'd7f242d5bccefbac4c5cc0068aaef416a96424d6503393b5e45ca706f8fc1a3b924324f28f32140b95ad1ffbce0f8722dd0e2c54be38d5ab3c6675b339099e95'","level":"error","msg":"sending failure","time":"2021-04-07T04:01:54+01:00"} このエラーは誤解を招きます。SHA512 チェックは、ファイル内容を asset.db ファイルに保存されたプラグイン資産の SHA256 チェックサムと比較します。この場合、予想されるチェックサムを、実際のファイルではなく、要求をブロックしたネットワークデバイスからの HTML エラーページと比較しました。 {"level":"info","msg":"finished fetching asset","status":"503 Service Unavailable","time":"2021-04-07T03:59:55+01:00"} また、MID サーバーが正しく機能していたため、このメッセージは誤解を招きます。ただし、どちらのメッセージも、ACC がosquery.tar.gzファイルを取得できず、プラグイン資産がなく、ディスカバリーを実行できなかったことを示しています。 トラブルシューティングを行うには、cURL または wget を使用して ACC ホストからの要求を複製します。 [root@acchost ~]# curl -Lk -u web_service_username:password https://10.x.x.x:8081/static/acc_plugin/linux/all/all/all/osquery.tar.gz<html><head><title>File Transfer Blocked</title>...<h1>File Transfer Blocked</h1><p>Transfer of the file you were trying to download or upload has been blocked in accordance with company policy. Please contact your system administrator if you believe this is in error.</p><p><b>File name:</b> osquery.tar.gz </p>... 「ファイル転送がブロックされました」を示す HTML 応答を受け取った場合は、そのファイルタイプをブロックしているソフトウェアポリシーまたはファイアウォール/プロキシに例外を作成します。 ファイルは、ACC ホストの一時フォルダー (または ACC サービスを実行しているユーザーの一時フォルダー) にダウンロードされます。そのフォルダー内のこれらのファイルタイプの制限や権限の問題を調査します。プラグイン資産は、セキュリティチェックの実行中に一時的にステージングされてから、エージェントの適切なキャッシュフォルダーに展開され、一時ファイルが削除されます。 チェック出力エラーのトラブルシューティング 既知のエラーにより、 endpoint_discovery.rb チェックの ECC キュー入力に予期しない結果値が発生します。出力には、想定される IRE ペイロードではなく JSON::P arserError が含まれています。 この問題を解決するには、ACC-F 2.5.0 以降にアップグレードしてください。 他のスクリプトエラーは、別の問題を示している可能性があります。 "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)\r\n\tfrom 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'\r\n\tfrom C:/ProgramData/ServiceNow/agent-client-collector/cache/acc-f-commons/bin/endpoint_discovery.rb:179:in `block in <main>'\r\n\tfrom C:/ProgramData/ServiceNow/agent-client-collector/cache/acc-f-commons/bin/endpoint_discovery.rb:166:in `each'\r\n\tfrom C:/ProgramData/ServiceNow/agent-client-collector/cache/acc-f-commons/bin/endpoint_discovery.rb:166:in `<main>'\r\n", IRE 挿入失敗のトラブルシューティング 例 1:必須フィールドがありません この例では、Quebec パッチ 5 の ACC-F 2.5.0 を、Windows Server 2019 インスタンスの MID サーバーと ACC で使用します。 データ収集がオフになっていることに注意してください。エージェントフォームで [データ収集を再開 (Resume data collection)] を選択しても、この問題は解決しません。 入力ペイロードに "name" : "check-discovery-basic" が含まれている MonitoringProbe/on_demand_request のecc_queue入力を見つけます。ecc_queueペイロードフィールドには、プラットフォーム、名前、serial_number、およびその他の識別属性を含むbasic_inventoryを含む、ACC ホストサーバーのすべての詳細を含む大きな JSON 出力を含める必要があります。 "output" : "{\"basic_inventory\":{\"platform\":\"windows\",\"name\":\"cs-win8695\",\"manufacturer\":\"VMware, Inc.\",\"model_id\":\"VMware Virtual Platform\",\"model_number\":\"\",\"serial_number\":\"VMware-42 34 fd 2e 71 c2 80 c9-57 3c 4e e8 5e e9 d6 3f\",\"operating_system_domain\":\"supportlabwin.local\",\"operating_system\":\"Microsoft Windows Server 2019 Standard\",\"operating_system_version\":\"10.0.17763\",\"operating_system_service_pack\":\"\",\"operating_system_architecture\":\"64-bit\",\"os_address_width\":\"64\",\"ram\":\"4096\",\"cpu_manufacturer\":\"GenuineIntel\",\"cpu_name\":\"Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz\",\"cpu_speed\":\"2195\",\"cpu_count\":\"1\",\"cpu_core_count\":\"1\",\"cpu_core_thread\":\"1\",\"kernel_release\":\"\",\"ip_address\":\"10.190.132.12\",\"default_gateway\":\"10.190.132.1\",\"is_virtual\":\"true\",\"fully_qualified_domain_name\":\"cs-win8695.supportlabwin.local\",\"object_id\":\"\",\"start_date\":\"1626852162000\",\"short_description\":\"\"},\"tcp_connections\":{\"connections\":[{\"type\":\"on\",\"pid\":\"860\",\"ip\":\"0.0.0.0\",\"port\":\"135\"},{\"type\":\"on\",\"pid\":\"4\",\"ip\":\"0.0.0.0\",\"port\":\"445\"},{\"type\":\"on\",\"pid\":\"404\",\"ip\":\"0.0.0.0\",\"port\":\"3389\"},{\".... ホスト属性が出力にない場合は、ACC でチェックを実行したときに問題が発生しています。ACC ログを確認します。 この例のようにデータが存在する場合は、CMDB 識別および調整エンジン (IRE) による CI の挿入に問題がある可能性があります。 完全な IRE デバッグログ記録を有効にするには、システムプロパティを一時的に追加します。 glide.cmdb.logger.source.identification_engine = info,warn,error,debug,debugVerbose ecc_queue入力フォームで 再実行 を選択して、センサーを強制的に再実行します。 注意:セッションのデバッグを有効にする [再実行 (デバッグ)] オプションは、ACC 入力では機能しません。ディスカバリーセンサーとサービスマッピングセンサーにのみ適用されます。 センサーはスケジューラーワーカースレッドで実行されます。ノードログを追跡している場合は、識別の試行、一致、およびエラーを示すidentification_engineログが表示されます。 ソース = identification_engine でフィルタリングして、このログ記録を syslog テーブルに表示することもできます。 解決策 この例では、「必須フィールド [owned_by] REQUIRED_ATTRIBUTE_EMPTYがありません というエラーは、カスタマイズによって cmdb テーブルのディクショナリでowned_byフィールドが必須になったことを示しています。 この問題を解決するには、次を実行します。 ディクショナリの [owned_byフィールドの 必須 チェックボックスをオフにします。必須要件を UI ポリシーなどの別の方法を使用して実装し、IRE に適用されないようにします。ecc_queue入力で 再実行 を選択して、CI を作成し、ACC レコードを入力します。 例 2:無効なディスカバリーソース ACC は、ホストサーバー CI を照合または挿入するときに、IRE データソース/ディスカバリーソース AgentClientCollector を使用します。ACC-V は、同様のチェックを実行するときに値 ACC-Visibility を使用します。次のようなidentification_engineエラーが表示される場合があります。 06/14/21 13:09:30 (704) glide.scheduler.worker.1 identification_engine : INVALID_INPUT_DATA In payload invalid data source [ACC-Visibility] exist. You need to provide a valid choice value from field [discovery_source] in table [cmdb_ci]: no thrown error 新しい ACC でチェックを実行する場合、エラーは次のようになります: 新しい ACC でチェックを実行する場合、エラーは ACC-Visibility ではなく AgentClientCollector を参照します。 解決策 過去にdiscovery_source選択リストをカスタマイズした場合 (インポートセットや他のシステムとの統合など)、ACC アプリをアクティブ化しても、ACC 値は選択リストに追加されません。ServiceNow は、アップグレード中およびプラグインのアクティブ化中に、カスタマイズされた選択リストを意図的にスキップします。 この問題を解決するには、ACC 値のレコードを sys_choice テーブルに手動で追加します。 Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } エージェントは、temp フォルダーを使用して ACC プラグインを抽出または検証します