关于 itsm-incident-summarization
此 ServiceNow ITSM 技能汇总事件记录、日志和审计轨迹,生成供交接、结案、复盘及管理沟通使用的结构化报告。它涵盖业务影响、处理时间线、根因和解决信息。
主要功能
- 01构建事件时间线
- 02评估业务影响与 SLA
- 03整理诊断和修复操作
- 04记录根因与解决详情
- 05生成管理层摘要
适用场景
- 01交接或结案时整理事件记录
- 02为重大事件准备复盘报告
- 03向管理层汇报影响与处置情况
MCP 相关
通过 ServiceNow MCP 工具读取事件、日志、审计和相关记录,并可将摘要写入工作备注或结案备注。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill itsm-incident-summarization安装后在 Claude Code 中输入/itsm-incident-summarization确认已加载。
详细介绍
事件摘要
概述
此技能提供在 ServiceNow ITSM 中生成全面事件摘要的结构化方法。内容包括:
- 根据事件日志条目和审计跟踪构建时间顺序
- 评估业务影响,包括受影响的用户、服务和 SLA 影响
- 整理事件处理期间采取的诊断和补救措施
- 记录根本原因调查结果和解决详情
- 生成事后报告,以便与利益相关者沟通
- 为重大事件审查创建高管摘要
使用场景: 当事件需要总结以便交接、关闭、事后审查、管理层汇报或创建知识文章时使用。对于活动日志详尽的重大事件尤其有价值。
所需插件: com.snc.incident(Incident Management)
先决条件
- 角色:
itil、incident_manager或admin - 访问权限: 对
incident、sys_journal_field、sys_audit、change_request、problem的读取权限 - 知识: 熟悉 ITIL 事件生命周期、SLA 管理和事件报告要求
- 插件: 必须启用
com.snc.incident
操作步骤
第 1 步:检索事件记录
获取完整事件记录以了解背景。
使用 MCP:
Tool: SN-Get-Record
Parameters:
table_name: incident
sys_id: [incident_sys_id]
fields: sys_id,number,short_description,description,state,impact,urgency,priority,category,subcategory,assignment_group,assigned_to,opened_by,opened_at,resolved_by,resolved_at,closed_at,close_code,close_notes,business_service,cmdb_ci,caller_id,contact_type,escalation,severity,reopen_count,reassignment_count,business_duration,calendar_duration
使用 REST API:
GET /api/now/table/incident/[incident_sys_id]?sysparm_fields=sys_id,number,short_description,description,state,impact,urgency,priority,category,subcategory,assignment_group,assigned_to,opened_by,opened_at,resolved_by,resolved_at,closed_at,close_code,close_notes,business_service,cmdb_ci,caller_id,contact_type,escalation,severity,reopen_count,reassignment_count,business_duration,calendar_duration&sysparm_display_value=true
第 2 步:构建活动时间线
提取工作备注和评论,以构建按时间顺序排列的时间线。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[incident_sys_id]^name=incident^elementINwork_notes,comments^ORDERBYsys_created_on
fields: sys_id,element,value,sys_created_by,sys_created_on
limit: 100
使用 REST API:
GET /api/now/table/sys_journal_field?sysparm_query=element_id=[incident_sys_id]^name=incident^elementINwork_notes,comments^ORDERBYsys_created_on&sysparm_fields=sys_id,element,value,sys_created_by,sys_created_on&sysparm_display_value=true&sysparm_limit=100
第 3 步:跟踪状态变更和分配情况
查看审计跟踪,了解状态转换、优先级变更和重新分配情况。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_audit
query: tablename=incident^documentkey=[incident_sys_id]^fieldnameINstate,priority,impact,urgency,assigned_to,assignment_group,escalation^ORDERBYsys_created_on
fields: sys_id,fieldname,oldvalue,newvalue,user,sys_created_on
limit: 50
使用 REST API:
GET /api/now/table/sys_audit?sysparm_query=tablename=incident^documentkey=[incident_sys_id]^fieldnameINstate,priority,impact,urgency,assigned_to,assignment_group,escalation^ORDERBYsys_created_on&sysparm_fields=sys_id,fieldname,oldvalue,newvalue,user,sys_created_on&sysparm_display_value=true&sysparm_limit=50
第 4 步:识别受影响的 CI 和服务
确定受事件影响的基础设施和服务。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: task_ci
query: task=[incident_sys_id]
fields: sys_id,ci_item,ci_item.name,ci_item.sys_class_name,ci_item.operational_status
limit: 20
使用 REST API:
GET /api/now/table/task_ci?sysparm_query=task=[incident_sys_id]&sysparm_fields=sys_id,ci_item,ci_item.name,ci_item.sys_class_name,ci_item.operational_status&sysparm_display_value=true&sysparm_limit=20
第 5 步:检查相关记录
查找相关变更、问题或子事件。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: change_request
query: reason=[incident_sys_id]^ORcorrelation_id=[incident_number]
fields: sys_id,number,short_description,state,type,start_date,end_date
limit: 10
Tool: SN-Query-Table
Parameters:
table_name: problem
query: sys_id=[problem_id_from_incident]
fields: sys_id,number,short_description,state,root_cause,fix,workaround
limit: 5
第 6 步:生成全面摘要
将所有数据整理成结构化的事件摘要。
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
description: Generate a comprehensive incident summary
script: |
var incId = '[incident_sys_id]';
var inc = new GlideRecord('incident');
inc.get(incId);
gs.info('=== INCIDENT SUMMARY ===');
gs.info('Incident: ' + inc.number);
gs.info('Title: ' + inc.short_description);
gs.info('State: ' + inc.state.getDisplayValue());
gs.info('Priority: ' + inc.priority.getDisplayValue() + ' (Impact: ' + inc.impact.getDisplayValue() + ' / Urgency: ' + inc.urgency.getDisplayValue() + ')');
// Duration
gs.info('\n--- DURATION ---');
gs.info('Opened: ' + inc.opened_at);
gs.info('Resolved: ' + inc.resolved_at);
gs.info('Closed: ' + inc.closed_at);
gs.info('Business Duration: ' + inc.business_duration.getDisplayValue());
gs.info('Calendar Duration: ' + inc.calendar_duration.getDisplayValue());
// Impact
gs.info('\n--- IMPACT ---');
gs.info('Service: ' + inc.business_service.getDisplayValue());
gs.info('CI: ' + inc.cmdb_ci.getDisplayValue());
gs.info('Caller: ' + inc.caller_id.getDisplayValue());
// Get affected CI count
var ciCount = new GlideAggregate('task_ci');
ciCount.addQuery('task', incId);
ciCount.addAggregate('COUNT');
ciCount.query();
ciCount.next();
gs.info('Affected CIs: ' + ciCount.getAggregate('COUNT'));
// Assignment history
gs.info('\n--- ASSIGNMENT HISTORY ---');
var assign = new GlideRecord('sys_audit');
assign.addQuery('tablename', 'incident');
assign.addQuery('documentkey', incId);
assign.addQuery('fieldname', 'assignment_group');
assign.orderBy('sys_created_on');
assign.query();
while (assign.next()) {
gs.info(assign.sys_created_on + ': ' + assign.oldvalue + ' -> ' + assign.newvalue + ' (by ' + assign.user + ')');
}
gs.info('Reassignment Count: ' + inc.reassignment_count);
// Key activities (work notes summary)
gs.info('\n--- KEY ACTIVITIES ---');
var notes = new GlideRecord('sys_journal_field');
notes.addQuery('element_id', incId);
notes.addQuery('name', 'incident');
notes.addQuery('element', 'work_notes');
notes.orderBy('sys_created_on');
notes.query();
var noteNum = 0;
while (notes.next()) {
noteNum++;
var text = notes.value.toString().replace(/<[^>]*>/g, '').substring(0, 150);
gs.info('[' + notes.sys_created_on + ' | ' + notes.sys_created_by + '] ' + text);
}
gs.info('Total Work Notes: ' + noteNum);
// Resolution
gs.info('\n--- RESOLUTION ---');
gs.info('Close Code: ' + inc.close_code.getDisplayValue());
gs.info('Close Notes: ' + inc.close_notes);
gs.info('Resolved By: ' + inc.resolved_by.getDisplayValue());
gs.info('Reopen Count: ' + inc.reopen_count);
// Related problem
if (inc.problem_id && inc.problem_id.toString() !== '') {
gs.info('\n--- RELATED PROBLEM ---');
var prob = inc.problem_id.getRefRecord();
gs.info('Problem: ' + prob.number + ' | ' + prob.short_description);
gs.info('Root Cause: ' + prob.root_cause);
}
第 7 步:生成高管摘要
为领导层汇报创建简明的高管级摘要。
高管摘要模板:
=== EXECUTIVE INCIDENT SUMMARY ===
INCIDENT: [Number] - [Short Description]
SEVERITY: [Priority] | STATUS: [State]
DURATION: [Business Duration]
BUSINESS IMPACT:
- Service Affected: [Business Service]
- Users Impacted: [Estimated count]
- Revenue Impact: [If applicable]
ROOT CAUSE:
[Brief root cause description]
RESOLUTION:
[Resolution summary in 1-2 sentences]
CORRECTIVE ACTIONS:
1. [Immediate fix applied]
2. [Preventive measure planned]
3. [Related change/problem raised]
TIMELINE:
[Time] - Incident detected
[Time] - Initial response
[Time] - Escalated to [team]
[Time] - Root cause identified
[Time] - Resolution applied
[Time] - Service restored
第 8 步:保存摘要
将摘要作为工作备注发布,或更新关闭备注。
使用 MCP:
Tool: SN-Add-Work-Notes
Parameters:
table_name: incident
sys_id: [incident_sys_id]
work_notes: |
=== INCIDENT SUMMARY ===
[Generated summary content]
Timeline: [X] key events over [Y] hours
Reassignments: [count]
Work Notes: [count] entries
Related: [Problem/Change numbers]
工具使用
MCP 工具参考
| 工具 | 使用时机 |
|---|---|
SN-Get-Record | 检索完整事件记录 |
SN-Query-Table | 查询日志条目、审计跟踪、相关记录和受影响的 CI |
SN-Natural-Language-Search | 查找类似事件或相关知识 |
SN-Update-Record | 更新关闭备注以添加摘要 |
SN-Add-Work-Notes | 将摘要作为工作备注发布 |
SN-Execute-Background-Script | 生成涵盖多个来源的全面摘要 |
REST API 参考
| 端点 | 方法 | 用途 |
|---|---|---|
/api/now/table/incident | GET/PATCH | 读取事件并更新关闭备注 |
/api/now/table/sys_journal_field | GET | 提取工作备注和评论 |
/api/now/table/sys_audit | GET | 跟踪状态变更和分配情况 |
/api/now/table/task_ci | GET | 识别受影响的 CI |
/api/now/table/change_request | GET | 查找相关变更 |
/api/now/table/problem | GET | 查找相关问题 |
最佳实践
- 记录原因: 重点说明为何做出决策,而不仅仅是发生了什么;这对于事后事件复盘至关重要
- 量化影响: 纳入受影响用户数、停机时长和 SLA 影响百分比等指标
- 关联相关记录: 始终引用相关问题、变更和知识文章,以便追溯
- 逐步汇总: 对于长期运行的事件,在关键里程碑创建阶段性摘要
- 采用统一格式: 在整个组织内统一摘要模板,以便轻松比较
- 记录所有时间戳: 精确的时间戳有助于准确计算 SLA 并重建时间线
故障排除
工作备注缺失或不完整
原因: Agent 使用了评论而非工作备注,或者通过电子邮件添加了备注,导致格式可能有所不同
解决方案: 同时查询 work_notes 和 comments 元素。检查 sys_email 中基于电子邮件的通信记录。
审计轨迹缺失
原因: 某些字段变更可能未被审计,或者审计记录可能已被清除
解决方案: 验证事件表的审计策略。检查 sys_audit_delete 中的清除历史记录。使用日志条目补充信息。
时长计算不正确
原因: 业务时长不包含非工作时间;处于待处理状态时,计时可能已暂停
解决方案: 使用 calendar_duration 计算总经过时长。检查状态是否曾切换至或切换离“等待用户信息”或“待处理”状态。
未找到相关记录
原因: 记录通过不同字段关联,或者未设置关联 ID
解决方案: 在变更或问题记录的 short_description 或 description 字段中搜索事件编号。检查 correlation_id 和 parent_incident 字段。
示例
示例 1:事后事件复盘摘要
# 1. Get incident
Tool: SN-Get-Record
Parameters:
table_name: incident
sys_id: [sys_id]
fields: number,short_description,priority,impact,opened_at,resolved_at,close_notes,business_service
# 2. Get timeline
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[sys_id]^name=incident^element=work_notes^ORDERBYsys_created_on
fields: value,sys_created_by,sys_created_on
limit: 50
# 3. Get state changes
Tool: SN-Query-Table
Parameters:
table_name: sys_audit
query: tablename=incident^documentkey=[sys_id]^fieldname=state^ORDERBYsys_created_on
fields: oldvalue,newvalue,user,sys_created_on
limit: 20
示例 2:对未解决的 P1 事件进行批量摘要
Tool: SN-Execute-Background-Script
Parameters:
description: Summarize all open P1 incidents
script: |
var gr = new GlideRecord('incident');
gr.addQuery('priority', '1');
gr.addQuery('active', true);
gr.query();
gs.info('=== OPEN P1 INCIDENT SUMMARY ===');
gs.info('Total: ' + gr.getRowCount());
while (gr.next()) {
var age = gs.dateDiff(gr.opened_at.toString(), gs.nowDateTime(), true);
gs.info(gr.number + ' | ' + gr.short_description + ' | Age: ' + age + ' | Group: ' + gr.assignment_group.getDisplayValue() + ' | Service: ' + gr.business_service.getDisplayValue());
}
示例 3:SLA 影响摘要
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_id=[sys_id]
fields: number,sla_due,made_sla,business_duration,calendar_duration,priority
limit: 1
相关技能
itsm/major-incident- 针对重大事件的专门摘要itsm/problem-analysis- 摘要中引用的根本原因分析itsm/kb-generation- 将事件摘要转换为知识文章itsm/email-recommendation- 向利益相关者发送基于摘要的通信reporting/trend-analysis- 汇总事件摘要以进行趋势报告