OTel 事务
如果应用程序已经使用了 OpenTelemetry 或 Micrometer 的追踪注解,jvmguard 无需任何额外配置即可将其转换为 事务。“OTel”事务类型映射:
- 方法上的
io.opentelemetry.instrumentation.annotations.WithSpan - 方法和类上的
io.micrometer.observation.annotation.Observed
在使用 OpenTelemetry 或 Micrometer 的应用程序中,即使没有连接追踪后端,这两个注解通常也已经存在,因为
@WithSpan 只有在 OpenTelemetry 代理或 Spring starter 存在时才生效,@Observed 只有在类路径中存在
Micrometer AOP 时才生效。jvmguard 仅按名称匹配注解,因此注解无需处于可用状态,未使用时也没有开销。
事务记录设置的“OTel”选项卡中包含一个预配置的 OTel 事务定义。与任何其他事务定义一样,它可以编辑、 重新排序、丢弃或删除。删除后不会重新创建。

默认情况下,事务以注解的 span 名称属性命名(@WithSpan 为 value,@Observed 为 contextualName)。
如果该属性为空,事务将命名为 ClassName.methodName,这也是 OpenTelemetry 自身的默认 span 名称。可以在
“命名”选项卡中像其他事务定义一样更改命名。
按 span 名称筛选
Section titled “按 span 名称筛选”OTel 事务定义的“筛选”选项卡除了类过滤器之外还有“Span 名称”字段。只有 span 名称与配置的通配符或正则 表达式匹配的注解才会创建事务。没有 span 名称属性的注解永远不会匹配 span 名称过滤器。
与其他事务类型的重叠
Section titled “与其他事务类型的重叠”一个方法可以携带多个受支持的注解。为避免重复的事务,适用以下规则:
- 如果方法带有
@MethodTransaction注解,则只创建已声明的事务。 - 如果方法同时带有
@WithSpan和@Observed(直接标注,或通过外部类上的类级别@Observed),则只创建@WithSpan事务。 - 直接标注在方法上的注解优先于外部类上的类级别
@Observed。
捕获事件作为 OTel 日志记录
Section titled “捕获事件作为 OTel 日志记录”当执行捕获(堆转储、线程转储、JFR 快照或 JProfiler 记录)时,代理会通过受监控应用程序中 OpenTelemetry SDK 的日志桥接发出一条 OTel 日志记录, 因此捕获会与链路追踪一起显示在现有的 OTel 管道中。这既适用于触发器操作触发的捕获,也适用于在 UI 中或通过 REST API 手动执行的捕获。
代理通过反射调用 OpenTelemetry API,不需要任何特定配置。如果应用程序的类路径上没有 OpenTelemetry API,则不会发出任何内容,只会在代理日志中写入 一条说明。
日志记录的严重级别由触发触发器的策略事件决定:错误事件为 ERROR,很慢和超时未完成事件为 WARN,其他情况(包括手动捕获)为 INFO。
日志记录包含以下属性:
jvmguard.capture.type:heap_dump、thread_dump、jfr_snapshot或jprofiler_recordingjvmguard.capture.origin:trigger或manualjvmguard.vm.name:受监控 VM 的名称jvmguard.trigger:触发捕获的触发器的描述jvmguard.transaction.name:其策略事件最后促成触发器触发的事务jvmguard.policy.event:该事务的策略事件类型,例如SLOW或VERY_SLOW
最后两个属性仅在策略触发器触发的捕获中存在。由于触发器在触发前可能会累积来自多个事务的事件,因此它们指的是最近添加事件的事务,而不一定是贡献 最多的事务。
要关闭发送,请在触发器记录设置中取消勾选“将捕获事件作为 OTel 日志记录发送”。该复选框仅在根组中显示, 并对整个集群生效:触发器在组层次结构中是叠加生效的,因此按组开关无法可靠地限定发送范围。