SkyWalking Agent 配置 Spring Cloud Gateway 插件解决日志错误
SkyWalking Agent 配置 Spring Cloud Gateway 插件解决日志错误
IDEA中启动网管时,需要配置VM启动参数,格式如下:
# 配置 SkyWalking Agent 启动参数,以便将网关服务的性能数据上报到 SkyWalking 服务器。 -javaagent:/path/to/skywalking-agent.jar \ -Dskywalking.agent.service_name=${APPLICATION_NAME}-skywalking \ -Dskywalking.collector.backend_service=127.0.0.1:11800
问题详情
在一个应用项目中使用 SkyWalking 监控时,Spring Cloud Gateway 服务上报出如下错误信息:
2024-12-29 16:45:34.076 [TID:N/A] [http-nio-5] ERROR
o.s.b.a.w.r.error.AbstractErrorWebExceptionHandler:122 - [2349a963-1] 500 Server Error for HTTP GET "/app/consumer/skuInfo/1"
java.lang.NullPointerException: null
at org.apache.skywalking.apm.plugin.spring.cloud.gateway.v21x.HttpClientFinalizerResponseConnectionInterceptor$1.apply(HttpClientFinalizerResponseConnectionInterceptor.java:42)
...
解决过程
过程分析后发现,错误原因是 SkyWalking Agent 的 plugins
文件夹中缺少对 Spring Cloud Gateway 进行监控的实现插件。此插件位于 SkyWalking Agent 的 optional-plugins
文件夹中,应采取如下步骤进行解决:
-
确定 Spring Cloud Gateway 版本:
- 通过命令格式查看项目依赖。
mvn dependency:tree | grep gateway # 或 gradle dependencies | grep gateway
- 记录项目中 Spring Cloud Gateway 版本,例如「3.x」。
- 通过命令格式查看项目依赖。
-
找到相关插件文件:
- 在 SkyWalking Agent 文件夹中的
optional-plugins
下,找到适配版本的插件:apm-spring-cloud-gateway-3.x-plugin-8.9.0.jar
- 在 SkyWalking Agent 文件夹中的
-
将插件拷贝到 plugins 文件夹:
- 将上述插件文件拷贝到
skywalking-agent/plugins
文件夹中。
- 将上述插件文件拷贝到
-
重启服务:
- 重新启动应用项目,检查 SkyWalking 探针是否正常工作。
注意事项
-
插件版本对应:
- SkyWalking Agent 的插件需要和项目使用的 Spring Cloud Gateway 版本相匹配。
- SkyWalking 主版本应与插件版本匹配:
- 例如,SkyWalking 进行到8.9.0,应使用
apm-spring-cloud-gateway-3.x-plugin-8.9.0.jar
。
- 例如,SkyWalking 进行到8.9.0,应使用
-
Reactor Netty 依赖关系:
- Spring Cloud Gateway 依赖 Reactor Netty,需要 Reactor Netty 版本和插件声明匹配。
-
用 SkyWalking UI 校验效果:
- 启动后,访问相关服务探针,检查是否显示完整的调用链,如响应时间、问题码、路由等。
进阶优化提示
-
调试 SkyWalking 日志源:
- 启用 SkyWalking 调试日志,查看插件是否被正确装载。
logging.level.org.apache.skywalking=DEBUG
- 启用 SkyWalking 调试日志,查看插件是否被正确装载。
-
优化插件版本:
- 实时升级项目依赖和 SkyWalking 插件,确保与 Spring 最新版本兼容。
-
产线通用化添加:
- 在多服务环境中,确保同样插件配置在所有相关服务中完整加载。