
摘要 :微服务拆分后,线上接口超时、调用异常、内存泄漏、服务依赖混乱等问题越来越难定位。传统日志只能看单点,无法串联整条调用链;没有监控大盘,故障只能靠猜、靠重启。本文以真实生产环境落地经验 为基础,手把手带你搭建一套无侵入、低成本、可直接上线的可观测体系:SkyWalking 做分布式链路追踪 + Prometheus 做指标采集 + Grafana 做可视化大盘。全文步骤可直接复制使用,适合架构师、开发、运维直接落地。
1 前言:为什么微服务必须做可观测性?
做过微服务的同学基本都遇到过这些场景:
- 接口超时,不知道是网关、业务服务、还是数据库 / 第三方接口慢
- 服务突然不可用,日志翻了几十分钟,找不到根因
- JVM 频繁 GC、内存溢出,没有任何监控预警
- 线上流量突增,不知道瓶颈在哪个服务、哪个接口
可观测性 = 日志 + 指标 + 链路。日志是单点,指标是趋势,链路是串联。三者结合,才能做到:
- 故障快速定位
- 性能一目了然
- 容量可评估
- 上线可放心
本文不讲虚的理论,只讲能直接落地、能直接解决线上问题的实战步骤。
2 整体方案选型与架构设计
2.1 为什么选 SkyWalking 而不是 Zipkin/Sleuth?
- 国产开源,对国内业务、中间件适配更好
- 无侵入 Agent,不用改代码、不用加大量注解
- 自带拓扑、依赖分析、JVM 监控、告警、性能分析
- 社区活跃,文档中文友好,生产稳定
- 对 SpringCloud、SpringCloud Alibaba 支持极佳
2.2 为什么用 Prometheus + Grafana?
- Prometheus:CNCF 毕业项目,微服务指标事实标准
- 支持多维查询、告警规则、自动发现
- Grafana:拖拽式可视化,面板生态极丰富
- 可以同时展示 SkyWalking、Prometheus、数据库、中间件指标
2.3 整体架构图

3 环境与版本统一(避免 90% 的坑)
直接给你生产验证过的版本,不要乱升级:
- JDK:1.8 / 11
- SpringBoot:2.6.x / 2.7.x
- SpringCloud / SpringCloud Alibaba:2021.0.1.x
- SkyWalking:9.3.0 / 9.4.0(稳定版)
- Prometheus:2.40.x
- Grafana:9.2.x
- Elasticsearch:7.14.0
4 SkyWalking 服务端 Docker Compose 一键部署
4.1 docker-compose.yml
bash
version: '3.8'
services:
es7:
image: elasticsearch:7.14.0
container_name: es7
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ports:
- "9200:9200"
volumes:
- es7-data:/usr/share/elasticsearch/data
networks:
- sw-net
oap:
image: apache/skywalking-oap-server:9.4.0
container_name: skywalking-oap
depends_on:
- es7
environment:
- SW_STORAGE=elasticsearch
- SW_STORAGE_ES_CLUSTER_NODES=es7:9200
ports:
- "11800:11800"
- "12800:12800"
networks:
- sw-net
ui:
image: apache/skywalking-ui:9.4.0
container_name: skywalking-ui
depends_on:
- oap
environment:
- SW_OAP_ADDRESS=http://oap:12800
ports:
- "18080:8080"
networks:
- sw-net
volumes:
es7-data:
networks:
sw-net:
4.2 启动
bash
docker-compose up -d
4.3 访问
http:// 你的 IP:18080
出现 SkyWalking 界面说明部署成功。
5 SpringCloud 微服务接入 SkyWalking(零侵入)
5.1 下载 Agent
去官网下载:apache-skywalking-java-agent-9.4.0.tgz解压放到服务器固定目录:
bash
/opt/skywalking/agent/skywalking-agent.jar
5.2 IDEA 本地启动配置
bash
-javaagent:D:\tools\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=order-service
-Dskywalking.collector.backend_service=127.0.0.1:11800
5.3 生产环境启动脚本
bash
java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=order-service \
-Dskywalking.collector.backend_service=192.168.1.100:11800 \
-jar order-service.jar
5.4 效果验证
启动服务,调用几个接口,然后去 SkyWalking 查看:
- 服务面板
- 服务拓扑
- 追踪列表
- JVM 监控
- 接口平均响应时间
你会发现:谁调用谁、哪一步慢、异常在哪台机器,一目了然。
6 Prometheus 指标采集搭建
6.1 微服务引入依赖
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
6.2 application.yml 配置
bash
management:
endpoints:
web:
exposure:
include: '*'
metrics:
tags:
application: ${spring.application.name}
export:
prometheus:
enabled: true
访问:http://IP:PORT/actuator/prometheus能看到指标就成功。
6.3 Prometheus 配置 prometheus.yml
bash
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'springcloud-services'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets:
- '192.168.1.101:8080'
- '192.168.1.102:8081'
启动 Prometheus:
bash
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:2.40.0
7 Grafana 监控大盘搭建
7.1 启动 Grafana
bash
docker run -d \
--name=grafana \
-p 3000:3000 \
grafana/grafana:9.2.7
访问:http://IP:3000账号:admin /admin
7.2 添加数据源
Configuration → Data Sources → Add data source → PrometheusURL 填:http:// 你的 IP:9090Save & Test 提示绿色成功。
7.3 导入面板(直接用现成生产级)
推荐两个最实用的:
- JVM (Micrometer):4701
- Spring Cloud MicroServices:12900
Import → 输入 ID → Load → 选择 Prometheus 数据源 → Import。
7.4 大盘效果示意

这套大盘上线后,开发、测试、运维都能用。
8 生产环境优化与避坑(重点!)
8.1 SkyWalking 性能优化
- 生产不要默认全量采样,会增加性能损耗
- 配置采样率:
bash-Dskywalking.agent.sample_n_per_3_secs=10
- 内存配置:ES 至少 2G,OAP 1G~2G
- 日志级别改成 INFO,减少 IO
8.2 Prometheus 优化
- 配置持久化,否则重启数据丢失
- 生产建议配置 Prometheus 集群 + 远程存储
- 抓取间隔不要太短,5~15s 足够
8.3 Grafana 注意事项
- 生产务必修改默认密码
- 重要面板设置权限
- 配置 Grafana 告警,推送到钉钉 / 企业微信
9 总结:这套架构能解决什么问题?
搭建完成后,你的微服务将具备:
- 全链路追踪:一次请求从网关 → 服务 → Feign → 数据库,全流程可见
- 服务拓扑:自动生成依赖关系,不用画架构图
- 性能分析:慢接口、慢 SQL、异常比例一目了然
- 实时监控:JVM、CPU、内存、QPS、RT、错误率实时展示
- 故障定位:线上出问题,先看监控、再看链路,10 分钟内定位根因
这是一套低成本、无侵入、可直接投产、能真正解决线上问题的可观测性方案。建议所有 SpringCloud 微服务项目,从一开始就把这套体系搭起来。
