SpringCloud 实战落地:可观测性建设(SkyWalking + Prometheus + Grafana)从 0 到 1 生产级部署
摘要:微服务拆分后,线上接口超时、调用异常、内存泄漏、服务依赖混乱等问题越来越难定位。传统日志只能看单点,无法串联整条调用链;没有监控大盘,故障只能靠猜、靠重启。本文以真实生产环境落地经验为基础,手把手带你搭建一套无侵入、低成本、可直接上线的可观测体系: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
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 启动
docker-compose up -d4.3 访问
http:// 你的 IP:18080
出现 SkyWalking 界面说明部署成功。
5 SpringCloud 微服务接入 SkyWalking(零侵入)
5.1 下载 Agent
去官网下载:apache-skywalking-java-agent-9.4.0.tgz解压放到服务器固定目录:
/opt/skywalking/agent/skywalking-agent.jar5.2 IDEA 本地启动配置
-javaagent:D:\tools\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=order-service -Dskywalking.collector.backend_service=127.0.0.1:118005.3 生产环境启动脚本
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.jar5.4 效果验证
启动服务,调用几个接口,然后去 SkyWalking 查看:
- 服务面板
- 服务拓扑
- 追踪列表
- JVM 监控
- 接口平均响应时间
你会发现:谁调用谁、哪一步慢、异常在哪台机器,一目了然。
6 Prometheus 指标采集搭建
6.1 微服务引入依赖
<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 配置
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
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:
docker run -d \ --name prometheus \ -p 9090:9090 \ -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus:2.40.07 Grafana 监控大盘搭建
7.1 启动 Grafana
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 性能优化
- 生产不要默认全量采样,会增加性能损耗
- 配置采样率:
-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 微服务项目,从一开始就把这套体系搭起来。
