impact-analysis について
impact-analysisは、構成アイテムの変更が依存システムやビジネスサービスに及ぼす影響を評価するServiceNowスキルです。変更管理者やITチーム向けに、CMDBの関係を追跡し、CIの重要度に基づくリスク評価とCAB審査用の情報作成を支援します。
主な機能
- 01構成アイテムの検索
- 02依存関係の追跡
- 03影響を受けるビジネスサービスの特定
- 04CIの重要度と変更リスクの評価
- 05影響レポートの生成
- 06影響を受けるCIと変更リクエストの関連付け
活用シーン
- 01データベースサーバーの保守変更の評価
- 02アプリケーション導入の影響確認
- 03CAB向けの影響情報の準備
- 04インシデントのトリアージ時のサービス影響調査
MCP 対応
ServiceNow MCPツールでCI、CMDBの関係、サービス関連付けを検索し、バックグラウンド分析を実行して、影響を受けるCIを変更リクエストに関連付けます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill impact-analysisインストール後、Claude Code で/impact-analysisを入力して読み込まれたか確認します。
詳細
変更影響分析
概要
影響分析では、CI に変更を加えた場合に何が影響を受けるかを特定します。このスキルでは、以下の方法を扱います。
- CMDB のリレーションを使用して影響経路をたどる
- 影響を受けるビジネスサービスを特定する
- CI の重要度をビジネスへの影響にマッピングする
- CI のリレーションに基づいて変更リスクを定量化する
- CAB レビュー用の影響レポートを作成する
使用するタイミング: 変更の実施前、インシデントのトリアージ中、キャパシティプランニング時、または新しいデプロイメントの評価時です。
価値提案: 正確な影響分析により、予期しない停止を防ぎ、変更の失敗を減らし、情報に基づいたリスク判断が可能になります。
前提条件
- ロール:
itil、change_manager、またはcmdb_readアクセス権 - アクセス: cmdb_ci、cmdb_rel_ci、cmdb_ci_service、service_ci_assoc テーブル
- 知識: CMDB のリレーション、サービスマッピングの概念
- 関連スキル: 先に
cmdb/relationship-mappingを完了してください
手順
ステップ 1:変更対象の CI を特定する
まず、変更によって影響を受ける CI を見つけます。
名前で検索:
Tool: SN-Query-Table
Parameters:
table_name: cmdb_ci
query: nameLIKEprod-web-01
fields: sys_id,name,sys_class_name,operational_status,business_criticality
IP アドレスで検索:
Tool: SN-Query-Table
Parameters:
table_name: cmdb_ci_computer
query: ip_address=10.0.1.100
fields: sys_id,name,sys_class_name,operational_status,support_group
便利なツールを使用:
Tool: SN-List-CmdbCis
Parameters:
ci_class: cmdb_ci_server
query: name=prod-web-01
fields: sys_id,name,business_criticality,support_group
ステップ 2:上流への影響をマッピングする(この CI に依存するもの)
変更対象の CI に依存するものをたどります。
直接の依存関係(1 レベル):
Tool: SN-Query-Table
Parameters:
table_name: cmdb_rel_ci
query: child=[ci_sys_id]^type.parent_descriptorLIKEDepends
fields: parent,parent.name,parent.sys_class_name,type.parent_descriptor
依存する CI の詳細を取得:
Tool: SN-Query-Table
Parameters:
table_name: cmdb_ci
query: sys_idIN[comma_separated_parent_ids]
fields: sys_id,name,sys_class_name,business_criticality,operational_status
複数レベルの依存関係チェーン(再帰):
Tool: SN-Execute-Background-Script
Parameters:
description: Trace full upstream impact
script: |
var targetCiId = 'YOUR_CI_SYS_ID';
var maxDepth = 5;
var impactedCIs = [];
var visited = {};
function traceUpstream(ciId, depth) {
if (depth > maxDepth || visited[ciId]) return;
visited[ciId] = true;
var gr = new GlideRecord('cmdb_rel_ci');
gr.addQuery('child', ciId);
gr.addQuery('type.parent_descriptor', 'CONTAINS', 'Depends');
gr.query();
while (gr.next()) {
var parentId = gr.parent.toString();
var parentCi = new GlideRecord('cmdb_ci');
if (parentCi.get(parentId)) {
impactedCIs.push({
depth: depth,
sys_id: parentId,
name: parentCi.name.toString(),
class: parentCi.sys_class_name.toString(),
criticality: parentCi.business_criticality.toString()
});
traceUpstream(parentId, depth + 1);
}
}
}
traceUpstream(targetCiId, 1);
gs.info('=== UPSTREAM IMPACT ANALYSIS ===');
gs.info('Total CIs impacted: ' + impactedCIs.length);
impactedCIs.forEach(function(ci) {
gs.info('Level ' + ci.depth + ': ' + ci.name + ' (' + ci.class + ') - Criticality: ' + ci.criticality);
});
ステップ 3:影響を受けるビジネスサービスを特定する
ビジネスサービスは依存関係チェーンの最上位にあり、ビジネス価値を表します。
直接関連付けられているサービスを検索:
Tool: SN-Query-Table
Parameters:
table_name: service_ci_assoc
query: ci_id=[ci_sys_id]
fields: service_id,service_id.name,service_id.operational_status
リレーションチェーン経由でサービスを検索:
Tool: SN-Query-Table
Parameters:
table_name: cmdb_rel_ci
query: child=[ci_sys_id]^parent.sys_class_nameLIKEcmdb_ci_service
fields: parent,parent.name,parent.operational_status,parent.busines_criticality
包括的なサービス影響分析:
Tool: SN-Execute-Background-Script
Parameters:
description: Find all affected business services
script: |
var targetCiId = 'YOUR_CI_SYS_ID';
var affectedServices = [];
var visited = {};
function findServices(ciId, path) {
if (visited[ciId]) return;
visited[ciId] = true;
// Check if this CI is a service
var ci = new GlideRecord('cmdb_ci');
if (ci.get(ciId)) {
if (ci.sys_class_name.toString().indexOf('cmdb_ci_service') !== -1) {
affectedServices.push({
sys_id: ciId,
name: ci.name.toString(),
criticality: ci.business_criticality.toString(),
path: path.join(' -> ')
});
return;
}
}
// Check direct service associations
var assoc = new GlideRecord('service_ci_assoc');
assoc.addQuery('ci_id', ciId);
assoc.query();
while (assoc.next()) {
var svc = new GlideRecord('cmdb_ci_service');
if (svc.get(assoc.service_id)) {
affectedServices.push({
sys_id: svc.sys_id.toString(),
name: svc.name.toString(),
criticality: svc.business_criticality.toString(),
path: path.join(' -> ') + ' -> (direct association)'
});
}
}
// Traverse upstream
var gr = new GlideRecord('cmdb_rel_ci');
gr.addQuery('child', ciId);
gr.query();
while (gr.next()) {
var parentId = gr.parent.toString();
var parentCi = new GlideRecord('cmdb_ci');
if (parentCi.get(parentId)) {
findServices(parentId, path.concat([parentCi.name.toString()]));
}
}
}
var startCi = new GlideRecord('cmdb_ci');
startCi.get(targetCiId);
findServices(targetCiId, [startCi.name.toString()]);
gs.info('=== AFFECTED BUSINESS SERVICES ===');
gs.info('Total services: ' + affectedServices.length);
affectedServices.forEach(function(svc) {
gs.info('Service: ' + svc.name + ' | Criticality: ' + svc.criticality);
gs.info(' Path: ' + svc.path);
});
ステップ 4:ビジネス上の重要度を評価する
CI の重要度によって変更リスクのレベルが決まります。
ビジネス上の重要度の値:
| 値 | ラベル | 説明 | 変更リスク |
|---|---|---|---|
| 1 | 最も重要 | 中核となるビジネス業務 | 非常に高い |
| 2 | 重要 | 重要なビジネス機能 | 高い |
| 3 | 重要性あり | 支援機能 | 中程度 |
| 4 | やや重要 | 必須ではない機能 | 低い |
| 5 | 重要ではない | ビジネスへの影響は最小限 | 非常に低い |
総合リスクを計算:
Tool: SN-Execute-Background-Script
Parameters:
description: Calculate change risk score
script: |
var targetCiId = 'YOUR_CI_SYS_ID';
var impactData = {
directCriticality: '',
servicesImpacted: 0,
criticalServicesImpacted: 0,
totalDependentCIs: 0,
riskScore: 0
};
// Get target CI criticality
var targetCi = new GlideRecord('cmdb_ci');
if (targetCi.get(targetCiId)) {
impactData.directCriticality = targetCi.business_criticality.toString() || '5';
}
// Count dependent CIs and criticality
var visited = {};
function countImpact(ciId) {
if (visited[ciId]) return;
visited[ciId] = true;
var gr = new GlideRecord('cmdb_rel_ci');
gr.addQuery('child', ciId);
gr.query();
while (gr.next()) {
var parentCi = new GlideRecord('cmdb_ci');
if (parentCi.get(gr.parent)) {
impactData.totalDependentCIs++;
if (parentCi.sys_class_name.toString().indexOf('service') !== -1) {
impactData.servicesImpacted++;
if (parseInt(parentCi.business_criticality) <= 2) {
impactData.criticalServicesImpacted++;
}
}
countImpact(gr.parent.toString());
}
}
}
countImpact(targetCiId);
// Calculate risk score (1-10)
var critScore = 6 - parseInt(impactData.directCriticality || 5);
var svcScore = Math.min(impactData.servicesImpacted * 2, 4);
var critSvcScore = impactData.criticalServicesImpacted * 2;
impactData.riskScore = Math.min(critScore + svcScore + critSvcScore, 10);
gs.info('=== RISK ASSESSMENT ===');
gs.info('Direct CI Criticality: ' + impactData.directCriticality);
gs.info('Dependent CIs: ' + impactData.totalDependentCIs);
gs.info('Services Impacted: ' + impactData.servicesImpacted);
gs.info('Critical Services: ' + impactData.criticalServicesImpacted);
gs.info('RISK SCORE: ' + impactData.riskScore + '/10');
gs.info('Recommendation: ' + (impactData.riskScore >= 7 ? 'CAB REVIEW REQUIRED' : impactData.riskScore >= 4 ? 'Peer Review Recommended' : 'Standard Change Process'));
ステップ 5:影響レポートを作成する
CAB レビュー用の包括的な影響レポートを作成します。
すべての影響データを構造化形式で取得:
Tool: SN-Execute-Background-Script
Parameters:
description: Generate comprehensive impact report
script: |
var targetCiId = 'YOUR_CI_SYS_ID';
var report = {
generatedAt: new GlideDateTime().getDisplayValue(),
targetCI: {},
upstreamImpact: [],
downstreamImpact: [],
affectedServices: [],
affectedUsers: 0,
riskLevel: '',
recommendations: []
};
// Target CI details
var targetCi = new GlideRecord('cmdb_ci');
if (targetCi.get(targetCiId)) {
report.targetCI = {
name: targetCi.name.toString(),
class: targetCi.sys_class_name.toString(),
criticality: targetCi.business_criticality.getDisplayValue(),
environment: targetCi.environment.toString(),
supportGroup: targetCi.support_group.getDisplayValue(),
location: targetCi.location.getDisplayValue()
};
}
// Upstream (what depends on this)
var upGr = new GlideRecord('cmdb_rel_ci');
upGr.addQuery('child', targetCiId);
upGr.query();
while (upGr.next()) {
var upCi = new GlideRecord('cmdb_ci');
if (upCi.get(upGr.parent)) {
report.upstreamImpact.push({
name: upCi.name.toString(),
class: upCi.sys_class_name.toString(),
criticality: upCi.business_criticality.getDisplayValue()
});
}
}
// Downstream (what this depends on)
var downGr = new GlideRecord('cmdb_rel_ci');
downGr.addQuery('parent', targetCiId);
downGr.query();
while (downGr.next()) {
var downCi = new GlideRecord('cmdb_ci');
if (downCi.get(downGr.child)) {
report.downstreamImpact.push({
name: downCi.name.toString(),
class: downCi.sys_class_name.toString()
});
}
}
// Services
var svcAssoc = new GlideRecord('service_ci_assoc');
svcAssoc.addQuery('ci_id', targetCiId);
svcAssoc.query();
while (svcAssoc.next()) {
var svc = new GlideRecord('cmdb_ci_service');
if (svc.get(svcAssoc.service_id)) {
report.affectedServices.push({
name: svc.name.toString(),
criticality: svc.business_criticality.getDisplayValue()
});
}
}
// Estimate affected users (if service has user_base field)
report.affectedServices.forEach(function(svc) {
var svcGr = new GlideRecord('cmdb_ci_service');
svcGr.addQuery('name', svc.name);
svcGr.query();
if (svcGr.next() && svcGr.user_base) {
report.affectedUsers += parseInt(svcGr.user_base) || 0;
}
});
// Risk level
var criticalCount = report.affectedServices.filter(function(s) {
return s.criticality === 'Most Critical' || s.criticality === 'Critical';
}).length;
if (criticalCount > 0 || report.upstreamImpact.length > 10) {
report.riskLevel = 'HIGH';
report.recommendations.push('Schedule during maintenance window');
report.recommendations.push('Prepare rollback plan');
report.recommendations.push('Notify affected service owners');
} else if (report.upstreamImpact.length > 3) {
report.riskLevel = 'MEDIUM';
report.recommendations.push('Peer review recommended');
report.recommendations.push('Test in non-prod first');
} else {
report.riskLevel = 'LOW';
report.recommendations.push('Standard change process');
}
gs.info(JSON.stringify(report, null, 2));
ステップ 6:影響分析を変更リクエストに関連付ける
影響分析を変更リクエストに関連付けます。
影響を受ける CI を変更に追加:
Tool: SN-Create-Record
Parameters:
table_name: task_ci
data:
task: [change_request_sys_id]
ci_item: [affected_ci_sys_id]
影響の概要で変更を更新:
Tool: SN-Update-Record
Parameters:
table_name: change_request
sys_id: [change_sys_id]
data:
impact: 2 # 1=High, 2=Medium, 3=Low
risk: "Medium"
business_duration: "4 hours"
justification: "Impact analysis shows 5 dependent services, 2 critical"
ツール使用の概要
| 操作 | MCP ツール | REST エンドポイント |
|---|---|---|
| CI を検索 | SN-Query-Table, SN-List-CmdbCis | GET /cmdb_ci |
| リレーションを照会 | SN-Query-Table | GET /cmdb_rel_ci |
| サービスを検索 | SN-Query-Table | GET /cmdb_ci_service |
| サービスの関連付け | SN-Query-Table | GET /service_ci_assoc |
| 複雑な分析 | SN-Execute-Background-Script | POST /api/sn_chg_rest |
| 変更に関連付け | SN-Create-Record | POST /task_ci |
ベストプラクティス
- 広く調べてから深く掘り下げる: まず第 1 レベルの依存関係をすべて特定し、その後、再帰的にたどります
- 両方向を考慮する: 影響は上流(依存関係)だけでなく、下流(インフラストラクチャ)にも及びます
- 時間要因を考慮する: 同じ変更でも、営業時間内とメンテナンス時間帯では影響が異なります
- 前提を文書化する: CMDB に記録されていないリレーションに関する前提を記録します
- CAB の前に検証する: CAB に提示する前に、重要な経路を手動で検証します
- 先に CMDB を更新する: リレーションが不足している場合は、影響分析を完了する前に追加します
リスク評価マトリックス
| 基準 | 低(1 点) | 中(2 点) | 高(3 点) |
|---|---|---|---|
| CI の重要度 | 重要度なし | 重要 | 重大/最重要 |
| 影響を受けるサービス | 0~1 | 2~5 | 6 以上 |
| 重要なサービス | 0 | 1 | 2 以上 |
| ユーザーへの影響 | 100 未満 | 100~1000 | 1000 以上 |
| 復旧時間 | 1 時間未満 | 1~4 時間 | 4 時間以上 |
リスクスコアの解釈:
- 5~7:低リスク - 標準の変更プロセス
- 8~11:中リスク - ピアレビューが必要
- 12~15:高リスク - CAB レビューが必要
トラブルシューティング
影響分析で依存関係が表示されない
症状: CI がサービスに明らかに使用されているにもかかわらず、CI の上流への影響がゼロと表示されます
原因: CMDB の関係が不足しています
解決策: cmdb/relationship-mapping スキルを使用して、不足している関係を確認し、作成します
影響の一覧にサービスが表示されない
症状: 影響を受けるはずのビジネスサービスが表示されません
原因: service_ci_assoc レコードまたは関係が不足しています
解決策:
service_ci_assocで直接の関連付けを確認しますcmdb_rel_ciで関係の連鎖を確認します- 不足している関連付けを作成します
リスクスコアが低すぎるように見える
症状: 重要なインフラストラクチャのリスクスコアが低く表示されます
原因: CI にビジネス上の重要度が設定されていません
解決策: 分析の前に、CI の business_criticality フィールドを更新します
再帰クエリがタイムアウトする
症状: 複雑な環境でバックグラウンドスクリプトがタイムアウトします
原因: 再帰のレベルが多すぎるか、クエリが適切に最適化されていません
解決策: maxDepth を減らすか、制限付きのインデックス付きクエリを使用します
例
例 1:データベースサーバーのメンテナンスによる影響
# 1. Find the database server
Tool: SN-Query-Table
Parameters:
table_name: cmdb_ci_server
query: name=prod-db-01
fields: sys_id,name,business_criticality
# Result: sys_id = abc123, criticality = 2 (Critical)
# 2. Find what runs on this server
Tool: SN-Query-Table
Parameters:
table_name: cmdb_rel_ci
query: child=abc123^type.parent_descriptorLIKERuns
fields: parent.name,parent.sys_class_name
# Result: Oracle DB Instance, MySQL Instance
# 3. Find what depends on these databases
Tool: SN-Query-Table
Parameters:
table_name: cmdb_rel_ci
query: child.nameLIKEOracle^ORchild.nameLIKEMySQL
fields: parent.name,parent.sys_class_name
# Result: ERP Application, HR Portal, Customer Portal
# 4. Find affected services
Tool: SN-Query-Table
Parameters:
table_name: service_ci_assoc
query: ci_id.nameLIKEPortal^ORci_id.nameLIKEERP
fields: service_id.name,service_id.business_criticality
# Result:
# - Customer Service (Critical)
# - HR Services (Important)
# - Finance Operations (Most Critical)
# CONCLUSION: HIGH RISK - 3 services affected, 2 critical
例 2:アプリケーションのデプロイによる影響
# Scenario: Deploying new version of "Portal Frontend" application
# 1. Get application CI
Tool: SN-List-CmdbCis
Parameters:
ci_class: cmdb_ci_appl
query: name=Portal Frontend
fields: sys_id,business_criticality,support_group
# 2. Run full impact analysis script (from Step 5)
# This returns structured JSON with:
# - All dependent CIs
# - Affected services
# - Risk score
# - Recommendations
# 3. Create impact record for change
Tool: SN-Update-Record
Parameters:
table_name: change_request
sys_id: CHG0012345_sys_id
data:
impact: 2
risk: "Medium"
justification: |
Impact Analysis Results:
- 1 Business Service Affected: Customer Portal
- 3 Dependent Components: Load Balancer, CDN, Auth Service
- Risk Score: 6/10
- Recommended: Peer review, rollback plan ready
関連スキル
cmdb/relationship-mapping- 関係の作成と検証cmdb/ci-discovery- CI の作成と分類cmdb/data-quality- 信頼性の高い影響分析に向けた CMDB の正確性の確保itsm/change-management- 変更要求のワークフロー