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

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 总结:这套架构能解决什么问题?

搭建完成后,你的微服务将具备:

  1. 全链路追踪:一次请求从网关 → 服务 → Feign → 数据库,全流程可见
  2. 服务拓扑:自动生成依赖关系,不用画架构图
  3. 性能分析:慢接口、慢 SQL、异常比例一目了然
  4. 实时监控:JVM、CPU、内存、QPS、RT、错误率实时展示
  5. 故障定位:线上出问题,先看监控、再看链路,10 分钟内定位根因

这是一套低成本、无侵入、可直接投产、能真正解决线上问题的可观测性方案。建议所有 SpringCloud 微服务项目,从一开始就把这套体系搭起来。

相关推荐
却话巴山夜雨时i1 天前
互联网大厂Java面试场景:Spring Boot、微服务与Redis实战解析
spring boot·redis·微服务·kafka·prometheus·java面试·电商场景
程序员老邢1 天前
【技术底稿 12】内网统一日志系统 Loki + Promtail 全流程部署(对接 Grafana,监控日志一体化)
java·运维·程序人生·grafana·devops
是店小二呀1 天前
Prometheus自定义指标实现方案:技术选型与实战评估
prometheus
南梦浅2 天前
【无标题】
prometheus
Jinkxs2 天前
SkyWalking - Spring Cloud Alibaba 全链路追踪实战
skywalking
zhanghongbin012 天前
Grafana 可视化:开箱即用的监控面板
grafana
2301_旺仔2 天前
【prometheus】监控linux/windows
linux·windows·prometheus
BullSmall3 天前
Prometheus 如何配置监控 SSL 证书即将过期
网络协议·ssl·prometheus
国产化创客3 天前
ESP32 (ESPectre)+Grafana构建专业级CSI监控面板
物联网·grafana·信息与通信·智能硬件