CSDM データ同期:グループによる管理と、CI がダイナミック CI グループメンバーシップから外れたときにクリアされた関係性Summary<!-- /*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: ; } } 説明 CI 属性が変更され、CI がダイナミック CI グループのクエリフィルター基準に一致しなくなると、次の変更が自動的に行われます。 グループによる管理:cmdb_class_info から NULL またはクラスレベルのデフォルトに戻りますサービス構成アイテムの関連性 (svc_ci_assoc) - 関連付けレコードが削除されました関連サービスの関係 — CI から削除済み この動作をトリガーする一般的なシナリオには、ライフサイクルステージの変更、運用ステータスの変更、場所の変更、OS の変更、ステータスの変更、またはダイナミック CI グループのクエリフィルターで参照されるその他のフィールドが含まれます (これらに限定されません)。 お客様は、「CSDM データ同期」スケジュール済みジョブが非アクティブであると報告され、どうしてそうなっているのか疑問に思うことがよくあります。重要なインサイトは、CSDM データ同期のスケジュール済みジョブと CSDM ビジネスルールはまったく別のメカニズムであるということです。ビジネスルールは、スケジュール済みジョブがアクティブか非アクティブかに関係なく、レコードsvc_ci_assoc削除時に事後対応的に実行されます。 原因 これは OOB (Out-of-Box) CSDM の動作であり、バグではありません。CSDM データ同期フレームワークは、テクニカルサービスオファリング、ダイナミック CI グループ、および CI 属性間の調整を維持する複数の独立したコンポーネントで構成されています。フィルターの不一致により CI がダイナミック CI グループからドロップアウトした場合、フレームワークは [グループによる管理] を自動的にクラスレベルのデフォルトまたは NULL に戻します。 関連するコンポーネント 1.スケジュール済みジョブ:svc_ci_assocおよびエラーカウンターの更新 この OOB スケジュール済みジョブは定期的に実行され (デフォルトの間隔:5 分ごと)、以下を実行します。 各グループのクエリフィルターを再実行して、すべてのダイナミック CI グループ (cmdb_ci_query_based_service) メンバーシップを再評価しますフィルターに一致するようになった CI の新しいsvc_ci_assocレコードを追加しますフィルターに一致しなくなった CI のsvc_ci_assocレコードを削除しますサービスの CI カウンターを更新し、重複するカウントレコードを削除します 2.ビジネスルール:関連付けの削除時に CSDM データを同期 この OOB ビジネスルールは、サービス構成アイテムの関連性 [svc_ci_assoc] テーブルに登録されています。 When : After操作:削除のみ ([挿入] と [更新] はオフ)フィルター条件:[サービス ID.サービス分類] が [技術管理サービス] で、[サービス ID.クラス] が [ダイナミック CI グループ] Script : (function executeRule(current, previous /*null when async*/) { var job = new GlideRunScriptJob(); job.scheduleScript("new CSDMCMDBUtil().updateCiOnAssocDelete(" + JSON.stringify(current.getValue("ci_id")) + ")"); })(current, previous); この BR は、CSDMCMDBUtil.updateCiOnAssocDelete() を呼び出す非同期スクリプトジョブをキューに入れ、削除されたsvc_ci_assocレコードから CI sys_id渡します。非同期ジョブはバックグラウンドワーカースレッドで実行されます。 3.スクリプトインクルード:CSDMCMDBUtil 関数:updateCiOnAssocDelete(ciSysIds) この関数は、呼び出されると次のロジックを実行します。 ステップ A:svc_ci_assocクエリを実行して、CI が service_classification = テクニカルサービスの別のダイナミック CI グループにまだ関連付けられているかどうかを確認します。「はい」の場合、そのグループの親テクニカルサービスオファリングから [グループによる管理] の値を継承しようとします (MBG 値を持つ最新の TSO が優先されます)。ステップ B:他の DCG 関連付けが存在しない場合、CI sys_idは「元に戻す」アレイに残ります。ステップ C:元に戻す必要があるすべての CI に対して revertMBGToClassValueOrNull() を呼び出します。 関数:revertMBGToClassValueOrNull(cis, tsoMbgValue) この関数は、フォールバックの [グループによる管理] の値を決定します。 tsoMbgValue が (別の TSO から) 提供された場合は、その値を使用しますtsoMbgValue がない場合は、テーブルcmdb_class_info CI のクラスを照会し、デフォルトmanaged_by_groupを確認しますcmdb_class_info にデフォルトがある場合は、その値を使用しますデフォルトがどこにも存在しない場合は、managed_by_group を NULL に設定しますupdateMultiple() を実行して、そのクラスの影響を受けるすべての CI に変更を適用します 4.その他の関連する CSDM ビジネスルール 次の追加の OOB ビジネスルールは同じフレームワークの一部であり、さまざまなシナリオで同様の MBG クリアをトリガーする可能性があります。 DCG 削除時の CSDM データ同期:ダイナミック CI グループレコード自体が削除されたときに発生します。関連付けられていたすべての CI の MBG を元に戻します削除された関係時の CSDM データ同期:テクニカルサービスオファリングとダイナミック CI グループ間のcmdb_rel_ci関係が削除されたときに発生しますTSO 削除時の CSDM データ同期:テクニカルサービスオファリングレコードが削除されたときに発生します再分類時の CSDM データ同期:CI のsys_class_nameが変更されたときに発生します (再分類)TSO から CI に同期 (スクリプトアクション):ダイナミック CI グループを介して、テクニカルサービスオファリングから CI に管理担当者グループを伝播します。CI クラスから管理担当者グループを同期 (Sync Managed By Group from CI Class) (スクリプトアクション):指定されたクラスの CI の MBG 値をバッチ同期します。 イベントの順序 CI 属性が変更され、CI がダイナミック CI グループのクエリフィルターと一致しなくなった場合の一般的なシーケンスは次のとおりです。 ステップ 1 — CI 属性の変更 アクター:ユーザー/ディスカバリー/ワークフロー/任意の更新ソース 詳細:ダイナミック CI グループのクエリフィルターで参照される CI フィールドは、フィルター基準を満たさなくなった値に更新されます。この時点で [グループによる管理] はクリアされていません。CI は元の MBG 値を保持します。 ステップ 2 — ダイナミック CI グループメンバーシップの再評価 アクター:スケジュール済みジョブ (システム) 詳細:「svc_ci_assoc およびエラーカウンターの更新」は次の間隔で実行されます。このジョブは、ダイナミック CI グループのクエリフィルターを再実行し、CI が適格でなくなったと判断し、CI をグループにリンクしているsvc_ci_assocレコードを削除します。 ステップ 3 — 削除svc_ci_assocビジネスルールが開始される アクター:システム (ビジネスルール) の詳細:「削除された関連付けの CSDM データ同期」が削除後に開始されます。CSDMCMDBUtil.updateCiOnAssocDelete() を呼び出している非同期 GlideRunScriptJob をキューに入れます。 ステップ 4 — 非同期ジョブが CSDMCMDBUtil を実行する アクター:システム (バックグラウンドワーカー) 詳細:updateCiOnAssocDelete() CI が他のダイナミック CI グループに関連付けられているかどうかを確認します。「はい」の場合、そのグループの親 TSO から MBG を継承します。他の関連付けが存在しない場合は、cmdb_class_infoクラスレベルのデフォルトを確認します。デフォルトが存在しない場合は NULL にフォールバックします。 ステップ 5 — グループによる管理がクリアされました アクタ: システムの詳細: updateMultiple() は、managed_by_groupを決定された値 (別の TSO の MBG、クラスのデフォルト、または NULL) に設定します。監査履歴には、「システム」ユーザーが行った変更が表示されます。 タイミングに関する注意:スケジュール済みジョブが次に実行されるタイミングに応じて、ステップ 1 とステップ 2 の間には通常 1 〜 10 分の遅延があります (デフォルト:5 分ごと)。この遅延は、CI 属性が変更されたときに MBG のクリアがすぐに行われないため、混乱を引き起こすことがよくあります。 解決オプション オプション 1:クラスレベルのデフォルトを cmdb_class_info に設定する (推奨) 顧客が、CI がダイナミック CI グループから脱落したときに、管理担当者グループを NULL ではなく特定の値にフォールバックさせたい場合: cmdb_class_info.list に移動関連する CI クラス (cmdb_ci_vmware_instance、cmdb_ci_linux_server など) のレコードを検索または作成しますmanaged_by_groupフィールドを目的のデフォルトグループに設定します CSDMCMDBUtil.revertMBGToClassValueOrNull() 関数は、デフォルトで NULL に設定される前に、このテーブルを代替としてチェックします。これは既存の OOB フレームワーク内で機能するため、最も混乱の少ないオプションです。 オプション 2:ダイナミック CI グループフィルターを調整する 顧客が属性の変更に関係なく CI のダイナミック CI グループメンバーシップを保持したい場合は、グループのクエリフィルターをより包括的に修正できます。これにより、svc_ci_assocレコードが削除されないようになり、チェーン全体が起動することはありません。 考慮事項: これは、除外される CI がグループのメンバーのままになり、サービス CI の合計にカウントされることを意味しますが、これはサービスモデリングの観点からは望ましくない可能性があります。 重要なポイント 「CSDM データ同期」スケジュール済みジョブと CSDM データ同期ビジネスルールは、まったく別のメカニズムです。スケジュール済みジョブが非アクティブであっても、ビジネスルールの実行が妨げられることはありません。ビジネスルールは、削除svc_ci_assoc原因にかかわらず、レコードの削除時に事後対応的に実行されます。「svc_ci_assocとエラーカウンターの更新」スケジュール済みジョブは、ダイナミック CI グループメンバーシップを再評価し、グループフィルターに一致しなくなった CI の関連付けを削除するプロセスです。このジョブは、「CSDM データ同期」ジョブとは独立して実行されます。CI 属性の変更によってダイナミック CI グループとのフィルターの不一致が発生すると、このチェーンがトリガーされる可能性があります。ライフサイクルの変更に限定されません。完全なチェーンには、ユーザートランザクション→スケジュール済みジョブ (ワーカースレッド) →ビジネスルール→非同期スクリプトジョブ (ワーカースレッド) という複数の実行コンテキストが含まれます。このクロスコンテキスト実行により、Splunk ログ分析なしで問題を診断することが困難になります。監査履歴には、「システム」ユーザーが行ったグループによる管理の変更が表示され、自動化されたバックグラウンドプロセスであることが確認されます。cmdb_class_infoテーブルはフォールバックメカニズムを提供します。クラスレベルのデフォルトmanaged_by_groupが構成されている場合、CSDMCMDBUtil は元に戻すときに NULL ではなくその値を使用します。