关于 impact-analysis
impact-analysis 是供变更经理和 IT 团队使用的 ServiceNow 技能,用于评估配置项变更对依赖系统和业务服务的影响。它追踪 CMDB 关系、结合配置项关键性评估风险,并为 CAB 审查整理影响信息。
主要功能
- 01查找配置项
- 02追踪依赖关系
- 03识别受影响的业务服务
- 04评估配置项关键性与变更风险
- 05生成影响报告
- 06将受影响配置项关联到变更请求
适用场景
- 01评估数据库服务器维护变更
- 02审查应用部署影响
- 03为 CAB 准备影响信息
- 04在事件分诊时调查服务影响
MCP 相关
使用 ServiceNow MCP 工具查询配置项、CMDB 关系和服务关联,执行后台分析,并将受影响配置项关联到变更请求。
安装
复制下面的命令,在终端中运行。
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 |
最佳实践
- **先广后深:**先识别所有第一层依赖,再递归追踪
- **考虑两个方向:**影响会沿上游(依赖项)传播,也会沿下游(基础设施)传播
- **考虑时间因素:**同一项变更在工作时间和维护窗口期间造成的影响不同
- **记录假设:**记录 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 显示没有上游影响,但显然被服务使用
原因: 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- 变更请求工作流