跳转到内容

触发器

策略阈值可以检测异常状况并在 VM 数据视图中 显示,但它们本身无法采取任何操作。通过触发器,可以对策略违规和阈值违规作出响应,并执行一个可配置的操作 列表。

触发器的工作级别与策略和阈值不同。后两者是应用于单个 VM 或 VM 组的配置选项。而触发器不直接耦合到单个 策略或阈值违规,它们对这类事件的序列作出响应,这些事件来自一个 VM 组中所有受监控的 VM。

这种机制旨在让决定什么状况需要特定操作时拥有更大的灵活性。例如,重建缓存时,可能预计最多出现一次缓慢的 URL 调用。但如果每小时出现五次或更多缓慢的 URL 调用,那就说明出了问题。什么可以接受、什么不可以接受的 界定,很大程度上取决于应用程序的类型和实现。

在记录设置中,可以为每个 VM 组编辑触发器。触发器作用于递归包含的所有 VM。可以为一个 VM 组和一个祖先 VM 组定义不同的触发器,两组触发器会分别处理。

在某些情况下,触发器触发得过于频繁。针对这种情况,jvmguard 允许禁用某个触发器,直到有时间研究如何修改 底层配置。

与事务定义和 jvmguard 中的其他实体一样,触发器可以保存到触发器集合,也可以从集合中加载。这样就可以将 触发器定义复制粘贴为多个 VM 组的起点。

触发器有三种类型:

  • 策略触发器:当一组事务的策略违规在指定时间段内超过定义的次数时,策略触发器触发。筛选文本字段接受 事务名称模式,可以是通配符表达式或正则表达式。

    此外,策略触发器针对特定的策略违规类型配置。可以有多个策略触发器,各自匹配不同的事务名称。与事务定义 不同,策略触发器的名称匹配不存在只使用第一个匹配条目的规则。如果为同一个事务名称添加了多个触发器, 通常会想设置不同的事件频率,否则两个触发器会同时触发。

    触发条件与策略违规的实际条件是解耦的。不同的事务可以定义不同的时间,超过该时间即被判定为“很慢”, 策略触发器随后对这些事件进行计数。

  • 阈值触发器:当所选遥测的阈值违规频率超过配置的值时,阈值触发器触发。这要求已经为同一个 VM 组配置 至少一个阈值。与策略触发器一样,触发条件不定义实际的阈值。阈值可以在不同 的后代 VM 组中定义得不同,阈值触发器随后对阈值违规进行计数。

    举例来说,设想有两组机器:性能较强的机器和老旧机器。在性能较强的机器上,线程数可能不允许超过 1000, 而在老旧机器上这个阈值只有 500。可以创建名为 “Powerful” 和 “Legacy” 的 VM 组,在每个组的记录设置中 定义相应的阈值,并在“所有 JVM”组中定义一个默认阈值。然后,在“所有 JVM”组中定义一个针对线程数遥测 的阈值触发器。这个触发器会同时处理两个 VM 组。

  • 连接触发器:已连接 VM 的数量是一个源自 jvmguard 收集器而非受监控 VM 的标量值。连接触发器用于在 运行的 VM 过少时采取行动。jvmguard 服务器刚启动时,配置的最小数量不会立即达到,因此可以选择在最小数量 首次达到之后才启用触发器,或者在经过一段固定时间之后启用。

每个触发器可以有任意长度的操作列表。

可以添加到触发器的操作类型可以分为两类:

  • 通知操作:可以创建在 jvmguard 内部使用的通知,例如写入事件日志条目或收件箱条目。收件箱按用户维护, “未读状态”也按用户区分。对外可以发送电子邮件或调用 Webhook

发送电子邮件要求常规设置中的 SMTP 配置有效。电子邮件的主题行会指出是哪个 VM 导致触发器触发;在 Webhook 操作中,可以使用字符序列 @TRIGGER@ 将此消息插入头部、查询参数或 JSON 请求体中。

  • 数据收集操作:作为对异常状况的响应,可以决定记录更多数据以进行详细分析。其中一些数据记录选项比 常规的 jvmguard 记录更具侵入性。

    例如,保存 HPROF 堆快照不应定期进行,但如果内存不足,它会帮助找到内存泄漏。HPROF 快照由 JVM 直接写入,不需要加载原生 JVMTI 分析代理。因此这是一项低风险的操作,尽管在快照保存期间 VM 会暂停。 JProfiler 和其他 Java 分析器都可以打开 HPROF 快照。

    线程转储是检查 JVM 当前运行情况的基本低开销方式。事件类型为“超时未完成”的策略触发器可以保存 线程转储,从而立即看到事务挂起在哪个方法中。

    记录 JProfiler 快照是数据收集的升级手段,需要加载原生 JVMTI 代理。关于此主题的更多信息,请参阅 生产环境中的分析一章。数据收集操作在“VM”视图中点击已连接 VM 旁边的 “操作”链接时同样可用。

操作列表按顺序执行。如果某个操作失败,jvmguard 会跳到下一个操作,不会终止触发器操作的执行。