SpringCloud 实战落地:可观测性建设(SkyWalking + Prometheus + Grafana)从 0 到 1 生产级部署

张开发
2026/4/14 21:04:33 15 分钟阅读

分享文章

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 GrafanaPrometheusCNCF 毕业项目微服务指标事实标准支持多维查询、告警规则、自动发现Grafana拖拽式可视化面板生态极丰富可以同时展示 SkyWalking、Prometheus、数据库、中间件指标2.3 整体架构图3 环境与版本统一避免 90% 的坑直接给你生产验证过的版本不要乱升级JDK1.8 / 11SpringBoot2.6.x / 2.7.xSpringCloud / SpringCloud Alibaba2021.0.1.xSkyWalking9.3.0 / 9.4.0稳定版Prometheus2.40.xGrafana9.2.xElasticsearch7.14.04 SkyWalking 服务端 Docker Compose 一键部署4.1 docker-compose.ymlversion: 3.8 services: es7: image: elasticsearch:7.14.0 container_name: es7 environment: - discovery.typesingle-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_STORAGEelasticsearch - SW_STORAGE_ES_CLUSTER_NODESes7: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_ADDRESShttp://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_nameorder-service -Dskywalking.collector.backend_service127.0.0.1:118005.3 生产环境启动脚本java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \ -Dskywalking.agent.service_nameorder-service \ -Dskywalking.collector.backend_service192.168.1.100:11800 \ -jar order-service.jar5.4 效果验证启动服务调用几个接口然后去 SkyWalking 查看服务面板服务拓扑追踪列表JVM 监控接口平均响应时间你会发现谁调用谁、哪一步慢、异常在哪台机器一目了然。6 Prometheus 指标采集搭建6.1 微服务引入依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency dependency groupIdio.micrometer/groupId artifactIdmicrometer-registry-prometheus/artifactId /dependency6.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.ymlglobal: 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启动 Prometheusdocker run -d \ --name prometheus \ -p 9090:9090 \ -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus:2.40.07 Grafana 监控大盘搭建7.1 启动 Grafanadocker run -d \ --namegrafana \ -p 3000:3000 \ grafana/grafana:9.2.7访问http://IP:3000账号admin /admin7.2 添加数据源Configuration → Data Sources → Add data source → PrometheusURL 填http:// 你的 IP:9090Save Test 提示绿色成功。7.3 导入面板直接用现成生产级推荐两个最实用的JVM (Micrometer)4701Spring Cloud MicroServices12900Import → 输入 ID → Load → 选择 Prometheus 数据源 → Import。7.4 大盘效果示意这套大盘上线后开发、测试、运维都能用。8 生产环境优化与避坑重点8.1 SkyWalking 性能优化生产不要默认全量采样会增加性能损耗配置采样率-Dskywalking.agent.sample_n_per_3_secs10内存配置ES 至少 2GOAP 1G~2G日志级别改成 INFO减少 IO8.2 Prometheus 优化配置持久化否则重启数据丢失生产建议配置 Prometheus 集群 远程存储抓取间隔不要太短5~15s 足够8.3 Grafana 注意事项生产务必修改默认密码重要面板设置权限配置 Grafana 告警推送到钉钉 / 企业微信9 总结这套架构能解决什么问题搭建完成后你的微服务将具备全链路追踪一次请求从网关 → 服务 → Feign → 数据库全流程可见服务拓扑自动生成依赖关系不用画架构图性能分析慢接口、慢 SQL、异常比例一目了然实时监控JVM、CPU、内存、QPS、RT、错误率实时展示故障定位线上出问题先看监控、再看链路10 分钟内定位根因这是一套低成本、无侵入、可直接投产、能真正解决线上问题的可观测性方案。建议所有 SpringCloud 微服务项目从一开始就把这套体系搭起来。

更多文章