mcpField
O
observability-integration

observability-integration

github.com/happy-technologies-llc云与 DevOps4141 次安装2 天前更新
代码仓库

关于 observability-integration

用于将第三方可观测性平台接入 ServiceNow ITOM Event Management 的技能。它指导运维团队配置连接器、规范化告警、映射指标,并验证事件到告警的数据流。

主要功能

  1. 01配置可观测性连接器
  2. 02规范化外部告警严重性
  3. 03将外部指标映射到 ServiceNow
  4. 04验证事件和生成的告警
  5. 05分析 CI 绑定准确性

适用场景

  1. 01在 ServiceNow 集中处理 Datadog 告警
  2. 02检查事件接入和告警生成
  3. 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

常见连接器类型:

平台连接器类型方向协议
DatadogDatadog Connector拉取REST API
DatadogGeneric Webhook推送Webhook
DynatraceDynatrace Connector拉取REST API
New RelicNew Relic Connector拉取REST API
GenericGeneric 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-ScriptCI 绑定分析、批量验证、规范化检查
SN-Natural-Language-Search使用自然语言查询,例如“Datadog 中未绑定的警报”
REST API 参考
端点方法用途
/api/now/table/em_connector_instanceGET/POST管理连接器实例
/api/now/table/em_connector_typeGET列出可用的连接器类型
/api/now/table/em_eventGET查看原始接收的事件
/api/now/table/em_alertGET查看已处理的警报
/api/now/table/em_match_ruleGET/POST管理警报规范化规则
/api/now/table/sa_metric_definitionGET查看指标定义

最佳实践

  • 尽早规范化: 在生产环境启用连接器前配置严重性和优先级映射,以防止警报风暴
  • 绑定到 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 得到正确表示,以便绑定警报

参考资料

评论

支持 Markdown