关于 observability-integration
用于将第三方可观测性平台接入 ServiceNow ITOM Event Management 的技能。它指导运维团队配置连接器、规范化告警、映射指标,并验证事件到告警的数据流。
主要功能
- 01配置可观测性连接器
- 02规范化外部告警严重性
- 03将外部指标映射到 ServiceNow
- 04验证事件和生成的告警
- 05分析 CI 绑定准确性
适用场景
- 01在 ServiceNow 集中处理 Datadog 告警
- 02检查事件接入和告警生成
- 03排查未绑定 CI 的告警
MCP 相关
使用 ServiceNow MCP 工具检查和配置连接器记录、查询事件与告警,并审查规范化或 CI 绑定数据。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill observability-integration安装后在 Claude Code 中输入/observability-integration确认已加载。
详细介绍
可观测性集成
概述
此技能介绍了将第三方可观测性平台与 ServiceNow ITOM Event Management 集成的结构化方法。内容包括:
- 配置 Datadog、Dynatrace 和 New Relic 的事件管理连接器
- 将传入警报规范化为 ServiceNow 严重性和优先级标准
- 将外部指标映射到 ServiceNow 指标定义
- 构建警报关联规则,以减少噪声并对相关事件进行分组
- 验证从外部监控到 ServiceNow 警报的端到端数据流
- 排查损坏或配置错误的集成
适用场景: 运维团队需要将多个可观测性平台的监控数据集中到 ServiceNow,以统一管理警报、创建事件并查看服务健康状况仪表板时。
必需插件: com.snc.em(Event Management)
先决条件
- 角色:
evt_mgmt_admin、evt_mgmt_integration或admin - 访问权限: 对
em_event、em_alert、em_connector_instance、em_match_rule具有读写权限 - 知识: 熟悉 Event Management 概念、连接器架构,以及目标可观测性平台的 webhook/API 功能
- 插件: 必须激活
com.snc.em;为基于拉取的连接器配置 MID Server - 外部要求: Datadog、Dynatrace 或 New Relic 的 API 密钥或 webhook 凭据
操作步骤
步骤 1:检查现有连接器实例
盘点当前的事件管理连接器,了解已集成的内容。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: em_connector_instance
query: active=true^ORDERBYname
fields: sys_id,name,connector_type,status,last_run_time,last_run_status,mid_server,polling_interval
limit: 50
使用 REST API:
GET /api/now/table/em_connector_instance?sysparm_query=active=true^ORDERBYname&sysparm_fields=sys_id,name,connector_type,status,last_run_time,last_run_status,mid_server,polling_interval&sysparm_display_value=true&sysparm_limit=50
步骤 2:查看可用的连接器类型
确定目标可观测性平台支持的连接器类型。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: em_connector_type
query: active=true^nameLIKEdatadog^ORnameLIKEdynatrace^ORnameLIKEnew relic^ORnameLIKEgeneric
fields: sys_id,name,description,connector_class,direction,protocol
limit: 20
使用 REST API:
GET /api/now/table/em_connector_type?sysparm_query=active=true^nameLIKEdatadog^ORnameLIKEdynatrace^ORnameLIKEnew relic^ORnameLIKEgeneric&sysparm_fields=sys_id,name,description,connector_class,direction,protocol&sysparm_display_value=true&sysparm_limit=20
常见连接器类型:
| 平台 | 连接器类型 | 方向 | 协议 |
|---|---|---|---|
| Datadog | Datadog Connector | 拉取 | REST API |
| Datadog | Generic Webhook | 推送 | Webhook |
| Dynatrace | Dynatrace Connector | 拉取 | REST API |
| New Relic | New Relic Connector | 拉取 | REST API |
| Generic | Generic REST Connector | 拉取/推送 | REST API |
步骤 3:配置新的连接器实例
为目标可观测性平台创建连接器实例。
使用 MCP(Datadog 示例):
Tool: SN-Create-Record
Parameters:
table_name: em_connector_instance
data:
name: Datadog Production Alerts
connector_type: [connector_type_sys_id]
active: true
polling_interval: 60
mid_server: [mid_server_name]
url: https://api.datadoghq.com/api/v1/monitor
api_key: [datadog_api_key]
application_key: [datadog_app_key]
使用 REST API:
POST /api/now/table/em_connector_instance
Content-Type: application/json
{
"name": "Datadog Production Alerts",
"connector_type": "[connector_type_sys_id]",
"active": "true",
"polling_interval": "60",
"mid_server": "[mid_server_name]",
"url": "https://api.datadoghq.com/api/v1/monitor"
}
步骤 4:配置警报规范化规则
将外部严重性级别映射到 ServiceNow 警报严重性。
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
description: Review and report on existing alert normalization mappings
script: |
gs.info('=== ALERT NORMALIZATION MAPPING ===');
// Review existing match rules
var mr = new GlideRecord('em_match_rule');
mr.addQuery('active', true);
mr.orderBy('order');
mr.query();
gs.info('\n--- Active Match Rules ---');
while (mr.next()) {
gs.info('Rule: ' + mr.name + ' | Order: ' + mr.order + ' | Source: ' + mr.source + ' | Severity Map: ' + mr.severity);
}
// Severity mapping reference
gs.info('\n--- ServiceNow Severity Reference ---');
gs.info('1 = Critical');
gs.info('2 = Major');
gs.info('3 = Minor');
gs.info('4 = Warning');
gs.info('5 = Info');
gs.info('0 = Clear');
// External platform mapping suggestions
gs.info('\n--- Suggested Datadog Mappings ---');
gs.info('Datadog "Alert" -> SN Severity 1 (Critical)');
gs.info('Datadog "Warn" -> SN Severity 3 (Minor)');
gs.info('Datadog "No Data" -> SN Severity 4 (Warning)');
gs.info('Datadog "OK" -> SN Severity 0 (Clear)');
gs.info('\n--- Suggested Dynatrace Mappings ---');
gs.info('Dynatrace "AVAILABILITY" -> SN Severity 1 (Critical)');
gs.info('Dynatrace "ERROR" -> SN Severity 2 (Major)');
gs.info('Dynatrace "SLOWDOWN" -> SN Severity 3 (Minor)');
gs.info('Dynatrace "RESOURCE" -> SN Severity 4 (Warning)');
gs.info('Dynatrace "CUSTOM" -> SN Severity 5 (Info)');
gs.info('\n--- Suggested New Relic Mappings ---');
gs.info('New Relic "CRITICAL" -> SN Severity 1 (Critical)');
gs.info('New Relic "WARNING" -> SN Severity 3 (Minor)');
gs.info('New Relic "NOT_CONFIGURED" -> SN Severity 5 (Info)');
步骤 5:验证传入事件
确认事件正从外部平台流入 ServiceNow。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: em_event
query: source=Datadog^ORsource=Dynatrace^ORsource=New Relic^ORDERBYDESCtime_of_event
fields: sys_id,source,node,type,resource,metric_name,severity,description,time_of_event,state
limit: 25
使用 REST API:
GET /api/now/table/em_event?sysparm_query=source=Datadog^ORsource=Dynatrace^ORsource=New Relic^ORDERBYDESCtime_of_event&sysparm_fields=sys_id,source,node,type,resource,metric_name,severity,description,time_of_event,state&sysparm_display_value=true&sysparm_limit=25
步骤 6:检查生成的警报
检查根据摄取的事件创建的警报,并验证 CI 绑定。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: em_alert
query: source=Datadog^ORsource=Dynatrace^ORsource=New Relic^state!=Closed^ORDERBYDESCsys_created_on
fields: sys_id,number,source,node,ci,severity,state,description,group_source,acknowledged,sys_created_on
limit: 25
使用 REST API:
GET /api/now/table/em_alert?sysparm_query=source=Datadog^ORsource=Dynatrace^ORsource=New Relic^state!=Closed^ORDERBYDESCsys_created_on&sysparm_fields=sys_id,number,source,node,ci,severity,state,description,group_source,acknowledged,sys_created_on&sysparm_display_value=true&sysparm_limit=25
步骤 7:分析 CI 绑定准确性
确认警报已正确绑定到 CMDB CI。
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
description: Analyze CI binding rates for external observability alerts
script: |
gs.info('=== CI BINDING ANALYSIS ===');
var sources = ['Datadog', 'Dynatrace', 'New Relic'];
for (var i = 0; i < sources.length; i++) {
var src = sources[i];
var total = new GlideAggregate('em_alert');
total.addQuery('source', src);
total.addAggregate('COUNT');
total.query();
total.next();
var totalCount = parseInt(total.getAggregate('COUNT'));
if (totalCount === 0) continue;
var bound = new GlideAggregate('em_alert');
bound.addQuery('source', src);
bound.addQuery('ci', '!=', '');
bound.addAggregate('COUNT');
bound.query();
bound.next();
var boundCount = parseInt(bound.getAggregate('COUNT'));
var unbound = totalCount - boundCount;
var rate = Math.round((boundCount / totalCount) * 100);
gs.info(src + ': Total=' + totalCount + ' | Bound=' + boundCount + ' | Unbound=' + unbound + ' | Rate=' + rate + '%');
// Show unbound alert nodes for troubleshooting
if (unbound > 0) {
var ub = new GlideRecord('em_alert');
ub.addQuery('source', src);
ub.addQuery('ci', '');
ub.setLimit(5);
ub.query();
while (ub.next()) {
gs.info(' Unbound: node=' + ub.node + ' | resource=' + ub.resource + ' | type=' + ub.type);
}
}
}
步骤 8:配置指标摄取
将外部指标映射到 ServiceNow 指标定义,以用于 Health Log Analytics。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sa_metric_definition
query: active=true^ORDERBYname
fields: sys_id,name,description,ci_type,metric_type,unit,source
limit: 30
使用 REST API:
GET /api/now/table/sa_metric_definition?sysparm_query=active=true^ORDERBYname&sysparm_fields=sys_id,name,description,ci_type,metric_type,unit,source&sysparm_display_value=true&sysparm_limit=30
工具用法
MCP 工具参考
| 工具 | 使用场景 |
|---|---|
SN-Query-Table | 查询连接器、事件、警报和匹配规则 |
SN-Get-Record | 获取特定连接器或警报的详细信息 |
SN-Create-Record | 创建新的连接器实例或匹配规则 |
SN-Update-Record | 修改连接器配置或警报状态 |
SN-Execute-Background-Script | CI 绑定分析、批量验证、规范化检查 |
SN-Natural-Language-Search | 使用自然语言查询,例如“Datadog 中未绑定的警报” |
REST API 参考
| 端点 | 方法 | 用途 |
|---|---|---|
/api/now/table/em_connector_instance | GET/POST | 管理连接器实例 |
/api/now/table/em_connector_type | GET | 列出可用的连接器类型 |
/api/now/table/em_event | GET | 查看原始接收的事件 |
/api/now/table/em_alert | GET | 查看已处理的警报 |
/api/now/table/em_match_rule | GET/POST | 管理警报规范化规则 |
/api/now/table/sa_metric_definition | GET | 查看指标定义 |
最佳实践
- 尽早规范化: 在生产环境启用连接器前配置严重性和优先级映射,以防止警报风暴
- 绑定到 CI: 确保外部主机名映射到 CMDB CI 名称;使用发现或导入集同步命名约定
- 对数据源去重: 避免在多个平台上监控同一资源,除非配置了去重规则
- 在预生产环境中测试: 在推广之前,在预生产实例中验证连接器配置和警报数量
- 合理设置轮询间隔: 在数据新鲜度与 API 速率限制之间取得平衡;生产环境通常为 60-120 秒
- 监控连接器运行状况: 定期检查
last_run_status,以发现静默故障
故障排除
连接器显示“Error”状态
原因: 身份验证失败、API 端点不可达或 MID Server 连接问题
解决方案: 验证 API 密钥和端点 URL。检查 MID Server 日志中的网络错误。从 MID Server 主机直接测试外部 API。
已接收事件,但未创建警报
原因: 事件处理规则或匹配规则与传入事件负载不匹配
解决方案: 查看 em_event 记录中的原始负载。检查 node、type、resource 字段是否符合匹配规则中的预期格式。
警报未绑定到 CI
原因: 外部平台中的 node 值与 CMDB 中任何 CI 的 name、fqdn 或 ip_address 都不匹配
解决方案: 创建 CI 查找规则或转换映射,以协调外部主机名与 CMDB 命名。使用 em_binding_rule 表实现自定义绑定逻辑。
警报数量过多/警报风暴
原因: 连接器级别的筛选不足,或监控范围过于宽泛
解决方案: 在连接器配置中应用筛选条件,限制接收的监控项/警报。使用警报管理规则抑制价值较低的警报。
示例
示例 1:Datadog 集成运行状况检查
# 1. Check connector status
Tool: SN-Query-Table
Parameters:
table_name: em_connector_instance
query: nameLIKEDatadog
fields: sys_id,name,status,last_run_time,last_run_status,polling_interval
limit: 5
# 2. View recent Datadog events
Tool: SN-Query-Table
Parameters:
table_name: em_event
query: source=Datadog^ORDERBYDESCtime_of_event
fields: source,node,type,severity,description,time_of_event
limit: 10
# 3. View resulting alerts
Tool: SN-Query-Table
Parameters:
table_name: em_alert
query: source=Datadog^state!=Closed^ORDERBYDESCsys_created_on
fields: number,node,ci,severity,state,description
limit: 10
示例 2:严重性映射审计
Tool: SN-Execute-Background-Script
Parameters:
description: Audit severity distribution by source
script: |
var sources = ['Datadog', 'Dynatrace', 'New Relic'];
for (var i = 0; i < sources.length; i++) {
var ga = new GlideAggregate('em_alert');
ga.addQuery('source', sources[i]);
ga.addQuery('state', '!=', 'Closed');
ga.addAggregate('COUNT');
ga.groupBy('severity');
ga.query();
gs.info('=== ' + sources[i] + ' Alert Severity Distribution ===');
while (ga.next()) {
gs.info('Severity ' + ga.severity.getDisplayValue() + ': ' + ga.getAggregate('COUNT'));
}
}
示例 3:跨平台警报比较
Tool: SN-Execute-Background-Script
Parameters:
description: Compare alert volumes and CI binding across observability platforms
script: |
gs.info('=== CROSS-PLATFORM COMPARISON ===');
var sources = ['Datadog', 'Dynatrace', 'New Relic'];
for (var i = 0; i < sources.length; i++) {
var ga = new GlideAggregate('em_alert');
ga.addQuery('source', sources[i]);
ga.addQuery('sys_created_on', '>=', gs.daysAgo(7));
ga.addAggregate('COUNT');
ga.query();
ga.next();
var count = ga.getAggregate('COUNT');
gs.info(sources[i] + ' alerts (last 7 days): ' + count);
}
相关技能
itom/alert-analysis- 分析和管理来自任何来源的警报itom/service-mapping- 将可观测性数据映射到业务服务itom/health-log-analytics- 使用接收的指标进行异常检测cmdb/relationship-mapping- 确保 CI 得到正确表示,以便绑定警报