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 微服务项目,从一开始就把这套体系搭起来。

相关推荐
暮云星影11 小时前
个人总结 搭建Docker监控
docker·容器·grafana·prometheus
接着奏乐接着舞17 小时前
springcloud skywalking
spring·spring cloud·skywalking
成为你的宁宁3 天前
【基于 Prometheus Operator 监控 K8s控制器、调度器、代理组件】
kubernetes·prometheus
溜达的大象3 天前
服务器挂了等用户报障?我用Prometheus搭了一套监控告警,服务器出状况第一时间通知我
服务器·php·prometheus
tudoSearcher4 天前
日志、指标、链路追踪:可观测性三支柱深度解析
运维·服务器·网络·prometheus
IT策士4 天前
第 41 篇 k8s之监控:Metrics Server 与 Prometheus 快速上手
容器·kubernetes·prometheus
Junsir大斗师4 天前
rocky9.7搭建grafana+loki+prometheus+alloy+node_exporter运维监控平台
linux·运维·grafana·prometheus
Plastic garden4 天前
Docker Compose 的 RuoYi nginx exporter Prometheus + Alertmanager + 钉钉告警
nginx·docker·prometheus
炸炸鱼.4 天前
云原生环境 Prometheus 企业级监控实战指南
云原生·prometheus