基于SkyWalking的微服务APM监控实战指南

基于SkyWalking的微服务APM监控实战指南

1. 业务场景描述

随着微服务在生产环境中大规模应用,系统链路复杂、实例弹性伸缩、灰度发布等特点都给性能监控和问题诊断带来了新的挑战。传统的单机或轻量级监控方案已无法满足微服务环境下的全链路、分布式追踪和实时告警需求。

本篇文章将围绕一个电商微服务项目,分享如何在生产环境中引入Apache SkyWalking,构建一套完善的APM(Application Performance Management)监控方案。我们将从技术选型、部署架构、配置调优、痛点排查到最佳实践进行全流程讲解,帮助读者快速掌握实践要点。

2. 技术选型过程

在选型阶段,我们对比了以下方案:

  • Prometheus + Jaeger:监控与追踪分离部署,学习曲线较高。
  • Zipkin + ElasticSearch:简单易用,但在高并发时追踪性能不足。
  • New Relic / Datadog:商业付费,成本较高。
  • SkyWalking:开源免费,集成监控、追踪、告警、可视化一体,社区活跃。

最终选择SkyWalking作为核心APM工具,原因如下:

  • 完整的APM功能:链路追踪、服务拓扑、指标监控、告警规则。
  • 丰富的语言/框架探针:Java、Go、Node.js 等多语言支持。
  • 与Kubernetes、Istio、gRPC等生态深度集成。
  • 社区活跃,二次开发成本低。

3. 实现方案详解

3.1 部署架构

电商微服务系统部署在Kubernetes集群,选用以下组件:

  • SkyWalking OAP Server:核心分析引擎,负责聚合和存储数据。
  • SkyWalking UI:可视化界面,展示拓扑、指标、追踪。
  • Elasticsearch:后端存储,承载Trace、Metrics、Log数据。
  • SkyWalking Agent:应用侧探针,采集追踪和指标。

下面是简化版 docker-compose.yml 示例(可迁移至K8s Deployment):

version: '3.7'
services:oap:image: apache/skywalking-oap-server:9.3.0container_name: skywalking-oapports:- "11800:11800"- "12800:12800"environment:SW_STORAGE: elasticsearchSW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200depends_on:- elasticsearchui:image: apache/skywalking-ui:9.3.0container_name: skywalking-uiports:- "8080:8080"environment:SW_OAP_ADDRESS: oap:11800depends_on:- oapelasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2container_name: elasticsearchenvironment:- discovery.type=single-node- ES_JAVA_OPTS=-Xms1g -Xmx1gports:- "9200:9200"

3.2 应用侧插件配置

以 Spring Boot 应用为例,引入 SkyWalking Java Agent:

  1. 下载 agent 包,并在应用启动脚本中指定:
#!/bin/bash
JAVA_OPTS="-javaagent:/opt/skywalking/agent/skywalking-agent.jar \-Dskywalking.agent.service_name=order-service \-Dskywalking.collector.backend_service=skywalking-oap:11800"
java $JAVA_OPTS -jar order-service.jar
  1. 配置日志关联 Trace(可选):在 application.yml 中添加:
logging:pattern:console: "[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} - %msg traceId=%X{traceId} spanId=%X{spanId}%n"

3.3 自定义拓展与告警

SkyWalking 提供告警规则引擎,可对服务响应时间、错误率等指标进行告警。

在 UI 中,进入「告警规则」-「新增」,示例:

  • Metric: service_resp_time_max
  • Condition: > 2000 ms
  • Trigger: 连续 3 次
  • Notification: Email/Webhook

同时可以基于 OAP 扩展插件,实现自定义指标采集。

4. 踩过的坑与解决方案

  1. Elasticsearch 索引过多导致 OOM

    • 问题:默认每天新建索引,ES Master 容易 OOM。
    • 解决:在 oap/config/application.yml 中配置:
      storage:elasticsearch:indexShardsNumber: 2indexReplicasNumber: 1dayStep: 7  # 按周切分索引
      
  2. Agent 导致应用启动慢

    • 问题:大量服务方序列化数据时卡顿。
    • 解决:升级至最新版 Agent 并开启 profiling 精简模式:
      skywalking.agent.profiling.status=on
      skywalking.agent.profiling.stream.firstThreshold=1000
      
  3. K8s 环境中无法自动发现 OAP 地址

    • 问题:容器 DNS 解析偶发失败。
    • 解决:使用 ConfigMap 挂载 bootstrap.properties,并在 Agent 参数中指定固定地址列表。

5. 总结与最佳实践

  • SkyWalking 一体化方案适合追求开箱即用的中大型微服务平台。
  • 存储可横向扩展,Elasticsearch、H2、TiDB 等多种后端皆可选。
  • 监控粒度可控,使用 Profiling 和采样机制平衡性能与可视化需求。
  • 配置告警和链路追踪相结合,提高故障发现和定位效率。
  • 推荐结合 Service Mesh(Istio)实现无侵入式 Trace 注入。

通过本文示例,读者可以在生产环境中快速搭建 SkyWalking APM 监控体系,并针对常见问题进行优化。后续可结合更多语言探针和插件,进一步扩展监控能力。祝您的微服务系统运行稳定、高效!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915444.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 进阶(五): Excel 基本操作

目录 1. 概述2. 写入 2.1 使用 xlwt2.2 使用 XlsxWriter 3. 读取4. 修改 1. 概述 在现实中,很多工作都需要与数据打交道,Excel 作为常用的数据处理工具,一直备受人们的青睐,而大部分人都是手动操作 Excel,如果数据量…

32、鸿蒙Harmony Next开发:使用动画-动画概述

​​​属性动画转场动画粒子动画组件动画动画曲线动画衔接动画效果帧动画(ohos.animator) UI(用户界面)中包含开发者与设备进行交互时所看到的各种组件(如时间、壁纸等)。属性作为接口,用于控制…

【STM32】485接口原理

485 通信实验 这篇文章是对 RS485通信 的原理、硬件连接、接口芯片(SP3485)、总线结构等都有详尽的说明。我们在此处进行清晰有条理的讲解整理,便于学习和实验操作。 在了解485接口通信原理之前,我们先复习一下串口:串…

亚马逊二审攻防全攻略:预防、应对与长效合规之道

当店铺收到二审通知,不少卖家会陷入焦虑与慌乱,只要掌握科学的预防策略与应对方法,不仅能降低二审风险,即便遭遇审核也能顺利突围。一、未雨绸缪:预防二审的四大核心策略夯实资料真实性根基资料的真实性与一致性是亚马…

添加状态信息

1首先在数据字典里加入可借阅和不可借阅状态2导入数据字典export default {name: "Book",dicts: [book_borrow_status],//导入数据字典data() {return {formData: {name: null,author: null,num: null,price: null,typeId: null,status:null//新加状态属性},3设置状态…

234、回文链表

题目:解答:对143稍作修改即可,判断两个指针指向的是否一直相等。终止条件为不等或者head2nullptrclass Solution { public:ListNode *rev(ListNode *head){ListNode *cur head;ListNode *pre nullptr;while(cur){ListNode * nxt cur->n…

第15次:商品搜索

实现用户在页面可自由搜索某个商品的功能。 第1步:准备搜索功能用到的库 pip install whoosh pip install jieba pip install django-haystackwhoosh是搜索引擎,对英文支持较好,但对中文效果不佳。jieba为中文分词库,弥补whoosh…

《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——0. 博客系列大纲

目录【《使用Qt Quick从零构建AI螺丝瑕疵检测系统》系列简介】第一部分:基础入门与项目启航第二部分:核心视觉算法开发第三部分:模拟完整工业流程第四部分:软件打包与高级特性【《使用Qt Quick从零构建AI螺丝瑕疵检测系统》系列简…

【Python】Python中的循环语句

循环语句导读一、基本概念1.1 循环语句的执行流程1.2 循环语句的分类二、while语句三、for语句四、break与continue五、死循环六、循环中的else语句七、range()函数结语导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中我们…

docker|Linux|以centos基础镜像为基础制作nmap专用镜像(镜像瘦身计划)

一、 最近由于某些场景下需要使用nmap,而nmap的rpm安装包在源目标机器上使用有软件冲突,因此,计划使用docker部署nmap 具体计划为 1、使用centos的基础镜像,在有网环境下,通过配置阿里云的yum仓库,在cen…

基于单片机公交车报站系统/报站器

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览​​​​​​​ 概述 公交车自动报站系统利用单片机作为核心控制器,结合GPS/北斗定位模块、语音存…

Oracle 体系结构学习

1 认识Oracle后台进程Oracle数据库后台进程是Oracle数据库管理系统(DBMS)的核心组件,它们在后台运行,负责数据库的各种管理和维护任务。主要包括以下几种:SMON (System Monitor)SMON负责数据库的恢复操作,如…

构建一种安全的老式测试仪,用于具有限流灯泡,模拟仪表和可变输出的交流设备

这个复古电路和电源测试仪的想法来自我需要一个简单,安全,时尚的工具来测试和控制工作台上的线路供电设备。商业解决方案要么太笨重,太昂贵,要么缺乏我喜欢的触觉和模拟魅力。所以我决定自己造一个。这个测试仪的核心是一个老式的…

Redis5:Redis的Java客户端——Jedis与SpringDataRedis详解

目录 1、Jedis客户端 1.1使用过程 2、SpringDataRedis 2.1 SpingDataRedis介绍 2.2SpringDataRedis快速入门 2.3RedisTemplate的RedisSerializer 2.3.1RedisTemplate中JDK序列化局限性 2.3.2方式一:改变RedisTemplate的序列化方式 2.3.3RedisTemplate存储一…

零基础 “入坑” Java--- 十三、再谈类和接口

文章目录一、Object类1.获取对象信息2.对象比较:equals方法二、再谈接口1.比较相关接口2.Cloneable接口和深拷贝三、内部类1.匿名内部类2.实例内部类3.静态内部类4.局部内部类在之前的学习中,我们已经了解了有关类以及接口的知识,在本章节中&…

Spring Boot 一个注解搞定「加密 + 解密 + 签名 + 验签」

Spring Boot 一个注解搞定「加密 解密 签名 验签」本文基于 Spring Boot 3.x,通过一个自定义注解 AOP,一行注解即可给任何 Controller 方法加上 请求解密 → 验签 → 响应加密 → 加签 的完整链路,并可直接拷贝到生产环境使用。一、最终效…

《计算机网络》实验报告二 IP协议分析

目 录 1、实验目的 2、实验环境 3、实验内容 3.1 tcpdump 基本用法 3.2 wireshark基本用法 3.3 利用tcpdump抓包,wireshark分析包 4、实验结果与分析 4.1 tcpdump命令的基本用法 4.2 wireshark的基本用法 4.3 利用tcpdump抓包,wireshark分析包…

k8s学习记录(三):Pod基础-Node选择

一、前言 在上一篇文章中我们学习了Pod的一些基本的知识,今天我们将继续学习Pod。 二、K8S如何选择节点来运行Pod 我们知道在一个K8S集群中,会有多个工作节点(Worker Node),那么k8s会选择那个node呢?接下…

3天功能开发→3小时:通义灵码2.0+DEEPSEEK实测报告,单元测试生成准确率92%的秘密

活动链接:https://developer.aliyun.com/topic/lingma-aideveloper?spma2c6h.29979852.J_9593490300.2.49b8110eeymlF8 前言 随着人工智能技术的迅猛发展,AI 赋能编程成为了必然趋势。通义灵码应运而生,它是阿里巴巴集团在人工智能与编程领…

【小沐学GIS】基于Rust绘制三维数字地球Earth(Rust、OpenGL、GIS)

🍺三维数字地球GIS系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第二期3【小沐学GI…