ARMS 4.x及之后版本探针基于OpenTelemetry Java Agent重新构建,全面拥抱开源,100%覆盖老探针功能,但是对部分功能有一定细微调整。本文介绍新版本探针的变动点和影响,并说明数据上报增量问题。
变动的功能点和影响
- 默认关闭对Spring托管的Bean方法埋点,目前只会针对Controller的方法埋点。 - 可能的风险: - 升级后调用链方法栈中无法看到@Service、@Component注解的类方法。 
- 在@Service、@Component等注解的类方法中抛出的异常无法被监控到。 
 
- 线程池监控和连接池监控指标名调整,详情请参见线程池和连接池监控。 - 可能的风险: - 如果已在应用监控告警规则中配置线程池监控告警,探针升级后,需要重新配置告警规则。 - 在创建应用监控告警规则页面选择指标类型为新版线程池监控。  
- 如果已根据线程池指标配置自定义大盘,探针升级后大盘数据为空。 
- 指标量增加导致按量计费费用增加。 
 
- 消息延迟监控指标名调整为arms_mq_delay_seconds。 - 可能的风险:如果已根据消息延迟指标配置自定义大盘,探针升级后大盘数据为空。 
- 异步调用Trace上下文自动透传不用配置包名。 
- RabbitMQ无需自定义消费者、Kafka无需自定义消费方法(已经定义无影响)。 
- 不再支持通过 - MDC.get("EagleEye-TraceID")方式获取TraceID,但是日志关联TraceID不受影响。- 可能的风险:通过 - MDC.get("EagleEye-TraceID")方式获取的TraceID为空。
- 无入口场景下内部调用会生成Span。 - 可能的风险:Span数量增长导致按量计费费用增加。 
- 分位数统计从基于Prometheus的Summary算法改为基于线性插值的桶分布方法。 - 可能的风险:在实际耗时分布和当前分桶差异较大时,分位数指标会不准确。 
- SpanStatus状态对齐开源。在开源OpenTelemetry标准中,HTTP请求在响应码为4xx、5xx的场景下会被标记为error,其余情况标记为unset(4.x之前版本标记为ok)。 
- 升级至4.x探针后,TraceId会被强制要求为32位字符,和旧版本前端监控不兼容,建议重新接入至新版用户体验监控。 
- 4.1.12及之前版本探针当前和JDK 21虚拟线程不兼容,ARMS计划在4.3.x版本完全兼容。如果业务强依赖虚拟线程,建议使用3.x探针版本。 
- 使用arms-sdk在spring-cloud-gateway中通过filter方式增加baggage场景,当探针升级到4.2.x版本并在自定义配置中打开spring-bean插件后,baggage透传功能不生效。 
升级4.x版本后数据上报量增加问题说明
从3.x探针升级到4.x探针后,在某些使用场景下,可能导致指标上报量增加,具体情况如下:
- 无入口场景下的内部调用生成的Span记录导致Span上报量、指标上报量增加。 
- 线程池监控支持用户自定义线程池导致指标量上涨。 
- 连接池监控支持更多连接池类型导致指标量上涨。 
- 接口调用页面的接口上游和接口下游指标在上下游为异步调用时会因为4.x版本支持异步自动透传导致指标量增加。 
- 插件用法支持更加全面导致指标量上涨,典型的是Lettuce插件的用法支持更加全面。 
- 4.x探针为解决线程分析在线程数较多场景下的性能问题,对其中的数据采集方式和存储方式进行了调整,相比于3.x探针,线程分析开启后会额外增加少量以 - arms_grouped_thread为前缀的指标,从而产生额外的数据,如需关闭相关功能,可参考线程分析文档进行关闭。
- MQ消息批量消费从每一批消费记录一个Span变为该批次消息中每一条消息记录一个Span。当每批消费消息较多时,会导致MQ相关Span上报量大幅度增加。该功能为合理调整,如果对上报量较为敏感建议调整采样率或者关闭MQ相关插件。