ServiceNow 的合成监控:表、规则与端点

Synthetic Monitoring for ServiceNowServiceNow 是那种外观看起来很简单、但一旦组织开始对其进行定制就会变成迷宫的平台之一。最初可能只是一个服务目录或人力资源门户,但很快就会演变成由自定义表、UI 策略、业务规则、Flow Designer 操作和脚本化的 REST 端点交织而成的复杂结构。所有这些并非坏事;事实上,这正是企业选择 ServiceNow 的原因:你可以构建任何东西。

但这种灵活性也带来了脆弱性。一旦你引入自定义逻辑 —— 尤其是相互依赖的逻辑 —— 就会产生在内置监控中不会显现、且大多数内部仪表盘看不见的故障模式。一个 ServiceNow 实例在纸面上可能看起来健康,但对于真实用户来说,门户可能完全无法使用。

这就是合成监控的作用所在。不是 ServiceNow 内部运行以验证工作流的那些轻量“合成检查”,而是从外向内的、在浏览器级别模拟真实用户如何与门户交互的监控。两者的区别就像检查服务器“心跳”和检查人类是否真的可以提交工单的区别。

外部合成监控能够捕捉源自你自定义表、客户端脚本、脚本化 API —— 以及最终源自你设计决策的故障。随着移动部件数量的增加,确认你的 ServiceNow 门户可以正常工作的唯一可靠方法,是使用能够像真实用户那样从互联网访问它的检测方式。

本文范围即在此:说明为何 ServiceNow 的自定义是大多数故障的根源、为何原生工具看不到这些问题,以及合成监控如何填补这道可见性缺口。

为何 ServiceNow 的自定义会破坏门户体验

Now Platform 为组织提供了巨大的可定制表面。由于底层结构高度模块化,人们很容易假设某处的小改动不会对其他地方产生影响。

但实际上,ServiceNow 中的几乎所有内容都是关系性的——自定义表会引用其他表,规则会针对继承类触发,脚本会改变其他脚本依赖的状态。即便在浏览器中看起来很简单的 UI 元素,也可能由一堆 GlideRecord 查询、ACL 检查和服务器端业务规则驱动。

当出现问题时,通常并不像传统的“宕机”事件。相反,用户会看到诸如:

  • 页面加载缓慢直到超时。
  • 在按下“提交”后目录项卡住。
  • 某个自定义 API 返回不完整 JSON 导致 widget 无休止旋转。
  • 搜索结果突然不返回任何内容,因为某条规则调整了 ACL 继承。
  • 某个知识页面在内部可用,但通过 SSO 访问时会失效。

对 ServiceNow 的基础设施来说,一切都是“可用”的。但对你的员工或客户而言,门户可能就像离线一样。

这些故障模式并非源自平台本身,而是来自对平台的定制。表、规则、端点——每一项都引入了弱点。合成监控之所以有效,是因为它不关心实例的内部状态,只关心门户是否按预期工作。

ServiceNow 原生监控的盲点

ServiceNow 的确在平台内置了“合成”监控。但那是内部合成监控——在实例内部运行的检查,用于验证工作流执行、业务逻辑和基本 SLA。

有用吗?是的。足够吗?远远不够。

内部合成运行在与门户相同的条件下。它们不会穿越 VPN、企业防火墙、不同地域、第三方身份提供者、DNS 层或 CDN。它们不会加载浏览器、执行 JavaScript 或在类似真实用户的环境中渲染门户。它们也不会按多步流程穿过目录、审批、脚本和后端集成。

更重要的是,它们不会覆盖最容易出问题的部分:你的自定义代码。常见情况包括:

  • 抛出错误的自定义客户端脚本不会触发内部合成失败。
  • 因为第三方 API 响应慢而卡住的 Flow Designer 操作不会触发内部告警。
  • scoped app 的端点返回了格式错误的载荷,除非你专门测试,否则不会被标记为不健康。
  • 由 widget 变更引起的浏览器端性能回退不会出现在服务器日志中。

原生监控验证的是平台。外部合成监控验证的是体验。

如果你只看 ServiceNow 内部发生的事情,就总会有盲点。

监控自定义表:当数据架构破坏用户体验

ServiceNow 的所有功能都建立在表之上,一旦组织引入自定义表,依赖图就会呈几何级数增长。新的事件子类、带有自定义模式的 record producer、定制的 CMDB 扩展——每一项都可能成为潜在漂移的新来源。

最大的问题往往在门户端出现,但在实例内部还没有被发现。

  • 看似无害的 ACL 更新突然阻止引用字段的填充,进而导致某个目录项“卡住”。
  • 自定义表继承自一个随着时间被修改的父表,现在依赖某字段的规则不再触发。
  • 随着记录数量增加,GlideRecord 查询变慢,门户超时,而实例显示 CPU 正常。
  • 跨表依赖静默中断,导致工作流停留在“requested”状态且无错误信息。

这些不是传统意义上的宕机,而是工作流失败。除非你测试依赖这些表的实际门户组件,否则它们是看不见的。

合成监控能捕捉到这些问题,因为它将整个依赖表的工作流串联起来:打开目录 > 填写字段 > 提交 > 验证状态变化。你看到的是整个路径,而不仅仅是 ServiceNow 自认为正常的部分。

监控业务规则 & 客户端脚本

规则是 ServiceNow 中最具迷惑性的危险部分,因为它们会以微妙的方式相互连锁。一个业务规则在 insert 后触发,进而触发一个 Flow Designer 操作更新某字段,又触发一个 script include,最后调用自定义 API —— 突然间,简单的工单提交就变成了一个分布式系统。

客户端脚本则会产生另一类故障:错误的条件、缺失的变量,或新的 UI 策略与旧的冲突。这些故障不会在日志中以明显错误的形式出现,而是在浏览器中表现为延迟、按钮冻结和表单行为不一致。

门户是业务规则 + 客户端脚本组合显现的地方。

合成监控可以捕捉到:

  1. 导致提交时间飙升的慢速 Glide 查询的业务规则。
  2. 在特定字段为空时错误触发的 UI policy。
  3. 仅在 Chrome 中出错、在 Firefox 中正常的客户端脚本。
  4. 因继承漂移将数据路由到错误表的规则。

ServiceNow 的内部合成可能会愉快地报告“所有系统正常”,而用户却向帮助台大量提交旋转加载的截屏。

外部测试是检测规则堆栈是否按预期工作的唯一可靠方法。

监控自定义端点 & 集成

自定义端点是 ServiceNow 门户从简单 Web 界面变为真实应用的地方。组织通过脚本化 REST API、集成记录、调用外部系统的 Flow Designer 操作、scoped app 端点以及各种入/出 webhook 扩展平台。每增加一项就加深了依赖链,每个依赖都引入了位于核心 ServiceNow 环境之外的故障点。

大量门户故障就源于此。出现故障的 scripted REST API 会导致依赖它的 widget 无尽旋转。慢速的外部集成会使目录提交挂起到用户认为已失败的程度。像 MuleSoft 或 Workato 这样的中间件可能会实施速率限制或间歇性限流,当发生这种情况时,ServiceNow 通常会返回模糊的错误状态,无法为用户提供有意义的线索。即便是端点返回格式错误或不完整的 JSON,也足以以非传统错误的方式破坏 UI 组件。

这些问题都不会出现在 ServiceNow 的原生监控中。平台只能看到自身的基础设施,看不到你的自定义依赖的外部调用。但合成测试会把这些依赖视为工作流的一等公民:它加载 widget,触发 API 调用,处理响应,更新相关表,并像真实用户一样验证最终状态。浏览器行为、网络条件、端点性能与平台逻辑的组合——正是决定门户是否真正可用的关键。

如果你不持续测试整个工作流,就等于寄希望于运气而不是验证。在一个高度定制的 ServiceNow 环境中,运气不是战略。

针对 ServiceNow 门户的 Outside-In 合成监控

基于浏览器的合成监控在本质上不同于内部工作流检查。它以用户的方式加载你的门户:来自真实机器、运行真实浏览器、通过公共互联网。

它重现完整路径:

  1. DNS 解析
  2. CDN 路由
  3. 企业或云网关
  4. SSO 或外部身份提供者
  5. JavaScript 执行
  6. Widget 渲染
  7. API 调用
  8. 表更新
  9. 门户响应

这就像是检验发动机是否运转,与检验整辆车是否能开动之间的差别。

对于具有大量自定义的 ServiceNow 门户来说,这是捕捉现实的唯一方式。

  • 如果某页面加载需要 7 秒,你会看到它。
  • 如果某 widget 在控制台报错,你会看到它。
  • 如果某自定义端点返回格式错误的 JSON,测试会像用户那样失败。
  • 如果某次发布改变了脚本行为,步骤时序会出现突增。

Outside-in 的合成测试不在乎实例是否认为自己健康;它关心的是真人能否完成任务。

模拟真实的 ServiceNow 门户流程

ServiceNow 门户不是线性应用,而是分支流程。优秀的合成测试应当反映这一点。目标不是随意点击页面——而是验证嵌入在你组织创建的表、规则和端点中的业务逻辑。

合适的测试应当模拟真实流程:

  1. 认证(通常通过 SSO)。
  2. 打开自定义门户或服务目录。
  3. 搜索依赖于自定义表的目录项。
  4. 填写会触发客户端脚本或 UI 策略的字段。
  5. 提交,触发业务规则和端点调用。
  6. 验证目标表中的结果记录。
  7. 确认后续状态变化已传播。

这会重现每一个常见故障发生的步骤。

优秀的合成测试包括:

  • 为异步加载的 widget 使用动态等待。
  • 基于实际数据值的断言,而非静态文本。
  • 核验工单是否以正确状态到达正确表。
  • 检查自定义端点是否返回预期对象。
  • 时序分析以揭示慢规则、脚本或集成。

这不是轻量级的健康检查,而是对你团队在 ServiceNow 之上构建的定制应用进行的全栈行为验证。

捕捉 ServiceNow 升级 & 发布的回归

ServiceNow 的半年一次升级是产生不可预见故障的可预见来源。即使在预生产环境做了仔细测试,仍有细微的回归会漏网,因为平台行为的变化可能只在完全定制化的环境中显现。某个在一个版本中运行良好的客户端脚本,可能在 UI 框架变更后失效。某个自定义 widget 可能依赖被悄然重构的依赖项。某条业务规则可能因执行顺序改变而开始重复触发。Flow Designer 的动作可能返回略有不同的输出结构,GlideRecord 查询可能因索引或查询优化的改变而表现不同。

这些并非常见的剧烈宕机,而是以页面变慢、表单行为异常或组件无法加载等二阶故障在门户中显现。并且由于许多自定义依赖于继承表或平台级抽象,即便是小改动也会层层传导,直到某处出现故障。

合成监控是唯一能在用户受影响前揭示这些问题的可靠方法。在手动升级测试关注已知路径的情况下,合成测试验证的是“活着”的工作流——目录项、工单创建、审批、搜索行为以及依赖集成的组件。在升级后几个小时内,用户最终会报告哪些东西坏了;而合成监控能立即提供这些可见性,为你的回归提供持续的安全网,直到升级窗口结束很久之后。

Dotcom-Monitor 的定位

Dotcom-Monitor 并不替代 ServiceNow 的内部工具。它们互为补充,弥补平台与用户体验之间的可见性差距。

通过真实浏览器监控,你可以获得反映客户端性能的分步骤耗时,而不仅仅是服务器状态。通过 API 监控,你可以独立验证自定义端点和集成。通过全球探针位置,你可以看到不同网络与地区如何与门户交互。通过多步骤脚本,你可以精确建模依赖于你自定义表、规则与端点的工作流。

换句话说:内部监控让平台保持诚实,外部监控让用户体验保持诚实。

结论

ServiceNow 因自定义而强大,但也因自定义而脆弱。每一张自定义表、每一条规则和每一个端点都引入了门户可能失败的新方式——这些失败往往是静默的,也常常不会在 ServiceNow 的原生工具中留下迹象。

合成监控通过从用户视角重现完整流程来填补可见性缺口。它验证依赖你自定义数据结构的工作流。它捕捉由脚本和规则引入的行为问题。它揭示隐藏在 API 调用和集成背后的失败。并且持续不断地执行这些检查,而不管实例自身认为有多健康。

对于依赖 ServiceNow 作为入口的组织——无论是用于 ITSM、HR、客户门户还是定制应用——outside-in 的验证不是可选项,而是判断门户是否可用的唯一可靠方法。

表。规则。端点。它们是你 ServiceNow 自定义的核心,也是你监控策略的核心。外部合成监控确保它们按你期望的方式运行,而不仅仅是平台所报告的状态。

开始使用 Dotcom-Monitor 的 ServiceNow 外部合成监控,立即注册免费试用

Latest Web Performance Articles​

立即免费启动Dotcom-Monitor

无需信用卡