トラブルシューティング:テクニカルサービスオファリング (TSO) の CSDM データ同期<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } この記事は、この機能のトラブルシューティング用です。 テクニカルサービスオファリング (TSO) を使用してデータを同期します。 (ドキュメントリンク)「テクニカルサービスオファリングを使用して、CI クラス全体および個々の CI のグループアサイン属性を同期する」 目次 Managed by::Manages 関係同期フィールドCMDB グループ CICSDM データ同期スケジュール済みジョブ 30 行目: grRel.addEncodedQuery('sys_created_on>javascript:gs.hoursAgo(25)');32行目:grRel.addEncodedQuery('parent.sys_class_name=service_offering^child.sys_class_name=cmdb_ci_query_based_service');34 行目:if(util.isTechnicalService(grRel.getValue('parent')) && util.isTechnicalService(grRel.getValue('child'))) {35 行目から 45 行目:service_offering レコードの新しいフィールド値を JSON オブジェクトに格納する46 行目: gs.eventQueue('csdm.tso.modified', tso, JSON.stringify(oldValues), JSON.stringify(newValues), 'sn_csdm_tso_queue'); csdm.tso.modified イベントCSDMTSOEventProcessor ジョブ 既知の問題 「TSO から CI に同期」スクリプトアクション 既知の問題 CI クラスマネージャーのクラスの [管理担当者グループ] の値は、テクニカルサービスオファリングによって上書きされます Managed by::Manages 関係 タイプ = 管理担当者 :: 管理親:テクニカルサービスオファリング (TSO)、テーブル:サービスオファリング CI [service_offering]、ただしフィールド service_classification=テクニカルサービス。[CSDM] > [テクニカルサービスオファリング] に移動します。子:ダイナミック CI グループ、テーブル:cmdb_ci_query_based_service、フィールド service_classification=テクニカルサービスも含まれます。[構成] > [ダイナミック CI グループ] に移動します。 CMDB グループにリンクされています。テーブル:cmdb_group。[構成] > [CMDB グループ] の順に移動します。サービスの分類 = テクニカルサービス 複数のダイナミック CI グループを TSO に関連付けることができます。 同期フィールド テクニカルサービスオファリング CI のフィールドは、CMDB グループの一部である CI にのみ同期されます。 サポートグループ [support_group]変更グループ [assignment_group]管理担当者グループ [managed_by_group] デフォルトのフォームレイアウトにある [管理担当者] [managed_by] は同期されません。お客様は、管理担当者グループ [managed_by_group] をフォームレイアウトに追加する必要があります。 CMDB グループ CI CMDB グループは、次の 3 つの方法で CI を指定できます。 保存済みクエリ [cmdb_group_contains_qb_query]。クエリビルダーの保存済みクエリ [qb_saved_query] へのリンク。これには、クエリビルダーの結果 [cmdb_qb_result_base] を拡張する独自の結果テーブル (Table-Per-Partition) があります。エンコードクエリ [cmdb_group_contains_encoded_query]。単なる条件ビルダーです。CI [cmdb_group_contains_ci]。CI ごとに 1 つのレコード。 CSDM データ同期スケジュール済みジョブ /sysauto_script.do?sys_id=3903094e5362101061b7ddeeff7b12be 毎日 03:00 に実行されます。(24 時間ごと) 親と子の両方がテクニカルサービスである、最近作成された管理担当者関係レコードをループし、それぞれに対してイベントを発生させます。 スクリプトの重要な部分は次のとおりです。 30 行目: grRel.addEncodedQuery('sys_created_on>javascript:gs.hoursAgo(25)'); クエリを過去 25 時間に作成された関係レコードに制限します。つまり、最初にすべての CI と CMDB グループを作成してから、 最後に関係を作成して、ジョブの実行時にすべてがそこにあるようにする必要があります。 インスタンスのスケジュール済みジョブ処理に問題がある場合、またはアップグレード中に一時停止された場合、 いくつかの新しい関係レコードが失われる可能性があります。 解決策: [スクリプト - バックグラウンド] ページからスケジュール済みスクリプトを実行し、sys_created_on行をコメントアウトし、関連する CI の数に応じてクエリを特定のcmdb_rel_ci sys_idsに制限します。 32行目:grRel.addEncodedQuery('parent.sys_class_name=service_offering^child.sys_class_name=cmdb_ci_query_based_service'); 親クラスは service_offering で、子クラスは cmdb_ci_query_based_service である必要があります。 誤ってテクニカルサービス [cmdb_ci_service_technical] を作成しないでください。 34 行目:if(util.isTechnicalService(grRel.getValue('parent')) && util.isTechnicalService(grRel.getValue('child'))) { これはスクリプトインクルード CSDMCMDBUtil.isTechnicalService を呼び出します。該当する行:return (grTech.get(sysId) && grTech.getValue('service_classification') == 'Technical Service'); テクニカルサービスオファリングとダイナミック CI グループの両方に、[サービス分類] = テクニカルサービス が設定されている必要があります。いずれかがビジネスサービス、アプリケーションサービス、またはその他の値である場合、同期は行われません。 35 行目から 45 行目:service_offering レコードの新しいフィールド値を JSON オブジェクトに格納する 46 行目: gs.eventQueue('csdm.tso.modified', tso, JSON.stringify(oldValues), JSON.stringify(newValues), 'sn_csdm_tso_queue'); csdm.tso.modified という名前のイベントを発生させ、終了します。 csdm.tso.modified イベント 名前:csdm.tso.modifiedパラメーター1:oldValues の JSON オブジェクトパラメーター2:newValues の JSON オブジェクトテーブル/インスタンス:親 TSO CIキュー:sn_csdm_tso_queue CSDMTSOEventProcessor ジョブ /sys_trigger.do?sys_id=936659370723011017b703767cd300f8 これらのイベントのキューが sn_csdm_tso_queue に設定されているため、通常の「イベントプロセス 0」ジョブはイベントを処理しません。 このスレッド/スケジューラーワーカーは、CI の更新を行うスクリプトアクションを処理します。何千もの CI についてこれらの更新を処理すると非常に長時間実行される可能性があるため、別のキューおよびイベント処理ジョブが使用されます。 既知の問題 PRB1578201/KB1120223 一部のインスタンスで sys_trigger に CSDMTSOEventProcessor がありません:テクニカルサービスオファリングのグループアサイン属性がグループ CI に同期されないSan Diego パッチ 5 で修正 「TSO から CI に同期」スクリプトアクション /sysevent_script_action.do?sys_id=54edf01b7302101061b79c0c6df6a739 TSO に関連する各ダイナミック CI グループの各 CI について、CI は 3 つの新しい値で更新されます。 これが実行されると、次のログに記録された syslog とアプリノードの localhost ログが表示され、CI グループが更新されていることが示され、CMDB クエリビルダーとエンコードクエリが再クエリされます。gs.log("Updating " + dcg.length + " 'Dynamic CI Group(s)' records."); 更新する CI がある場合は、次の情報も表示されます。gs.log("Updating " + cisToUpdate.length + " CI records belonging to some 'Dynamic CI Group(s)'."); CSDMCMDBUtil スクリプトインクルードの updateRecords() 関数は、実際の CI 更新に使用されます。 updateMultiple() は通常の更新と同様に使用されるため、ビジネスルール、監査、およびその他のエンジンはこの更新の一部として実行されます。 既知の問題 PRB1650669/KB1293523 CSDM データ同期スケジュール済みジョブは、[管理担当者グループ] が設定されていない場合に機能しません。 CI クラスマネージャーのクラスの [管理担当者グループ] の値は、テクニカルサービスオファリングによって上書きされます CI のクラスが変更されると、CI の「管理担当者グループ」は通常、CI クラスマネージャー (cmdb_class_infoテーブル) からの新しいクラスの管理担当者グループ値に設定されます。ただし、CI がテクニカルサービスオファリングのメンバーであり、TSO に [管理担当者グループ] の値がある場合は、その値は変更されません。