监控插件SkyWalking(一)原理&和MDC的区别

一、介绍

1、简介

SkyWalking 是一个 开源的 APM(Application Performance Monitoring,应用性能监控)和分布式追踪系统,主要用于监控、追踪、分析分布式系统中的调用链路、性能指标和日志
它由 Apache 基金会托管,特别适合微服务、云原生和容器化架构的应用。

2、核心功能
  • 调用链追踪(Tracing)
    自动收集服务间调用链路数据,帮助你知道请求是如何从一个服务流向另一个服务的。

  • 性能监控(Metrics)
    提供 CPU、内存、QPS、响应时间、错误率等多维度监控指标。

  • 服务拓扑图
    自动生成服务间调用关系图,直观展示微服务依赖。

  • 日志与链路关联
    将日志与调用链整合,方便快速定位问题。

  • 告警
    支持规则配置,当指标异常时发出告警。

3. 典型使用场景
  • 微服务排障:快速找出性能瓶颈和异常调用链。

  • 性能分析:分析接口耗时、数据库慢查询等。

  • 依赖分析:可视化查看服务之间的依赖关系。

  • 生产监控:配合告警及时发现问题。

二、原理

SkyWalking 通过 Agent + OAP Server + UI 三部分协作:

1、Agent(探针)

以插件方式植入到应用(Java、.NET、Node.js 等),自动拦截 HTTP、RPC、数据库等调用,采集链路数据。

2、OAP Server(后端)

接收 Agent 发送的数据,进行存储、聚合、分析。

3、UI(前端可视化界面)

展示调用链、指标图表、告警信息等。

三、和MDC的区别

MDC:是日志上下文工具,只能在 单应用内部 给日志打标签。

SkyWalking:是分布式链路追踪平台,可以在 跨服务调用 场景下自动传递 traceId,并能结合日志(MDC)形成完整的观测体系。

维度MDCSkyWalking
作用范围单应用 / 单线程上下文分布式系统全链路
实现方式ThreadLocal + 日志框架Java Agent + OAP Server
上下文内容自定义键值对(traceId/userId 等)TraceId、SpanId、调用链信息、性能指标
使用场景打日志时带上下文分布式追踪 & 性能监控
是否跨线程/进程❌ 需要手动传递✅ 自动传递
是否依赖外部服务❌ 本地即可✅ 依赖 SkyWalking OAP
1、MDC(Mapped Diagnostic Context)
  • 定位:日志框架(Logback / Log4j / SLF4J)提供的一个 线程本地变量(ThreadLocal)存储机制

  • 作用:在同一个线程里给日志增加上下文信息(比如 traceId、userId、requestId)。

  • 特点:只在 当前应用内有效,跨线程要手动传递 MDC;不具备分布式链路跟踪能力。


2、SkyWalking
  • 定位:一款 APM(应用性能监控)/分布式链路追踪系统

  • 作用:通过 Java Agent 字节码增强,自动埋点采集调用链、性能指标、错误信息,上传到 OAP Server,最后在 UI 上展示完整的调用链路。

  • 特点

  • (1)分布式:可以跨进程、跨服务跟踪请求链路。
  • (2)自动化:不需要在代码里手动传递 traceId(Agent 会自动完成)。
  • (3)全局可视化:能看到拓扑图、调用链、慢调用分析。
  • (4)日志集成:SkyWalking 可以把 traceId 注入到日志框架的 MDC,这样日志和链路能打通。

四、下载安装

1、bin下载安装


我这里点击10.2.0版本,点击tar下载。解压后,目录结构大致是

(1)/config/application.yml文件
(2)/bin/oapService.bat

我改了下脚本,让日志输出到指定目录,

@echo off
setlocal

set "OAP_HOME=%~dp0%.."
set "OAP_LOG_DIR=%USERPROFILE%\skywalking-logs"
if not exist "%OAP_LOG_DIR%" mkdir "%OAP_LOG_DIR%"

set "CLASSPATH=%OAP_HOME%\config;."
set "CLASSPATH=%OAP_HOME%\oap-libs\*;%CLASSPATH%"

if defined JAVA_HOME (
    set _EXECJAVA=%JAVA_HOME%\bin\java
) else (
    echo WARNING: JAVA_HOME not set. Using system java.
    set _EXECJAVA=java
)

echo Starting SkyWalking OAP Server...
echo Java path: %_EXECJAVA%
echo Classpath: %CLASSPATH%
echo Logs directory: %OAP_LOG_DIR%
echo.

"%_EXECJAVA%" -Xms256M -Xmx512M -Doap.logDir="%OAP_LOG_DIR%" -cp "%CLASSPATH%" org.apache.skywalking.oap.server.starter.OAPServerStartUp >> "%OAP_LOG_DIR%\oap_debug.log" 2>&1

echo.
echo Java process exited. See oap_debug.log in %OAP_LOG_DIR% for details.
pause

endlocal

这样启动可以看到输出了日志目录,并且当前窗口不会自动关闭:

Starting SkyWalking OAP Server...
Java path: C:\javas\jdk\jdk\bin\java
Classpath: C:\javas\skywalking\apache-skywalking-apm-bin\bin\..\oap-libs\*;C:\javas\skywalking\apache-skywalking-apm-bin\bin\..\config;.
Logs directory: C:\Users\Wtyy\skywalking-logs
2、agent获取

上面下载的不包含agent,手动创建个agent目录,然后手动下载

https://repo1.maven.org/maven2/org/apache/skywalking/apm-agent-core/9.4.0/apm-agent-core-9.4.0.jar 解压后找到skywalking-agent.jar放进去,再手动创建\agent\config\agent.config配置文件,内容为:

collector.backend_service 要指向你本地或远程 OAP Server 的 HTTP 端口(默认 11800)。

# 服务名称,对应你的应用名
agent.service_name=your-app-name

# 后端 OAP 服务地址,多个用逗号分隔
collector.backend_service=127.0.0.1:11800

# 日志等级,开发调试可用 DEBUG
logging.level=INFO
3、启动插件
(1)启动 OAP Server(后台服务)

SkyWalking 的核心是 OAP Server,它负责接收应用程序上报的监控数据。

# Linux / macOS
./bin/oapService.sh

# Windows (cmd)
bin\oapService.bat

默认端口:12800 (gRPC) 和 11800 (HTTP)

启动可能会报错

这是因为依赖BanyanDB 配置,我没有BanyanDB,我本地有ES,所以我修改了/config/application.yml,改成用ES存储了:

(2)启动 Web UI

UI 是前端界面,通过浏览器访问。

# Linux / macOS
./bin/webappService.sh

# Windows (cmd)
bin\webappService.bat

访问 http://localhost:8080/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值