mcpField
H
health-log-analytics

health-log-analytics

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

关于 health-log-analytics

面向 ServiceNow ITOM 运维团队的 Health Log Analytics 管理技能,涵盖指标、阈值和异常。它还提供历史趋势分析,用于容量规划和调整告警策略。

主要功能

  1. 01查看日志源与指标定义
  2. 02配置指标阈值
  3. 03检查性能异常
  4. 04分析容量与历史趋势
  5. 05调整阈值和告警策略

适用场景

  1. 01监测基础设施性能退化
  2. 02评估服务器容量需求
  3. 03减少阈值告警噪声

MCP 相关

使用 SN-Query-Table 等 MCP 工具查询日志源、指标、阈值和异常;还可通过 SN-Create-Record、SN-Update-Record 管理阈值,并用脚本分析趋势。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill health-log-analytics

安装后在 Claude Code 中输入/health-log-analytics确认已加载。

详细介绍

Health Log Analytics

概述

此技能提供了在 ServiceNow ITOM 中管理 Health Log Analytics(HLA)的结构化方法。涵盖:

  • 配置日志源以收集指标并摄取日志
  • 定义和调整指标阈值,以便主动发出警报
  • 使用 ML 驱动的基线检测 CI 性能模式中的异常
  • 根据历史指标趋势进行容量规划分析
  • 构建基础设施和服务的性能趋势报告
  • 管理阈值策略和警报抑制规则

适用场景: 运维团队需要主动监控基础设施健康状况、在性能下降影响服务之前检测到问题、规划容量需求,或调整警报阈值以减少噪声时。

所需插件: com.snc.sa.health-log-analytics

前提条件

  • 角色: sa_admin、evt_mgmt_admin 或 itil
  • 访问权限: 对 sa_metric_definition、sa_threshold、sa_anomaly、sa_log_source、em_alert 的读写权限
  • 知识: 熟悉 ITOM 指标类型、时间序列数据概念和 CI 性能基线
  • 插件: 必须激活 com.snc.sa.health-log-analytics 和 com.snc.em
  • 数据: 从受监控 CI 收集指标的 MID Server,或提供指标数据的可观测性平台连接器

操作步骤

步骤 1:查看已配置的日志源

清点活动日志源,了解当前数据收集范围。

使用 MCP:

Tool: SN-Query-Table
Parameters:
  table_name: sa_log_source
  query: active=true^ORDERBYname
  fields: sys_id,name,type,source_type,ci,status,last_collection_time,collection_interval,mid_server
  limit: 50

使用 REST API:

GET /api/now/table/sa_log_source?sysparm_query=active=true^ORDERBYname&sysparm_fields=sys_id,name,type,source_type,ci,status,last_collection_time,collection_interval,mid_server&sysparm_display_value=true&sysparm_limit=50

日志源类型:

类型描述
Agent从主机收集数据的 ServiceNow Agent
SNMP从网络设备进行 SNMP 轮询
WMIWindows Management Instrumentation
SSH通过 SSH 进行基于脚本的收集
REST从外部 API 拉取数据
Syslog基于推送的 syslog 接收器
步骤 2:查看指标定义

检查正在跟踪的指标及其配置。

使用 MCP:

Tool: SN-Query-Table
Parameters:
  table_name: sa_metric_definition
  query: active=true^ORDERBYci_type,name
  fields: sys_id,name,description,ci_type,metric_type,unit,source,aggregation_type,collection_interval
  limit: 50

使用 REST API:

GET /api/now/table/sa_metric_definition?sysparm_query=active=true^ORDERBYci_type,name&sysparm_fields=sys_id,name,description,ci_type,metric_type,unit,source,aggregation_type,collection_interval&sysparm_display_value=true&sysparm_limit=50

常见指标类型:

指标CI 类型单位典型阈值
CPU 利用率cmdb_ci_server百分比警告:80%,严重:95%
内存使用量cmdb_ci_server百分比警告:85%,严重:95%
磁盘使用量cmdb_ci_server百分比警告:80%,严重:90%
网络延迟cmdb_ci_netgearms警告:100ms,严重:500ms
响应时间cmdb_ci_servicems警告:2000ms,严重:5000ms
步骤 3:管理阈值

查看并配置指标阈值,以便主动发出警报。

使用 MCP:

Tool: SN-Query-Table
Parameters:
  table_name: sa_threshold
  query: active=true^ORDERBYmetric_definition.name
  fields: sys_id,name,metric_definition,ci,ci_type,warning_value,critical_value,operator,duration,active
  limit: 50

使用 REST API:

GET /api/now/table/sa_threshold?sysparm_query=active=true^ORDERBYmetric_definition.name&sysparm_fields=sys_id,name,metric_definition,ci,ci_type,warning_value,critical_value,operator,duration,active&sysparm_display_value=true&sysparm_limit=50

创建新阈值:

Tool: SN-Create-Record
Parameters:
  table_name: sa_threshold
  data:
    name: High CPU Alert - Production Servers
    metric_definition: [metric_def_sys_id]
    ci_type: cmdb_ci_server
    warning_value: 80
    critical_value: 95
    operator: ">="
    duration: 300
    active: true
步骤 4:检测异常

查询已检测到的异常,以识别意外的性能模式。

使用 MCP:

Tool: SN-Query-Table
Parameters:
  table_name: sa_anomaly
  query: state=active^ORDERBYDESCdetection_time
  fields: sys_id,ci,metric_definition,severity,state,detection_time,expected_value,actual_value,deviation,description
  limit: 30

使用 REST API:

GET /api/now/table/sa_anomaly?sysparm_query=state=active^ORDERBYDESCdetection_time&sysparm_fields=sys_id,ci,metric_definition,severity,state,detection_time,expected_value,actual_value,deviation,description&sysparm_display_value=true&sysparm_limit=30
步骤 5:容量规划分析

分析历史指标趋势,预测容量需求。

使用 MCP:

Tool: SN-Execute-Background-Script
Parameters:
  description: Analyze capacity trends for servers approaching resource limits
  script: |
    gs.info('=== CAPACITY PLANNING ANALYSIS ===');

    // Find CIs with recent high-utilization alerts
    var ga = new GlideAggregate('em_alert');
    ga.addQuery('source', 'Health Log Analytics');
    ga.addQuery('severity', '<=', '2'); // Critical or Major
    ga.addQuery('sys_created_on', '>=', gs.daysAgo(30));
    ga.addAggregate('COUNT');
    ga.groupBy('ci');
    ga.orderByAggregate('COUNT', 'DESC');
    ga.setLimit(20);
    ga.query();

    gs.info('\n--- CIs with Most HLA Alerts (Last 30 Days) ---');
    while (ga.next()) {
      var ciId = ga.ci.toString();
      var count = ga.getAggregate('COUNT');
      var ci = new GlideRecord('cmdb_ci');
      if (ci.get(ciId)) {
        gs.info('CI: ' + ci.name + ' (' + ci.sys_class_name + ') | Alerts: ' + count + ' | Status: ' + ci.operational_status.getDisplayValue());
      }
    }

    // Identify anomalies with upward trends (capacity risk)
    gs.info('\n--- Active Anomalies Indicating Growth ---');
    var anomaly = new GlideRecord('sa_anomaly');
    anomaly.addQuery('state', 'active');
    anomaly.addQuery('actual_value', '>', 'expected_value');
    anomaly.orderByDesc('deviation');
    anomaly.setLimit(15);
    anomaly.query();

    while (anomaly.next()) {
      gs.info('CI: ' + anomaly.ci.getDisplayValue() + ' | Metric: ' + anomaly.metric_definition.getDisplayValue() + ' | Expected: ' + anomaly.expected_value + ' | Actual: ' + anomaly.actual_value + ' | Deviation: ' + anomaly.deviation + '%');
    }
步骤 6:性能趋势报告

生成关键基础设施的性能摘要。

使用 MCP:

Tool: SN-Execute-Background-Script
Parameters:
  description: Generate performance trending summary for critical services
  script: |
    gs.info('=== PERFORMANCE TRENDING REPORT ===');

    // Alerts by severity over time
    gs.info('\n--- Alert Trend (Last 7 Days) ---');
    for (var d = 6; d >= 0; d--) {
      var dayStart = gs.daysAgo(d + 1);
      var dayEnd = gs.daysAgo(d);

      var ga = new GlideAggregate('em_alert');
      ga.addQuery('source', 'Health Log Analytics');
      ga.addQuery('sys_created_on', '>=', dayStart);
      ga.addQuery('sys_created_on', '<', dayEnd);
      ga.addAggregate('COUNT');
      ga.query();
      ga.next();
      var count = ga.getAggregate('COUNT');

      var dt = new GlideDateTime(dayStart);
      gs.info(dt.getDate().getByFormat('yyyy-MM-dd') + ': ' + count + ' alerts');
    }

    // Top alerting CIs
    gs.info('\n--- Top 10 Alerting CIs (Last 7 Days) ---');
    var topCI = new GlideAggregate('em_alert');
    topCI.addQuery('source', 'Health Log Analytics');
    topCI.addQuery('sys_created_on', '>=', gs.daysAgo(7));
    topCI.addAggregate('COUNT');
    topCI.groupBy('ci');
    topCI.orderByAggregate('COUNT', 'DESC');
    topCI.setLimit(10);
    topCI.query();

    while (topCI.next()) {
      gs.info('CI: ' + topCI.ci.getDisplayValue() + ' | Alerts: ' + topCI.getAggregate('COUNT'));
    }

    // Threshold breach distribution
    gs.info('\n--- Threshold Breaches by Metric ---');
    var thr = new GlideAggregate('em_alert');
    thr.addQuery('source', 'Health Log Analytics');
    thr.addQuery('sys_created_on', '>=', gs.daysAgo(7));
    thr.addAggregate('COUNT');
    thr.groupBy('metric_name');
    thr.orderByAggregate('COUNT', 'DESC');
    thr.setLimit(10);
    thr.query();

    while (thr.next()) {
      gs.info('Metric: ' + thr.metric_name + ' | Breaches: ' + thr.getAggregate('COUNT'));
    }
步骤 7:调整阈值策略

根据趋势数据调整阈值,以减少误报。

使用 MCP:

Tool: SN-Update-Record
Parameters:
  table_name: sa_threshold
  sys_id: [threshold_sys_id]
  data:
    warning_value: 85
    critical_value: 97
    duration: 600

使用 REST API:

PATCH /api/now/table/sa_threshold/[threshold_sys_id]
Content-Type: application/json

{
  "warning_value": "85",
  "critical_value": "97",
  "duration": "600"
}

工具使用

MCP 工具参考
工具使用时机
SN-Query-Table查询日志源、指标、阈值、异常和警报
SN-Get-Record获取特定指标定义或阈值详情
SN-Create-Record创建新的阈值、日志源或指标定义
SN-Update-Record调整阈值或更新日志源配置
SN-Execute-Background-Script容量分析、趋势报告、批量验证
SN-Natural-Language-Search使用自然语言查询,例如“存在 CPU 异常的服务器”
REST API 参考
端点方法用途
/api/now/table/sa_log_sourceGET/POST管理日志源
/api/now/table/sa_metric_definitionGET查看指标定义
/api/now/table/sa_thresholdGET/POST/PATCH管理阈值
/api/now/table/sa_anomalyGET查看检测到的异常
/api/now/table/em_alertGET查看 HLA 生成的警报

最佳实践

  • 先建立基线,再配置警报: 配置激进的阈值之前,先让 HLA 使用 2-4 周的数据建立基线
  • 使用持续时间窗口: 将阈值持续时间设为 5-10 分钟,避免因短暂峰值触发警报
  • 分层设置阈值: 同时创建警告阈值和严重阈值,在产生严重影响之前提供预警
  • 每周检查异常: 安排每周检查异常检测结果,以发现新出现的容量趋势
  • 关联变更记录: 将异常检测结果与近期变更请求交叉参考,区分预期行为与非预期行为
  • 逐步调整: 从保守的阈值开始,再根据运维经验逐步收紧

故障排除

未收集任何指标

原因: 日志源未启用、MID Server 离线或凭据无效
解决方案: 检查 sa_log_source.status 是否有错误。确认 MID Server 连接正常。在 MID Server 主机上测试凭据。

误报异常

原因: 基线数据不足,或未排除计划内维护
解决方案: 延长基线学习期。配置维护时间窗口,将已知的计划活动排除在异常检测之外。

未触发阈值警报

原因: 阈值未关联到正确的指标定义或 CI 类型,或者持续时间窗口过长
解决方案: 验证阈值上的 metric_definition 引用。检查 ci_type 是否与受监控的 CI 匹配。如果峰值持续时间较短,请缩短持续时间。

HLA 仪表板显示的数据已过时

原因: 收集间隔过长,或日志源轮询已停止
解决方案: 检查 sa_log_source.last_collection_time。确认收集计划处于启用状态。检查 MID Server 日志中的收集错误。

示例

示例 1:服务器容量审查
# 1. Find servers with high-severity anomalies
Tool: SN-Query-Table
Parameters:
  table_name: sa_anomaly
  query: state=active^ci.sys_class_name=cmdb_ci_server^severity<=2
  fields: ci,metric_definition,severity,actual_value,expected_value,deviation,detection_time
  limit: 20

# 2. Check threshold configuration for those servers
Tool: SN-Query-Table
Parameters:
  table_name: sa_threshold
  query: ci_type=cmdb_ci_server^active=true
  fields: name,metric_definition,warning_value,critical_value,duration
  limit: 20
示例 2:日志源运行状况检查
Tool: SN-Execute-Background-Script
Parameters:
  description: Check log source collection health
  script: |
    var ga = new GlideAggregate('sa_log_source');
    ga.addQuery('active', true);
    ga.addAggregate('COUNT');
    ga.groupBy('status');
    ga.query();

    gs.info('=== LOG SOURCE STATUS SUMMARY ===');
    while (ga.next()) {
      gs.info('Status: ' + ga.status.getDisplayValue() + ' | Count: ' + ga.getAggregate('COUNT'));
    }

    // Find stale log sources (no collection in 24 hours)
    gs.info('\n--- Stale Log Sources ---');
    var stale = new GlideRecord('sa_log_source');
    stale.addQuery('active', true);
    stale.addQuery('last_collection_time', '<', gs.daysAgo(1));
    stale.query();
    while (stale.next()) {
      gs.info('Source: ' + stale.name + ' | Last Collected: ' + stale.last_collection_time + ' | CI: ' + stale.ci.getDisplayValue());
    }
示例 3:每周性能摘要
Tool: SN-Query-Table
Parameters:
  table_name: em_alert
  query: severity=1^source=Health Log Analytics^sys_created_on>=javascript:gs.daysAgoStart(7)
  fields: number,ci,severity,metric_name,description,sys_created_on
  limit: 25

相关技能

  • itom/observability-integration - 将外部指标馈入 HLA
  • itom/alert-analysis - 分析 HLA 生成的警报
  • itom/service-mapping - 将 HLA 数据与服务拓扑关联
  • reporting/trend-analysis - 根据 HLA 指标数据构建报告

参考资料

评论

支持 Markdown