バックグラウンドスクリプトを使用して識別および調整エンジンをデバッグする方法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: ; } } バックグラウンドスクリプトから識別および調整エンジン (IRE) API 呼び出しを実行して詳細なデバッグ情報を生成することで、予期しないディスカバリーまたは SCCM 結果のトラブルシューティングを行います。ディスカバリーまたは統合プロセスが期待どおりにレコードを挿入または更新しない場合は、バックグラウンドスクリプトで IRE API 呼び出しを使用して、デバッグ出力を他のシステムアクティビティから分離できます。このアプローチでは、アクティブなディスカバリージョブ中にシステムログを検索するよりもクリーンなログデータが得られます。 Release<!-- /*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: ; } } サポートされているすべてのリリース Instructions<!-- /*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: ; } } 開始する前に 警告: この記事のスクリプトでは、レコードを挿入または更新します。このトラブルシューティングは 非本番インスタンスのみ で実行します。本番環境でデバッグする必要がある場合は、レコードを挿入または更新する権限があることを確認してください。 要件 IRE 入力ペイロード (「IRE ペイロードの検索」セクションを参照)アドミン権限を持つユーザーシステム定義 > スクリプトへのアクセス - バックグラウンド 注意:すべてのユーザーが、これらの例で使用されているバックグラウンドスクリプトまたは API にアクセスできるわけではありません。 代替方法 また、 Configuration > Identification/Reconciliation > Identification Simulation の Identification Simulation モジュールを使用することもできます。ただし、このモジュールでは、問題の根本原因を特定するために必要なデバッグデータと同じレベルのデバッグデータは提供されません。 バックグラウンドスクリプトを使用する理由 デバッグ情報はシステムログで確認できますが、ディスカバリージョブが実行されている場合は、データの分離が困難になることがあります。バックグラウンドスクリプトからのデバッグステートメントはセッションに分離されているため、出力の分析が容易になります。 IRE ペイロードを見つける。 IRE 入力ペイロードは、API に送信されるたびにログに記録されます。 システムログ > システムログ > すべてに移動します。メッセージに「input =」が含まれるレコードを検索します。ペイロードが見つからない場合、またはイベントが過去に発生した場合は、ECC キュー入力を再処理するか、ディスカバリーを再実行してから、再度検索します。 IRE デバッグログ記録を有効にする IRE ペイロードがログに記録されない場合は、次のシステムプロパティを追加します。 プロパティ名: glide.cmdb.logger.source.identification_engineプロパティ値: info、warn、error、debug、debugVerbose 警告:デバッグが完了したら、このプロパティをデフォルト値の info,warn,error に戻します。 このプロパティを追加しても IRE ペイロードが見つからない場合は、レコードの挿入または更新のプロセスで IRE API が使用されていません。 デバッグスクリプトの実行 バックグラウンドスクリプトから IRE API 呼び出しを実行するには、次のスクリプトを使用します。 var payload = <IRE_Payload>;var discoverySource = "ServiceNow";var output = SNC.IdentificationEngineScriptableApi.createOrUpdateCI(discoverySource, JSON.stringify(payload));gs.print(output); ペイロード形式 IRE_Payloadは、次の形式の JSON オブジェクト (文字列ではない) である必要があります。 {"fld1":"val1","fld2":"val2"} サンプルペイロード {"items":[{"className":"cmdb_ci_win_server","values":{"company":"86c1f3193790200044e0bfc8bcbe5d95","install_status":"1","ip_address":"10.20.30.41","location":"a63c49b037d0200044e0bfc8bcbe5dd9","mac_address":"ABCD1234","manufacturer":"0c43c22bc611227500002515e25bf079","model_id":"4431c26b37913000158bbfc8bcbe5d0d","name":"SNCTest Win Server 100","operational_status":"1","ram":"2048","serial_number":"SNC123456789"}}]} ペイロードを含むスクリプト例 次の例には、SQL ステートメントを表示するための gs.trace(true) が含まれています。これはすべてのシナリオで必要というわけではありませんが、クエリレベルの問題を特定するのに役立ちます。 var payload = {"items":[{"className":"cmdb_ci_win_server","values":{"company":"86c1f3193790200044e0bfc8bcbe5d95","install_status":"1","ip_address":"10.20.30.40","location":"a63c49b037d0200044e0bfc8bcbe5dd9","mac_address":"ABCD1234","manufacturer":"0c43c22bc611227500002515e25bf079","model_id":"4431c26b37913000158bbfc8bcbe5d0d","name":"SNCTest Win Server 100","operational_status":"1","ram":"2048","serial_number":"SNC123456789"}}]};var discoverySource = "ServiceWatch";gs.trace(true);var output = SNC.IdentificationEngineScriptableApi.createOrUpdateCI(discoverySource, JSON.stringify(payload));gs.trace(false);gs.print(output); コール出力例 次の出力は、典型的な IRE デバッグ応答を示しています。出力後に重要な行が説明されています。 identification_engine : IdentificationEngine::process: Pass=1identification_engine : addAttempt [{"className":"cmdb_ci_win_server","values":{"operational_status":"1","discovery_source":"ServiceWatch","install_status":"1","mac_address":"ABCD1234","name":"SNCTest002","serial_number":"SNC123456789","company":"86c1f3193790200044e0bfc8bcbe5d95","location":"a63c49b037d0200044e0bfc8bcbe5dd9","ip_address":"10.20.30.41","model_id":"4431c26b37913000158bbfc8bcbe5d0d","manufacturer":"0c43c22bc611227500002515e25bf079","ram":"2048"},"internal_id":"37dadd3adbd674104a9a53ca1184b9ac","sys_object_source_info":{"source_name":"ServiceWatch"},"settings":{},"sys_ire_info":{"ire_received_time":"2021-09-03 15:33:31"}}] - [sys_object_source] SKIPPEDidentification_engine : addAttempt [{"className":"cmdb_ci_win_server","values":{"operational_status":"1","discovery_source":"ServiceWatch","install_status":"1","mac_address":"ABCD1234","name":"SNCTest002","serial_number":"SNC123456789","company":"86c1f3193790200044e0bfc8bcbe5d95","location":"a63c49b037d0200044e0bfc8bcbe5dd9","ip_address":"10.20.30.41","model_id":"4431c26b37913000158bbfc8bcbe5d0d","manufacturer":"0c43c22bc611227500002515e25bf079","ram":"2048"},"internal_id":"37dadd3adbd674104a9a53ca1184b9ac","sys_object_source_info":{"source_name":"ServiceWatch"},"settings":{},"sys_ire_info":{"ire_received_time":"2021-09-03 15:33:31"}}] - [Rule id:c12f9be8c3400200d8d4bea192d3aea6|cmdb_ci_hardware|cmdb_serial_number|[serial_number, serial_number_type]] SKIPPEDidentification_engine : addAttempt [{"className":"cmdb_ci_win_server","values":{"operational_status":"1","discovery_source":"ServiceWatch","install_status":"1","mac_address":"ABCD1234","name":"SNCTest002","serial_number":"SNC123456789","company":"86c1f3193790200044e0bfc8bcbe5d95","location":"a63c49b037d0200044e0bfc8bcbe5dd9","ip_address":"10.20.30.41","model_id":"4431c26b37913000158bbfc8bcbe5d0d","manufacturer":"0c43c22bc611227500002515e25bf079","ram":"2048"},"internal_id":"37dadd3adbd674104a9a53ca1184b9ac","sys_object_source_info":{"source_name":"ServiceWatch"},"settings":{},"sys_ire_info":{"ire_received_time":"2021-09-03 15:33:31"}}] - [Rule id:fb27f69cc3000200d8d4bea192d3ae67|cmdb_ci_hardware|[serial_number]] MATCHEDidentification_engine : createOrUpdateCI: Matched 1 records and 0 relations in 4msecidentification_engine : Reconciliation: update to field 'name' of CI 'a853dd72dbd674104fa1c9db1396190e' was skipped because of rules [60d9117adbd674104fa1c9db13961986] defined in cmdb_reconciliation_definitionidentification_engine : Reconciliation: cmdb_ci_win_server(name) field update skipped for Data Source ServiceWatchidentification_engine : Commit: UPDATE cmdb_ci_win_server : a853dd72dbd674104fa1c9db1396190eidentification_engine : Processed 1 records and 0 relations in 4msec + 135msec (waited 0msec for mutex)identification_engine : logId:[3bda95ba17d67410854244fa7a3ee1c2] Processed payload from ServiceWatch. Using options: {partial_payloads:false,partial_commits:false,deduplicate_payloads:false,generate_summary:false}identification_engine : logId:[3bda95ba17d67410854244fa7a3ee1c2] Input = {"items":[{"className":"cmdb_ci_win_server","values":{"operational_status":"1","install_status":"1","mac_address":"ABCD1234","name":"SNCTest002","company":"86c1f3193790200044e0bfc8bcbe5d95","location":"a63c49b037d0200044e0bfc8bcbe5dd9","serial_number":"SNC123456789","ip_address":"10.20.30.41","model_id":"4431c26b37913000158bbfc8bcbe5d0d","manufacturer":"0c43c22bc611227500002515e25bf079","ram":"2048"},"sys_object_source_info":{"source_name":"ServiceWatch"},"sys_ire_info":{"ire_received_time":"2021-09-03 15:33:31"}}]}identification_engine : logId:[3bda95ba17d67410854244fa7a3ee1c2] Output = {"items":[{"className":"cmdb_ci_win_server","operation":"UPDATE","sysId":"a853dd72dbd674104fa1c9db1396190e","maskedAttributes":["name"],"identifierEntrySysId":"fb27f69cc3000200d8d4bea192d3ae67","identificationAttempts":[{"info":"sys_object_source SKIPPED","identifierName":"","attemptResult":"SKIPPED","attributes":[],"hybridEntryCiAttributes":[]},{"identifierName":"Hardware Rule","attemptResult":"SKIPPED","attributes":["serial_number","serial_number_type"],"searchOnTable":"cmdb_serial_number","hybridEntryCiAttributes":[]},{"identifierName":"Hardware Rule","attemptResult":"MATCHED","attributes":["serial_number"],"searchOnTable":"cmdb_ci_hardware","hybridEntryCiAttributes":[]}],"info":[],"errorCount":0,"markers":[],"mergedPayloadIds":[],"warningCount":0,"inputIndices":[0]}],"additionalCommittedItems":[],"relations":[],"additionalCommittedRelations":[]}identification_engine : Identification Engine Total execution time 146msec*** Script: {"items":[{"className":"cmdb_ci_win_server","operation":"UPDATE","sysId":"a853dd72dbd674104fa1c9db1396190e","maskedAttributes":["name"],"identifierEntrySysId":"fb27f69cc3000200d8d4bea192d3ae67","identificationAttempts":[{"info":"sys_object_source SKIPPED","identifierName":"","attemptResult":"SKIPPED","attributes":[],"hybridEntryCiAttributes":[]},{"identifierName":"Hardware Rule","attemptResult":"SKIPPED","attributes":["serial_number","serial_number_type"],"searchOnTable":"cmdb_serial_number","hybridEntryCiAttributes":[]},{"identifierName":"Hardware Rule","attemptResult":"MATCHED","attributes":["serial_number"],"searchOnTable":"cmdb_ci_hardware","hybridEntryCiAttributes":[]}],"info":[],"errorCount":0,"markers":[],"mergedPayloadIds":[],"warningCount":0,"inputIndices":[0]}],"additionalCommittedItems":[],"relations":[],"additionalCommittedRelations":[],"hasError":false,"hasWarning":false} この出力からの主な観察事項: serial_number識別ルールが既存のレコードと一致しました。調整ルールによって更新できなかったため、名前フィールドは更新されませんでした。最後の操作は UPDATE (INSERT ではなく) で、レコードが見つかったことを確認しました。 トラブルシューティングの例 例 1:SCCM が既存のレコードを更新する代わりに重複レコードを作成する。 シナリオ: シリアル番号「ABCDE12345」のコンピューターレコードが存在します。SCCM 変換を実行すると、既存のレコードと一致する必要があります。代わりに、複製が作成されます。それ以降の実行は、新しく作成されたレコードと一致します。 分析:システムログから IRE ペイロードを取得し、gs.trace(true) でスクリプトを実行した後、シリアル番号識別子を評価するときに生成された SQL クエリを確認します。 SELECT cmdb0.sys_id, cmdb0.sys_mod_count, cmdb0.sys_class_name, cmdb0.serial_number FROM (cmdb cmdb0 INNER JOIN cmdbpar1cmdbpar1 cmdb par1cmdbpar10 ON cmdb0. sys_id = cmdb$par10.sys_id ) WHERE cmdb0.sys_class_path LIKE '/!!/!2%' AND ((cmdb0.serial_number = 'ABCDE12345')) AND cmdb$par10.duplicate_of IS NULL 根本原因:IS NULL duplicate_of条件が原因でクエリが失敗しました。既存のレコードがある時点で別のレコードの重複としてマークされたため、duplicate_ofフィールドは空ではありませんでした。IRE は既存のレコードを見つけることができず、新しいレコードを作成しました。 解決策:元のレコードの duplicate_of フィールドをクリアするか、重複レコードを結合します。 例 2:ディスカバリーが SQL インスタンスクラスの CI 名を更新しない シナリオ: 変更されたパターンを使用する MSSQL サーバーディスカバリーでは、会社の要件に従って SQL インスタンス名を入力する必要があります。ただし、SQL インスタンス名はディスカバリーの実行後に更新されません。 分析: IRE ペイロードを取得し、バックグラウンドスクリプトから実行します。デバッグ出力には次の情報が表示されます。 identification_engine : Reconciliation: update to field 'tcp_port' of CI '6bce7dcfdb08b7c479cca9a5ca961910' was skipped because of rules [3104a82e9f503200c7445f9bc32e7054, a0d77a059311020062281f10077ffb32] defined in cmdb_reconciliation_definition identification_engine : Reconciliation: update to field 'name' of CI '6bce7dcfdb08b7c479cca9a5ca961910' was skipped because of rules [3104a82e9f503200c7445f9bc32e7054] defined in cmdb_reconciliation_definition identification_engine : Reconciliation: cmdb_ci_db_mssql_instance(tcp_port) field update skipped for Data Source Service-now identification_engine : Reconciliation: cmdb_ci_db_mssql_instance(name) field update skipped for Data Source Service-now identification_engine : Commit: UPDATE cmdb_ci_db_mssql_instance : 6bce7dcfdb08b7c479cca9a5ca961910 根本原因:従来の「Service-now」ディスカバリーソースの調整ルールが存在しません。既存の SQL インスタンスレコードの更新がブロックされました。 解決: 「Service-now」ディスカバリーソースを含む調整ルールを作成するか、既存の調整ルールと一致するようにディスカバリーソース名を更新します。 例 3:スクリプト中に実行されたビジネスルールの確認 スクリプトの実行時にトリガーされるビジネスルールを確認するには、次の手順を実行します。 システム診断 > スクリプトデバッガーに移動します。[ セッションログ ]タブを選択します。設定 を選択し、ビジネスルールのデバッグを有効にします。別のブラウザタブで、 システム定義 > スクリプト - バックグラウンド に移動し、スクリプトを実行します。スクリプトデバッガーに戻り、実行されたビジネスルールのセッションログを確認します。IRE デバッグ情報のスクリプト出力を確認します。 注:対応するチェックボックスをオンにすると、追加のセッションデバッグ設定を有効にすることができます。