基于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
英文地址,請注明出處:http://en.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…