一、背景与引发的思考:监控的本质到底是什么?

多年的一线开发与架构经验,让我对系统的“可观测性”有了更深的理解。剥开各种高大上的概念外衣,对于监控来说,其实无外乎是两个维度

  1. 眼前问题发生时的快速定位(比如:接口突然报500了、某个请求卡顿了,需要马上看链路和入参)。
  2. 基于数周甚至数月的统计分析,找出系统隐藏的问题(比如:某接口耗时P99在过去一个月逐渐恶化)。

残酷的现实是:对于 99% 的单体业务应用来说,真正的需求几乎全都是前者! 很多中小型应用甚至从上线到下线,一辈子都没有用到过第二种维度的长周期数据分析。

二、痛点:杀鸡焉用牛刀?

我们目前的基础架构是 SpringBoot2 + Undertow 的单体应用。为了实现系统的可观测性,引入 Apache SkyWalking 无疑是业界标杆。

然而,传统的 SkyWalking 架构为了兼顾海量微服务和长周期数据分析,要求必须部署一套完整的后端:OAP Server + Elasticsearch/数据库。对于我们这种 99% 只需要“快速定位当下问题”的单体应用来说:

  • 运维成本太高:为了监控一个轻量级应用,还要额外部署和维护一套沉重的 OAP 和 ES 集群。
  • 资源浪费严重:收集了海量数据,其实仅仅只为了出问题那一刻的查询,大部分数据直接过期进了垃圾桶。

有没有可能:既保留 SkyWalking 强大的无侵入式 Agent 探针和极其丰富的可观测性数据采集能力,又把沉重的 OAP 彻底干掉?

三、破局:skywalking-logfile-reporter-plugin

基于上述思考,我开发了一款基于 SkyWalking 的本地化 Reporter 插件:logfile-reporter-plugin

该插件的核心逻辑非常简单粗暴:拦截 SkyWalking Agent 原本要发给 OAP 端的各种 Trace、Metrics 等数据,将其“截胡”并本地化保存在内存中。

为了防止内存泄漏甚至 OOM 爆炸,我们在插件内部实现了一个有界队列(RingBuffer 机制),将最大保存数量进行了配置化(默认维持在 1000 条左右)。1000 条的滚动窗口,对于单体应用的“案发现场快速定位”来说已经完全足够。

四、核心优势与特性

  1. 零后端依赖(去 OAP 化):彻底摆脱对 OAP Server 和存储(ES/MySQL 等)的依赖,极大地降低了中小团队的运维成本。
  2. 原汁原味的可观测性:仅仅是替换了数据上报(Reporter)环节,SkyWalking Agent 提供的所有强大拦截、埋点、上下文透传功能 100% 完整保留
  3. 极佳的向下/向上兼容性:采用 Plugin Override 机制。直接作为插件存在,不修改 SkyWalking 核心源码。能够最大化兼容 SkyWalking 未来的版本迭代。
  4. 无痛接入:不管是多年的历史包袱项目,还是全新的单体项目,只需将打包好的 jar 拷贝到 Agent 目录下,即刻生效。

五、实现原理简析

在 SkyWalking 的底层机制中,数据收集和数据上报是解耦的。官方本身就提供了 Advanced Reporters(如 Kafka Reporter)来替代默认的 gRPC 上报。

本插件的实现正是参考了官方的 Kafka Reporter 的设计思想。通过理解 SkyWalking 的数据处理 Pipeline,我们:

  1. 覆写(Override)了关键流程中向 OAP 端发送数据(TraceSegment、Metrics 等)的组件。
  2. 将网络 I/O 发送逻辑,替换为本地内存有界队列写入逻辑。
  3. 提供统一的内存数据读取接口(或落盘策略),将原本面向 gRPC 的序列化数据转化为可视化友好的 JSON 格式。

六、快速接入与使用

项目地址:Github: skywalking-logfile-reporter-plugin

接入步骤极其简单:

  1. 下载/编译本项目得到插件的 jar 包。
  2. 将 jar 包直接拷贝到你现有 SkyWalking Agent 的 plugin/ 目录下(或者覆写原有的 reporter 插件)。
  3. agent.config 中配置好对应的内存阈值参数(如设置 max_size = 1000)。
  4. 重启你的 SpringBoot 应用,大功告成!

6.1 链路追踪 - 效果图

在这里插入图片描述
在这里插入图片描述

6.2 日志查询 - 效果图

在这里插入图片描述

6.3 JVM监控 - 效果图

在这里插入图片描述

6.4 内置Meter指标 - 效果图

Meter - Office Site
在这里插入图片描述

6.5 Agent配置项 - 效果图

在这里插入图片描述

七、未来展望:结合 AI 探索可观测性的新玩法

去掉了庞大的 OAP 和 UI 后,数据留在内存里怎么看?这就是我们下一步的重头戏。

目前 AI 大模型(LLM)的数据分析和代码/日志理解能力已经极其强大。我们计划将内存中滚动保存的这 1000 条高质量、结构化的 SkyWalking 原生 Trace 数据,在触发异常或手动 dump 时,直接喂给 AI 代理分析,并动态生成可视化视图

通过“本地化探针捕获 + AI 诊断与渲染”的新模式,实现真正意义上的智能且轻量的故障定位,用魔法打败魔法!

注:以上操作我们已经在项目中进行了实际落地,各方的反馈相当好,所有的页面完全由AI开发。

八、总结

技术架构没有绝对的好与坏,只有“适合”与“不适合”。

面对 99% 只需要“出问题时能立刻抓到现场”的单体业务系统,盲目堆砌高大上的微服务监控组件,只会让团队陷入无尽的运维泥潭。skywalking-logfile-reporter-plugin 是一次实用主义的胜利,它让我们在享受顶级 APM 探针能力的同时,保持了单体应用应有的轻便与优雅。

如果你也在被沉重的监控后端折磨,如果你也认同“适当监控”的设计哲学,欢迎来 Github 点个 Star 交流体验!

👉 项目源码直通车

九、相关

  1. 【CAT魔改】CAT-LOCAL项目的诞生
  2. skywalking-kafaka reporter
  3. Skywalking扩展实现 —— 监控数据的动态上报
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐