当前位置: 首页 > article >正文

后端全链路监控方案:Webfunny Apm

前言为什么需要全链路监控在分布式系统中一个用户请求可能穿越 Struts2 控制器、Spring 服务、Hibernate 数据访问等多个层级传统日志排查方式面临三大痛点故障定位难无法快速追踪请求流经路径问题排查耗时久某银行案例显示未接入 APM 时异常定位需 45 分钟性能瓶颈隐蔽缺乏各组件耗时统计难以识别慢 SQL、低效方法等瓶颈系统行为不透明微服务调用链路复杂无法直观掌握系统运行状态。而 Webfunny APM 结合 OpenTelemetry 可完美解决这些问题 —— 无需大规模改造 SSH 老项目即可实现零侵入 / 低侵入的全链路追踪。本文将详细拆解对接过程从环境配置到验证落地带你快速上手。Spring、SpringMvc、SpringBoot等java项目类似流程一、项目技术栈与对接核心方案1. 基础技术栈SSH 框架适配版层级技术选型版本核心作用Web 框架Apache Struts26.3.0.2MVC 控制器接收 HTTP 请求容器层Spring Framework5.3.27依赖注入、事务管理ORM 层Hibernate5.6.15.Final数据持久化生成 SQL 执行数据库H2 Database2.2.224开发 / 测试环境内存数据库生产可替换为 MySQL构建工具Maven3.8依赖管理与项目构建运行环境Java11兼容 SSH 框架与 OpenTelemetry Agent链路探针OpenTelemetry Java Agent2.22.0自动采集链路数据无需修改业务代码2. 核心集成架构采用「Agent 自动注入 OTLP 协议上报」方案整体链路如下用户请求 → OpenTelemetry Java Agent自动采集→ SSH 各层级Struts2→Spring→Hibernate→OTLP Exporter → OpenTelemetry Collector → Webfunny APM 平台关键优势零侵入Agent 方式无需修改 SSH 业务代码老项目快速适配全覆盖自动采集 HTTP 请求、SQL 执行、方法调用等核心数据标准化基于 OpenTelemetry 协议支持后续对接其他 APM 平台如 Elastic、Datadog。二、详细对接步骤直接抄作业1. 第一步进入Webfunny Apm后端监控页面新建一个java类型的项目2. 第二步添加 Maven 依赖在 pom.xml 中引入 OpenTelemetry 核心依赖用于注解增强和 API 调用dependencies !-- OpenTelemetry API -- dependency groupIdio.opentelemetry/groupId artifactIdopentelemetry-api/artifactId version1.24.0/version /dependency !-- OpenTelemetry 注解支持 -- dependency groupIdio.opentelemetry.instrumentation/groupId artifactIdopentelemetry-instrumentation-annotations/artifactId version1.24.0/version /dependency /dependencies3. 第三步配置 OpenTelemetry Java Agent3.1 下载 Agent 包从 OpenTelemetry 官网 下载 opentelemetry-javaagent.jar版本 2.22.0放置在服务器目录如 /opt/otel/。3.2 编写启动脚本关键配置Webfunny Apm项目设置页拿到应用ID创建 start-with-otel.sh 启动脚本把应用ID等相关Agent 配置参数与应用启动命令适配 Jetty/Tomcat 容器#!/bin/bash # OpenTelemetry 核心配置 # 服务名称Webfunny 平台显示用 OTEL_SERVICE_NAMEPro-sshDemo # 资源属性环境标识、实例ID便于多环境区分 OTEL_RESOURCE_ATTRIBUTESdeployment.environment应用ID,service.instance.id应用ID,service.version2.0 # Webfunny OTLP 上报端点注意原文档中 http://localhost:9013 若解析失败需检查网络连通性 OTEL_EXPORTER_OTLP_ENDPOINThttp://localhost:9013 # 传输协议GRPC 性能更优若报错可改为 http/protobuf OTEL_EXPORTER_OTLP_PROTOCOLgrpc # 超时时间 OTEL_EXPORTER_OTLP_TIMEOUT10s # 仅开启 Trace 采集Metrics/Logs 按需启用 OTEL_TRACES_EXPORTERotlp OTEL_METRICS_EXPORTERnone OTEL_LOGS_EXPORTERnone # 全局方法扫描无需注解自动采集指定包下所有方法 OTEL_INSTRUMENTATION_METHODS_INCLUDEcom.yourapp.service.*,com.yourapp.action.*,com.yourapp.dao.* # 排除工具类/配置类减少冗余 Span OTEL_INSTRUMENTATION_METHODS_EXCLUDEcom.yourapp.util.*,com.yourapp.config.* # 应用启动配置 # Agent 路径替换为你的实际路径 OTEL_AGENT_JAR/opt/otel/opentelemetry-javaagent.jar # 端口配置避免冲突 JETTY_PORT8080 # 整合启动参数 export MAVEN_OPTS\ -javaagent:$OTEL_AGENT_JAR \ -Dotel.service.name$OTEL_SERVICE_NAME \ -Dotel.resource.attributes$OTEL_RESOURCE_ATTRIBUTES \ -Dotel.exporter.otlp.endpoint$OTEL_EXPORTER_OTLP_ENDPOINT \ -Dotel.exporter.otlp.protocol$OTEL_EXPORTER_OTLP_PROTOCOL \ -Dotel.exporter.otlp.timeout$OTEL_EXPORTER_OTLP_TIMEOUT \ -Dotel.traces.exporter$OTEL_TRACES_EXPORTER \ -Dotel.metrics.exporter$OTEL_METRICS_EXPORTER \ -Dotel.logs.exporter$OTEL_LOGS_EXPORTER \ -Dotel.instrumentation.methods.include$OTEL_INSTRUMENTATION_METHODS_INCLUDE \ -Dotel.instrumentation.methods.exclude$OTEL_INSTRUMENTATION_METHODS_EXCLUDE # 启动 Jetty 容器若用 Tomcat替换为 catalina.sh start mvn jetty:run -Djetty.http.port$JETTY_PORT4. 第四步链路增强注解 / 全局扫描二选一方案 AWithSpan 注解精准控制生产推荐在关键业务方法上添加注解自定义 Span 名称和类型适用于核心链路监控// Struts2 Action 层Controller Action(/userList) public class UserAction { WithSpan(value UserAction.listUsers, kind SpanKind.SERVER) public String list() { // 业务逻辑... userService.getAllUsers(); return SUCCESS; } } // Spring Service 层 Service public class UserServiceImpl implements UserService { WithSpan(value UserService.queryAllUsers, kind SpanKind.INTERNAL) Override public List() { return userDao.findAll(); } } // Hibernate DAO 层 Repository public class UserDaoImpl implements UserDao { WithSpan(value UserDao.findUserList, kind SpanKind.INTERNAL) Override public List findAll() { return sessionFactory.getCurrentSession().createQuery(from User).list(); } }方案 B全局方法扫描零代码测试 / 快速验证通过启动脚本中的 OTEL_INSTRUMENTATION_METHODS_INCLUDE 配置自动采集指定包下所有方法无需添加注解适合快速验证全链路。# 全局方法扫描无需注解自动采集指定包下所有方法 OTEL_INSTRUMENTATION_METHODS_INCLUDEcom.yourapp.service.*[*];com.yourapp.action.*[*];com.yourapp.dao.*[*] # 新增启动参数 -Dotel.instrumentation.methods.include$OTEL_INSTRUMENTATION_METHODS_INCLUDE \两种方案对比方式适用场景优点缺点WithSpan 注解生产环境、核心链路性能优、Span 命名清晰需少量代码修改全局方法扫描开发 / 测试、快速验证零代码、覆盖全面可能产生冗余 Span三、验证与问题排查1. 本地验证三步法① 启动应用# 赋予脚本执行权限chmod x start-with-otel.sh# 启动应用./start-with-otel.sh② 发送测试请求curl http://localhost:8080/userList③ 验证结果查看应用日志若输出以下内容说明采集成功[otel.javaagent] LoggingSpanExporter - GET /userList : traceIdxxx spanIdxxx SERVER[otel.javaagent] LoggingSpanExporter - UserAction.listUsers : traceIdxxx spanIdxxx INTERNAL[otel.javaagent] LoggingSpanExporter - UserService.queryAllUsers : traceIdxxx spanIdxxx INTERNAL[otel.javaagent] LoggingSpanExporter - SELECT * FROM user : traceIdxxx spanIdxxx CLIENT登录 Webfunny APM 平台在「链路追踪」模块查看完整调用链。快速定位后端bug问题找到后端项目中错误代码位置2. 常见问题排查避坑指南问题现象高频原因解决方案无 Trace 日志输出Agent 未加载成功1. 检查 -javaagent 路径是否正确2. 确保 JDK 版本 ≥ 83. 避免多个 Agent 冲突如 SkyWalking、Arthas有日志但 Webfunny 无数据OTLP 端点不通1. 用 nc -zv staging.webfunny.cn 9013 测试网络连通性2. 若 GRPC 协议报错改为 OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobuf方法扫描未生效包名配置错误1. 包名不要加 java. 前缀2. 多包用逗号分隔如 com.yourapp.service.*,com.yourapp.action.*SQL 语句未采集Hibernate 版本不兼容确保 Hibernate 版本 ≥ 3.3Agent 2.22.0 原生支持 3.3 版本性能下降明显采样率过高添加采样率配置-Dotel.traces.samplerparentbased_traceidratio -Dotel.traces.sampler.arg0.330% 采样率遇到如下问题降级 / 锁定 OpenTelemetry Agent 稳定版本最新版 Agent 反而有兼容性问题建议降级到1.32.0兼容性最好无该 VerifyError# 下载稳定版Agent wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.32.0/opentelemetry-javaagent.jar2.1.不要同时混合「Agent SDK 注解」只用 Agent 零代码埋点就移除所有手动 opentelemetry-sdk、api 依赖只用代码注解埋点就完全去掉-javaagent参数二者绝对不能混用会双重字节码增强必出 VerifyError​​​​​​2.2.版本匹配检查Spring Boot 2.x → 推荐 OTel Agent 1.29~1.35Spring Boot 3.x → 推荐 OTel Agent 2.xJDK 8 避免使用最新 2.x 系列 Agent兼容性极差四、最佳实践与性能优化1. 采样策略优化链路追踪会产生一定数据量合理配置采样率平衡监控效果与性能开发 / 测试环境全采样-Dotel.traces.sampleralways_on生产环境概率采样如 30% 采样率或自适应采样避免高并发场景下的性能开销。2. 链路粒度控制核心链路支付、下单用 WithSpan 注解精准采集保留完整细节非核心链路查询、统计通过全局扫描排除或降低采样率排除工具类、循环调用方法减少冗余 Span。3. 资源属性规范务必配置 deployment.environment环境和 service.instance.id实例 ID便于在 Webfunny 中区分生产 / 测试环境、不同服务器实例快速定位问题节点。4. 冷数据处理Webfunny 支持链路数据归档可在平台配置 TTL 策略如 30 天避免存储资源浪费降低运维成本。五、总结SSH 框架集成 Webfunny APM 的核心优势在于「低侵入、高覆盖」—— 通过 OpenTelemetry Java Agent 实现零代码全链路采集配合 WithSpan 注解精准控制粒度完美适配老项目改造需求。对接后可实现故障定位效率提升 80%从 45 分钟缩短至分钟级全链路可视化直观查看 HTTP→Action→Service→DAO→DB 的完整调用链性能瓶颈量化精准识别慢 SQL、低效方法为优化提供数据支撑。如果你的项目是 SSH 架构且面临故障排查难、性能优化无方向的问题不妨按照本文步骤对接 Webfunny APM让分布式系统的运行状态一目了然。

相关文章:

后端全链路监控方案:Webfunny Apm

前言:为什么需要全链路监控? 在分布式系统中,一个用户请求可能穿越 Struts2 控制器、Spring 服务、Hibernate 数据访问等多个层级,传统日志排查方式面临三大痛点: 故障定位难:无法快速追踪请求流经路径&a…...

别再手动点保存了!用C# NXOpen二次开发,一键搞定NX模型批量打开与另存

用C# NXOpen实现NX模型批量处理的工业级解决方案 每天重复点击"文件→打开→检查→另存为"的操作,是不是已经让你手指发麻?在汽车零部件行业工作的张工最近就遇到了这样的困扰——公司要求将3000多个NX模型从旧版本升级到NX 1980系列&#xff…...

第四章:TTM分析: 4.8.2 TTM Eviction 选择策略: LRU 与候选筛选

前置阅读: TTM Eviction 机制概述与触发流程 本文解析 TTM Eviction 四步走中的 Step 2: 选择策略 – 从 VRAM 的 LRU 链表中,按什么规则选出被驱逐的 victim BO。 1. 核心问题 VRAM 不够用了,需要踢一个 BO 出去。但并不是所有 BO 都能踢: pinned 的 BO 不能踢 (被钉住了) …...

GAMES101:Assignment 0:Linear Algebra Eigen

Eigen Eigen是一个用于线性代数运算的C模板库 重载了 - * 等运算符&#xff0c;实现了特殊方法如dot() cross() 对于Matrix class,运算符仅重载以支持线性代数运算 加减法 运算符左右侧的行列数必须分别相同&#xff0c;它们的标量类型必须相同- #include <iostream> #in…...

Python装饰器:从设计模式到实战应用

1. Python装饰器入门指南&#xff1a;从设计模式到实战应用在Python开发中&#xff0c;装饰器(Decorator)是一种强大而优雅的编程技术。它允许我们在不修改原始函数或类代码的情况下&#xff0c;动态地扩展其功能。这种技术源于经典的装饰器设计模式&#xff0c;但在Python中通…...

TVA时代企业IT工程师的转型之路(二十三)

前沿技术背景介绍&#xff1a;AI 智能体视觉系统&#xff08;TVA&#xff0c;Transformer-based Vision Agent&#xff09;&#xff0c;是依托Transformer架构与因式智能体所构建的新一代视觉检测技术。它区别于传统机器视觉与早期AI视觉&#xff0c;代表了工业智能化转型与视觉…...

免费开源AMD Ryzen处理器深度调试工具:终极指南

免费开源AMD Ryzen处理器深度调试工具&#xff1a;终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.…...

移动端CV模型新选择:实测MobileViTv3在图像分类、分割、检测三大任务上的表现(附复现指南)

MobileViTv3实战评测&#xff1a;轻量化视觉Transformer在三大CV任务中的突破表现 当我们在移动设备上运行图像识别应用时&#xff0c;常常面临一个两难选择——要么接受低精度的轻量级模型&#xff0c;要么忍受高延迟的大型模型。MobileViTv3的出现打破了这一僵局&#xff0c;…...

贾子理论(Kucius Theory):掀翻旧学术规则的东方元科学范式革命

贾子理论&#xff08;Kucius Theory&#xff09;&#xff1a;掀翻旧学术规则的东方元科学范式革命摘要 贾子理论以“真理主权至上”颠覆西方“可证伪性”底层规则&#xff0c;构建公理化认知操作系统&#xff08;1-2-3-4-5架构&#xff09;&#xff0c;实现东方智慧与量子物理、…...

WPS 通配符神技:一键上标参考文献 + 中英文自动加空格

WPS 高效排版技巧&#xff1a;一键上标参考文献 & 中英文自动加空格 两个实用的 Word 通配符查找替换技巧&#xff0c;让你的学术文档瞬间专业&#xff01; 在撰写论文、报告或技术文档时&#xff0c;我们常常遇到两个排版痛点&#xff1a; 参考文献引用 [1] 没有上标&…...

基础数据结构——栈和队列

该篇内容来自作者观看b站青岛大学王卓老师的数据结构与算法基础课的个人笔记https://space.bilibili.com/40323036?spm_id_from333.788.b_765f7570696e666f.2 栈和队列 特点&#xff1a; 栈&#xff1a; 具有“先进后出”,”后进先出”的特性 队列&#xff1a; 具有“先进先出…...

从Cortex-M到Cortex-A:内存屏障(DMB/DSB/ISB)的使用差异与迁移心得

从Cortex-M到Cortex-A&#xff1a;内存屏障的思维升级与实践指南 当工程师从单片机开发转向Linux驱动或Android系统开发时&#xff0c;往往会遇到一个令人困惑的现象&#xff1a;同样的内存屏障指令&#xff0c;在Cortex-M上运行良好的代码&#xff0c;移植到Cortex-A平台后却出…...

实例化管理化技术对象池与依赖注入

实例化管理化技术&#xff1a;对象池与依赖注入的实践智慧 在现代软件开发中&#xff0c;高效管理对象实例是提升性能与可维护性的关键。对象池&#xff08;Object Pool&#xff09;通过复用已创建的对象减少资源开销&#xff0c;而依赖注入&#xff08;Dependency Injection,…...

Qianfan-OCR-4B算法原理浅析:从CNN到端到端文档理解

Qianfan-OCR-4B算法原理浅析&#xff1a;从CNN到端到端文档理解 1. 引言&#xff1a;当计算机开始"阅读"文档 想象一下&#xff0c;你面前有一份复杂的商业报告&#xff0c;里面有表格、段落文字、图表和手写批注。人类可以轻松理解这种混合内容&#xff0c;但对计…...

软考高项的“潜规则”:那些培训机构不会告诉你的真相

我做了3年软考高项备考调研&#xff0c;访谈过47位上岸学员、12位阅卷相关人士、8位培训机构老师。今天&#xff0c;我把那些“培训机构不会告诉你”的真相&#xff0c;一次性说清楚。真相一&#xff1a;论文不是“写”出来的&#xff0c;是“套”出来的这是最大的误区。很多人…...

VisionMaster

模板匹配设置&#xff1a;模板配置&#xff1a;粗糙尺度范围1~20&#xff0c;粗糙尺度越大&#xff0c;特征点越稀疏&#xff0c;匹配速度越快对比度阈值范围1~255&#xff0c;对比度阈值越大&#xff0c;被淘汰的特征点越多。对比度阈值就是说&#xff0c;边缘处的灰度差值&am…...

我用这套公式,把一份材料变成 5 平台爆款

本周 AI 热点集中爆发&#xff1a;GPT-5.5 今日发布登顶全榜、Cursor 估值突破 500 亿美元、MCP 协议成 Agent 标准通信层、Claude Opus 4.7 上线无人值守 Agent 模式——每一条都是内容创作的绝佳切入口。问题是&#xff1a;你如何在 24 小时窗口内&#xff0c;把这些热点变成…...

如何在2026年继续畅玩经典Flash游戏:终极CefFlashBrowser指南

如何在2026年继续畅玩经典Flash游戏&#xff1a;终极CefFlashBrowser指南 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 还在怀念那些经典的Flash游戏和互动课件吗&#xff1f;当主流浏览…...

request与response笔记

1.request继承体系2.request获取请求数据3.request通用方法获取请求参数目的就是找到一个通用的方法使他既可以用于get方式的请求,又可以用于post方式的请求第一种方法是把请求来的参数自动的1封装进一个map集合里,并且自动补充好键值对第二种方式是参数是数组情况下的参数值第…...

语言 × 计算机大一统:符号语法·语义锚定·语用边界

&#xff08;秦衍体系第五维终极闭环&#xff09; 前面四维&#xff1a;数学锁逻辑&#xff0c;物理锁因果&#xff0c;化学锁结构&#xff0c;生物锁本源。但人类所有失控、诱导、越狱、认知篡改&#xff0c;第一入口&#xff0c;永远是语言。现有大模型&#xff0c;本质是「语…...

Fluent材料库管理避坑指南:自定义材料的导入、导出与团队共享的正确姿势

Fluent材料库管理避坑指南&#xff1a;自定义材料的导入、导出与团队共享的正确姿势 在工程仿真领域&#xff0c;材料属性的准确性直接影响计算结果的可靠性。当团队协作进行复杂流体分析时&#xff0c;自定义材料库的管理往往成为被忽视的关键环节。一位资深CAE工程师曾分享过…...

为什么我们会忘记事情?记忆力和什么有关?

每个人都逃不开遗忘的困扰&#xff1a;刚想好的台词转头就忘、出门反复纠结有没有带钥匙、熟记的知识点考完就忘、熟人的名字卡在嘴边说不出来。我们总把遗忘当作大脑的缺陷&#xff0c;羡慕过目不忘的超强记忆力&#xff0c;抱怨大脑不靠谱。但从脑科学角度来说&#xff0c;遗…...

机器学习-第二章 KNN算法

标题 第二章 KNN算法 目录 KNN算法简介 KNN思想、分类和回归问题处理流程 KNN算法API介绍 分类、回归实现 距离度量 常用距离计算方法 特征预处理 归一化 标准化 鸢尾花识别案例 超参数选择方法 交叉验证、网格搜索、手写数字识别 学习目标 1.理解k近邻算法的思想 2.知道k近邻算…...

XUnity.AutoTranslator终极教程:3步让任何Unity游戏秒变中文版

XUnity.AutoTranslator终极教程&#xff1a;3步让任何Unity游戏秒变中文版 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而错过优秀的日文、韩文或英文Unity游戏&#xff1f;XUn…...

STM32---项目学习日记

1.OLED现象&#xff1a;OLED 左上角第一列会完全点亮&#xff08;8 个像素全亮&#xff09;&#xff08;1&#xff09;oled.c#include "oled.h" #include "oledfont.h"extern I2C_HandleTypeDef hi2c1;//初始化命令 uint8_t CMD_Data[]{ 0xAE, 0x00, 0x10,…...

ZYNQ SDK调试避坑实录:从BANK电压到GIC中断,新手必踩的四个坑

ZYNQ SDK调试避坑实录&#xff1a;从BANK电压到GIC中断&#xff0c;新手必踩的四个坑 刚接触ZYNQ开发的工程师常会遇到这样的困惑&#xff1a;明明代码逻辑没问题&#xff0c;但外设就是不按预期工作。这时候往往不是软件的问题&#xff0c;而是硬件配置或底层细节在作祟。本文…...

别再乱升级libc6了!遇到`GLIBC_2.34 not found`错误,先试试这几种更稳妥的解决方案

当系统GLIBC版本不匹配时&#xff0c;五种安全解决方案深度解析 遇到GLIBC_2.34 not found这类错误时&#xff0c;许多开发者的第一反应是直接升级系统libc6库。这种看似直接的解决方案实际上隐藏着巨大风险——可能导致系统关键组件不兼容&#xff0c;甚至引发连锁崩溃。本文将…...

6G网络中的大模型与多模态感知通信技术解析

1. 6G网络中的大模型与多模态感知通信技术概述在移动通信技术从5G向6G演进的过程中&#xff0c;网络智能化成为核心发展方向。传统通信系统主要解决数据传输问题&#xff0c;而6G网络需要实现通信、感知与计算的深度融合。这一转变的关键在于大语言模型&#xff08;Large Langu…...

Xshell5一键激活,亲测可用

下载链接: https://pan.baidu.com/s/1PY0RnCcj4EDp6bV1TR5pig?pwdpis9 安装完后&#xff0c;将该监听文件复制到安装的根目录&#xff0c;覆盖原文件即可激活使用...

自动滴定装置及其驱动单元设计

摘 要 本文围绕自动滴定装置及其驱动单元设计展开研究。在自动滴定装置部分&#xff0c;首先进行制品材料选用分析&#xff0c;接着对装置进行测绘&#xff0c;并阐述成型设备选用&#xff0c;包括注塑机、模架的选择以及模具参数校核。随后拟定模具结构形式&#xff0c;涵盖型…...