一、前言:为什么ELK日志之外,还需要链路追踪?
在上一篇博客中,我们完整搭建了 Elastic Stack 8.x(Filebeat+Logstash+ES) 分布式日志收集体系,解决了微服务日志分散、无法统一检索、日志无留存的问题,实现了日志可查。
但纯日志系统存在致命短板:只能看结果,看不到过程。
在复杂微服务调用链路中,一次前端请求可能贯穿网关、用户服务、订单服务、支付服务、库存服务,一旦出现接口超时、500报错、响应缓慢等问题:
-
ELK 只能查到某一个服务报错日志,无法定位故障发生在哪个调用节点
-
无法统计各服务、各接口耗时,不知道是网络卡顿、代码慢还是第三方接口超时
-
无全局请求ID,无法串联跨服务日志,排查故障只能逐服务翻日志,效率极低
-
无法监控服务健康状态、吞吐量、异常率,只能事后救火,无法事前预警
因此,微服务可观测体系必须双引擎搭配:ELK 负责日志存储检索,SkyWalking 负责链路追踪、指标监控、拓扑分析,二者联动实现「链路定位+日志溯源」的完整可观测闭环。
二、SkyWalking 核心介绍与技术定位
Apache SkyWalking是 Apache 顶级开源的零侵入、轻量级、高性能微服务可观测性分析平台,专为分布式系统设计,支持链路追踪、服务指标监控、拓扑可视化、日志关联、告警通知等能力,是目前国内微服务最主流的链路追踪方案。
本文全程采用 SkyWalking 最新稳定版 10.x,适配 Spring Boot3、Spring Cloud 最新生态,兼容 Elasticsearch 8.x 存储,完美对接上一篇 ELK8.x 技术栈,摒弃老旧版本废弃配置。
2.1 核心组件架构
-
Agent(探针):客户端采集组件,JavaAgent 机制,零代码侵入,无需修改业务代码,仅启动挂载即可自动采集调用链路、耗时、异常、JVM指标
-
OAP Server:后端核心服务,默认监听 11800(gRPC)、12800(HTTP),接收 Agent 上报数据,完成数据聚合、计算、存储、分析
-
UI 控制台:可视化界面,提供服务拓扑、链路详情、接口耗时、指标看板、告警配置等能力,默认端口 8080
-
存储层:支持 Elasticsearch、MySQL、H2,生产环境首选 ES8.x,与 ELK 共用 ES 集群,降低运维成本
2.2 完整可观测联动链路(与ELK关联)
业务请求 -> SkyWalking Agent 采集链路信息、生成全局 TraceId -> OAP 存储链路指标 & 调用链 -> Filebeat 采集业务日志、携带 TraceId 上报 Logstash -> ES 统一存储链路数据+日志数据 -> SkyWalkingUI+Kibana 双向溯源排查
三、SkyWalking 核心优缺点分析
3.1 核心优势(生产首选原因)
-
零代码侵入:基于 JavaAgent 字节码增强,无需埋点、无需改代码、无需引入SDK,接入成本极低,适配新旧项目
-
性能损耗极低:官方实测性能损耗<5%,轻量级探针,不影响业务吞吐量和响应耗时,适配高并发生产环境
-
自动适配中间件:原生自动拦截 SpringMVC、Dubbo、Feign、Redis、MySQL、MQ 等常用中间件调用链路,无需额外配置
-
完美兼容ELK体系:支持 TraceId 日志透传,可通过链路ID直接跳转对应报错日志,实现链路+日志联动排查
-
功能全面:集链路追踪、服务拓扑、JVM监控、接口QPS、异常率、慢接口统计、告警预警于一体,无需多组件拼接
-
国产开源友好:中文文档完善、社区活跃、迭代稳定,适配国内微服务技术栈,无国外组件适配坑
3.2 局限性与短板
-
复杂自定义链路支持弱:高度自定义的业务分段链路,无法自动采集,需要手动注解增强
-
精准日志联动需适配:默认不自动关联日志,需要业务日志打印时手动输出 TraceId 才能与 ELK 日志联动
-
轻量级监控,精细化指标不如Prometheus:侧重链路追踪与服务宏观监控,细粒度业务指标监控不如 Prometheus+Grafana
-
集群部署有运维成本:单机可快速入门,生产高可用集群需要优化配置、调优采样率、清理历史数据
四、适用场景与落地边界
4.1 适配场景(必落地场景)
-
Spring Cloud、Dubbo 微服务集群项目,跨服务调用频繁、链路复杂
-
线上偶发超时、偶发报错、间歇性卡顿,纯日志无法定位问题根源
-
需要统计接口耗时、慢接口优化、服务吞吐量、异常率等运维指标
-
已经搭建 ELK 日志体系,需要补齐链路追踪能力,形成完整可观测闭环
-
生产环境需要事前告警、故障快速定位、线上问题复盘的中大型项目
4.2 不适配场景
-
单体架构项目,无跨服务调用,无需链路追踪能力
-
小型测试项目、临时演示项目,无线上故障排查需求
-
极致轻量化工具项目,无需可观测体系,追求最简部署
五、最新稳定版 SkyWalking 零基础安装实战
环境统一适配:Linux CentOS7.9+/Ubuntu20.04+,存储复用 Elasticsearch8.15.x(与上篇ELK版本完全统一,版本兼容无冲突)
组件版本:SkyWalking 10.4.0(最新稳定版)、ES8.15.x、Filebeat8.15.x
5.1 服务端(OAP+UI)安装部署
5.1.1 下载安装包
# 下载最新稳定版 SkyWalking APM
wget https://archive.apache.org/dist/skywalking/10.4.0/apache-skywalking-apm-10.4.0-linux-x86_64.tar.gz
# 解压至 /opt 目录
tar -zxvf apache-skywalking-apm-10.4.0-linux-x86_64.tar.gz -C /opt/
mv /opt/apache-skywalking-apm-10.4.0 /opt/skywalking
5.1.2 配置ES8.x存储(核心适配)
10.x 版本默认支持 ES8.x,无需兼容旧版配置,修改核心配置文件 /opt/skywalking/config/application.yml
storage:
selector: elasticsearch
elasticsearch:
# 对接本机ES8.x,复用ELK集群
clusterNodes: https://127.0.0.1:9200
# ES账号密码(8.x默认开启认证)
user: elastic
password: 你的ES密码
# 关闭证书校验(测试环境),生产配置合法CA证书
sslVerification: false
# 索引分片与副本配置
indexShardsNumber: 1
indexReplicasNumber: 0
# 数据保存天数,按需调整
recordDataTTL: 7
metricsDataTTL: 7
5.1.3 启动服务端
# 后台启动OAP核心服务
nohup /opt/skywalking/bin/oap.sh start &
# 启动UI控制台
nohup /opt/skywalking/bin/ui.sh start
5.1.4 验证启动成功
# 查看端口监听
netstat -tulpn | grep 11800
netstat -tulpn | grep 8080
浏览器访问:http://服务器IP:8080,成功打开SkyWalking控制台即为部署完成。
5.2 客户端Agent探针部署(零侵入接入)
Agent 无需安装,直接挂载使用,所有微服务统一使用同一个探针包。
5.2.1 获取Agent探针
# 单独下载对应版本Agent
wget https://archive.apache.org/dist/skywalking/10.4.0/apache-skywalking-java-agent-10.4.0.tgz
tar -zxvf apache-skywalking-java-agent-10.4.0.tgz -C /opt/
5.2.2 核心探针配置(agent.config)
修改 /opt/skywalking-java-agent/config/agent.config,适配生产环境:
# 服务名称(自定义,UI展示)
agent.service_name=${SW_AGENT_NAME:micro-service-order}
# OAP服务端地址
collector.backend_service=127.0.0.1:11800
# 生产环境采样率,避免数据量过大(测试1.0,生产0.1-0.5)
agent.sample_n_per_3_secs=2
# 打印SQL参数,方便问题排查
plugin.jdbc.trace_sql_parameters=true
# 开启日志TraceId透传,对接ELK关键配置
plugin.log.logback.enable=true
六、微服务接入与调用链路采集实战
6.1 SpringBoot微服务挂载探针
无需改代码,启动脚本添加 -javaagent 参数即可,适配 SpringBoot3.x 最新版本
# 微服务启动命令示例
java -javaagent:/opt/skywalking-java-agent/skywalking-agent.jar \\
-jar order-service.jar \\
–spring.profiles.active=prod
6.2 模拟业务调用,生成链路数据
启动网关、用户、订单、库存微服务,通过前端或Postman发起完整业务请求,调用完成后等待10秒数据聚合。
6.3 控制台核心使用方式
6.3.1 服务拓扑查看
UI首页【Service Map】可查看所有微服务调用关系、依赖组件、在线状态,直观发现服务离线、异常服务。
6.3.2 链路追踪详情查询
点击【Trace】模块,可查看所有请求链路:
-
完整调用堆栈:网关→服务A→服务B→数据库
-
每一段调用耗时、状态码、异常信息
-
精准定位慢接口、超时节点、报错节点
6.3.3 服务指标监控
【Service】模块查看单服务QPS、响应耗时、异常率、JVM内存、GC次数、线程数,实时监控服务健康状态。
七、与ELK8.x日志体系联动(核心关联能力)
这是两大技术栈联动的核心价值,实现「链路定位问题,日志佐证细节」。
7.1 核心联动原理
SkyWalking 每次请求都会生成唯一 TraceId,通过日志插件将 TraceId 打印到业务日志中;Filebeat+Logstash 采集日志并带入 TraceId 存入 ES,排查问题时:
SkyWalking 找到报错链路、获取 TraceId
复制 TraceId 到 Kibana 检索
一键查询该请求全链路所有服务日志,完整复盘故障
7.2 快速接入配置
项目引入 skywalking-logback 依赖(适配日志透传),日志格式增加 %tid 即可打印全局链路ID,无缝对接ELK检索体系。
八、生产环境优化方案(10.x版本专属)
8.1 采样率优化(关键)
测试环境采样率1.0(全采集),生产高并发环境必须调低,避免海量数据压垮ES:
-
普通业务:采样率 0.2(每3秒采集2条)
-
核心支付、订单业务:采样率 0.5
-
故障频发环境:临时全开采样排查问题
8.2 存储优化(对接ES8.x)
-
配置数据TTL,自动清理7天前历史链路数据,释放ES磁盘空间
-
合理设置分片数、副本数,适配ES集群性能
-
区分指标数据、链路数据存储周期,精细化管理
8.3 性能优化
-
关闭无用插件,仅开启MVC、JDBC、Dubbo、Feign核心插件,减少探针开销
-
OAP服务调整JVM参数,适配服务器配置,避免内存溢出
-
探针异步上报数据,不阻塞业务线程
8.4 运维优化
-
配置邮件、钉钉告警,服务下线、异常率飙升、接口超时自动预警
-
统一管理Agent探针版本,所有微服务版本一致,避免兼容问题
-
与ELK共用ES集群,减少中间件部署成本,统一运维
九、常见线上问题排错
-
服务启动无链路数据:检查OAP端口连通性、防火墙11800端口是否开放、探针serviceName是否配置正确
-
链路有报错,无详细日志:未开启日志TraceId透传,需配置logback插件并重启服务
-
ES写入失败:核对ES8.x账号密码、HTTPS证书配置,关闭测试环境证书校验
-
高并发下数据丢失:调大采样率、开启批量上报、优化OAP线程池参数
-
UI加载缓慢:清理过期链路数据、优化ES查询、调整JVM堆内存
十、全文总结:ELK+SkyWalking 完整可观测闭环
1、ELK技术栈(Filebeat+Logstash+ES8.x):解决日志采集、存储、检索、统计问题,负责「事后细节溯源」;
2、SkyWalking10.x链路追踪:解决服务调用链路、故障定位、性能监控、异常预警问题,负责「事前监控、事中定位」;
3、二者联动是目前微服务最优可观测落地方案,零侵入接入、性能损耗低、运维成本可控,完全适配最新SpringCloud、ES8.x生态,是中大型微服务项目必备的基础运维基建。
相比传统Sleuth+Zipkin方案,SkyWalking无需手动埋点、功能更全面、运维更简单,结合ELK日志体系,彻底解决微服务「故障难查、性能难优、状态难控」的行业痛点。
网硕互联帮助中心



评论前必须登录!
注册