Skip to content

Apache SkyWalking 全链路监控解决方案

从入门到精通实战指南

版本:v1.0
基于版本:SkyWalking 10.4.0(2026年4月最新稳定版)
编写日期:2026年5月
适用场景:微服务监控、分布式追踪、K8s云原生监控、LLM应用监控


目录

第一部分:入门篇

  1. SkyWalking概述与核心概念
  2. 快速部署:30分钟搭建生产可用环境
  3. Java应用接入:5分钟无侵入监控
  4. UI功能使用与核心仪表盘

第二部分:进阶篇

  1. 多语言Agent接入全攻略
  2. 自定义监控与手动埋点
  3. 告警配置与通知机制
  4. 日志集成与Trace-Log联动

第三部分:高级篇

  1. SkyWalking架构深度解析
  2. 性能调优:从QPS 1k到100k的演进
  3. BanyanDB原生存储最佳实践
  4. eBPF Profiling:内核级性能诊断

第四部分:生产落地篇

  1. Kubernetes云原生部署方案
  2. 高可用集群架构设计
  3. 生产环境运维与故障排查
  4. GenAI大模型应用监控(10.4新特性)

第一部分:入门篇


1. SkyWalking概述与核心概念

1.1 什么是SkyWalking?

Apache SkyWalking是一款开源的**应用性能监控(APM)**系统,专为微服务、云原生和容器化架构设计。

核心能力

  • ✅ 端到端分布式追踪(Distributed Tracing)
  • ✅ 服务拓扑图自动发现
  • ✅ 服务、实例、端点多级指标监控
  • ✅ 服务依赖分析与SLA评估
  • ✅ 慢查询与异常自动检测
  • ✅ eBPF内核级性能分析(v9+)
  • ✅ LLM大模型应用可观测性(v10.4+)

数据规模支撑:单集群可处理**1000亿+**遥测数据

1.2 版本发展与选择

版本系列最新版本发布时间状态核心特性
10.x10.4.02026.04✅ ActiveGenAI监控、OAL V2、TraceQL、Grafana Tempo兼容
9.x9.9.02026.01✅ ActiveBanyanDB生产就绪、eBPF Profiling、深色主题
8.x8.9.12021.12❌ EOL不再支持,建议升级

推荐:生产环境选择 10.4.0+,新特性更丰富且性能大幅提升

1.3 核心架构组件

┌─────────────────────────────────────────────────────────────────┐
│                        SkyWalking UI (8080)                      │
│  GraphQL API ── 仪表盘 ── 拓扑图 ── Trace查询 ── 性能分析       │
└──────────────────────────────┬────────────────────────────────────┘

┌──────────────────────────────▼────────────────────────────────────┐
│          OAP Server (Observability Analysis Platform)            │
│  ┌─────────────┐  ┌──────────────┐  ┌─────────────────────┐     │
│  │  Receivers  │  │  Aggregators │  │  Alerting Engine    │     │
│  │ (gRPC/HTTP) │  │    (OAL)     │  │  (告警规则引擎)     │     │
│  └─────────────┘  └──────────────┘  └─────────────────────┘     │
└──────────────────────────────┬────────────────────────────────────┘

┌──────────────────────────────▼────────────────────────────────────┐
│                         Storage Layer                              │
│  BanyanDB / Elasticsearch / MySQL / TiDB / VictoriaMetrics        │
└─────────────────────────────────────────────────────────────────────┘


┌──────────────────────────────┼────────────────────────────────────┐
│                    Telemetry Data Sources                       │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐    │
│  │ Java    │ │ Go      │ │ Python  │ │ Node.js │ │ eBPF    │    │
│  │ Agent   │ │ Agent   │ │ Agent   │ │ Agent   │ │ Rover   │    │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘    │
│  ┌─────────────────────────────────────────────────────────────┐  │
│  │ 第三方兼容:OpenTelemetry、Zipkin、Prometheus、Fluentd       │  │
│  └─────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────┘

1.4 核心概念详解

概念说明类比
Service(服务)一组提供相同功能的工作负载(实例集合)应用/微服务名
Instance(实例)服务中的单个工作节点(JVM/Pod/进程)Pod / 服务器IP
Endpoint(端点)服务对外提供的操作(如URL、API)API接口、RPC方法
Trace(调用链)一次完整请求在分布式系统中的完整路径一次用户请求的所有调用记录
Span(跨度)Trace中的单个调用,包含开始时间、结束时间、标签单次方法调用 / DB查询
Segment(段)同一个进程内的Span集合,构成Trace的一部分单个服务内的调用链路
OAL(观测分析语言)SkyWalking自定义的指标聚合DSL类似PromQL

2. 快速部署:30分钟搭建生产可用环境

2.1 环境要求

组件最低配置推荐配置
CPU4核8核+
内存8GB16GB+
磁盘50GB HDD200GB SSD
OSCentOS 7+/Ubuntu 18.04+Linux 内核 4.15+
JDK8/11/17OpenJDK 11

2.2 快速部署(Docker方式)

步骤1:一键启动完整环境

bash
# 创建docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
  # SkyWalking OAP Server
  oap:
    image: apache/skywalking-oap-server:10.4.0
    container_name: skywalking-oap
    ports:
      - "11800:11800"  # gRPC 接收端口(Agent上报)
      - "12800:12800"  # HTTP 接收端口 / GraphQL API
    environment:
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      SW_HEALTH_CHECKER: default
    networks:
      - skywalking
    depends_on:
      - elasticsearch
    restart: always

  # SkyWalking UI
  ui:
    image: apache/skywalking-ui:10.4.0
    container_name: skywalking-ui
    ports:
      - "8080:8080"
    environment:
      SW_OAP_ADDRESS: http://oap:12800
      SW_TIMEOUT: 20000
    networks:
      - skywalking
    depends_on:
      - oap
    restart: always

  # Elasticsearch 存储
  elasticsearch:
    image: elasticsearch:7.17.10
    container_name: skywalking-es
    ports:
      - "9200:9200"
    environment:
      discovery.type: single-node
      ES_JAVA_OPTS: "-Xms4g -Xmx4g"
      xpack.security.enabled: "false"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es_data:/usr/share/elasticsearch/data
    networks:
      - skywalking
    restart: always

volumes:
  es_data:

networks:
  skywalking:
    driver: bridge
EOF

# 启动
docker-compose up -d

步骤2:验证启动状态

bash
# 查看容器状态
docker-compose ps

# 查看日志
docker-compose logs -f oap

# 验证健康检查
curl http://localhost:12800/healthcheck

# 访问UI
open http://localhost:8080

✅ 预期结果:访问 http://localhost:8080 看到SkyWalking仪表盘,默认用户名密码 admin/admin

2.3 二进制方式部署(生产推荐)

步骤1:下载解压

bash
# 下载 SkyWalking 10.4.0
wget https://archive.apache.org/dist/skywalking/10.4.0/apache-skywalking-apm-10.4.0.tar.gz

# 解压
tar -zxvf apache-skywalking-apm-10.4.0.tar.gz
cd apache-skywalking-apm-bin

步骤2:配置存储(Elasticsearch)

bash
# 编辑配置文件
vim config/application.yml
yaml
storage:
  selector: ${SW_STORAGE:elasticsearch}
  elasticsearch:
    # ES集群地址,多节点用逗号分隔
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.1.50:9200}
    protocol: ${SW_STORAGE_ES_PROTOCOL:http}
    # 索引分片数(生产建议3-5)
    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:3}
    # 副本数(生产建议1)
    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1}
    # 数据保留天数(根据磁盘空间调整)
    metricsDataTTL: ${SW_STORAGE_ES_METRICS_DATA_TTL:7}
    traceDataTTL: ${SW_STORAGE_ES_TRACE_DATA_TTL:3}
    logDataTTL: ${SW_STORAGE_ES_LOG_DATA_TTL:3}

步骤3:启动服务

bash
# 启动OAP服务(后台运行)
nohup bin/oapService.sh > logs/oap.log 2>&1 &

# 启动UI(如果和OAP分开部署)
nohup bin/webappService.sh > logs/ui.log 2>&1 &

# 验证启动
tail -f logs/skywalking-oap-server.log
# 看到:"OAP starts up in xxx seconds" 表示启动成功

3. Java应用接入:5分钟无侵入监控

3.1 Java Agent工作原理

JVM启动

-javaagent 参数加载 skywalking-agent.jar

ByteBuddy 字节码增强(类加载时织入)

拦截目标方法调用,创建 Span,收集上下文

异步批量上报至 OAP Server (gRPC)

3.2 快速接入步骤

步骤1:获取Java Agent

bash
# 方式1:从官方下载
wget https://archive.apache.org/dist/skywalking/java-agent/9.1.0/apache-skywalking-java-agent-9.1.0.tgz
tar -zxvf apache-skywalking-java-agent-9.1.0.tgz

# 方式2:从SkyWalking安装目录复制
cp -r apache-skywalking-apm-bin/agent /opt/skywalking-agent/

步骤2:修改启动脚本

bash
# 原启动命令
java -jar your-app.jar

# 修改后(添加 -javaagent 参数)
java \
  -javaagent:/opt/skywalking-agent/skywalking-agent.jar \
  -DSW_AGENT_NAME=order-service \
  -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.1.50:11800 \
  -jar your-app.jar

⚠️ 注意-javaagent 参数必须放在 -jar 或主类名之前!

步骤3:核心参数说明

参数说明示例必填
-javaagentAgent JAR路径/opt/sw/agent.jar✅ 是
SW_AGENT_NAME服务名(UI中显示)order-service✅ 是
SW_AGENT_COLLECTOR_BACKEND_SERVICESOAP地址192.168.1.50:11800✅ 是
SW_AGENT_INSTANCE_NAME实例名order-service-pod-001❌ 否
SW_AGENT_SAMPLE_RATE采样率(1-10000)1000 = 10%采样❌ 否

步骤4:配置文件方式(推荐)

编辑 /opt/skywalking-agent/config/agent.config

properties
# 服务名称
agent.service_name=${SW_AGENT_NAME:default-service}

# OAP服务器地址
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}

# 采样率 10000=100%
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE_RATE:-1}

# 忽略静态资源请求
agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png}

# 日志级别
logging.level=${SW_LOGGING_LEVEL:INFO}

3.3 Spring Boot 项目集成示例

方式1:JVM参数注入(推荐)

bash
# 修改 application-start.sh
java \
  -javaagent:/opt/skywalking-agent/skywalking-agent.jar \
  -Dspring.profiles.active=prod \
  -jar app.jar

方式2:Docker镜像内置(K8s环境)

dockerfile
FROM openjdk:11-jre-slim

# 复制Agent到镜像
COPY skywalking-agent /skywalking-agent

# 设置环境变量(也可在K8s部署时覆盖)
ENV SW_AGENT_NAME=my-service
ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking-oap:11800

# 启动应用(注意-javaagent必须在-jar之前)
ENTRYPOINT ["java", \
  "-javaagent:/skywalking-agent/skywalking-agent.jar", \
  "-jar", "/app.jar"]

方式3:K8s Sidecar 注入(云原生)

yaml
# deployment.yaml 节选
spec:
  template:
    spec:
      volumes:
        - name: sw-agent
          emptyDir: {}
      
      initContainers:
        - name: sw-agent-sidecar
          image: apache/skywalking-java-agent:9.1.0
          volumeMounts:
            - name: sw-agent
              mountPath: /agent
          command: ["cp", "-r", "/skywalking/agent", "/agent"]
      
      containers:
        - name: my-app
          image: my-app:latest
          volumeMounts:
            - name: sw-agent
              mountPath: /skywalking-agent
          env:
            - name: JAVA_TOOL_OPTIONS
              value: "-javaagent:/skywalking-agent/skywalking-agent.jar"
            - name: SW_AGENT_NAME
              value: "my-service"
            - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
              value: "skywalking-oap.skywalking:11800"

4. UI功能使用与核心仪表盘

4.1 UI主界面概览

访问 http://<ui-ip>:8080,默认账号密码:admin/admin

┌──────────────────────────────────────────────────────────────┐
│ 🔍 顶部搜索栏  │  🔄 时间选择器  │ 👤 用户菜单              │
├──────────────────────────────────────────────────────────────┤
│ 📊 仪表盘 │ 🔗 拓扑 │ 🔍 Trace │ 🚨 告警 │ 📝 日志 │ 🔥 Profiling │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│          核心内容区(根据左侧菜单切换)                       │
│                                                              │
└──────────────────────────────────────────────────────────────┘

4.2 核心功能模块详解

模块1:服务仪表盘(Service Dashboard)

核心指标卡片

指标说明正常值范围
Apdex(应用性能指数)用户体验满意度0.85+ 为优秀
响应时间(RT)平均请求耗时< 200ms 优秀
吞吐量(CPM)每分钟请求数根据业务量评估
SLA(服务可用性)成功请求占比99.9%+

关键图表

  • 响应时间趋势图(分P50/P95/P99)
  • 吞吐量趋势图
  • 实例状态列表
  • 慢端点排行榜

模块2:服务拓扑图(Topology)

功能说明

  • 自动发现服务间调用关系
  • 节点大小表示请求量
  • 连线颜色表示健康状态(绿色正常/红色异常)
  • 鼠标悬停查看详细指标
  • 点击节点下钻到服务详情

模块3:Trace查询(Trace)

查询方式

  • 按Trace ID精确查询
  • 按服务/实例/端点筛选
  • 按响应时间范围、状态(成功/失败)筛选
  • 标签高级筛选(如 http.status_code=500

Trace详情页解读

🌳 Trace ID: abcdef123456 | 总耗时: 456ms | 跨度: 5
┌──────────────────────────────────────────────────────────┐
│ [0ms - 100ms] GET /api/v1/orders (OrderService)          │
│   Tags: http.method=GET, http.status_code=200             │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ [10ms - 80ms] MySQL SELECT order表 (耗时70ms)        │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ [100ms - 456ms] gRPC InventoryService.deduct()          │
│   Tags: rpc.system=gRPC, peer.address=10.0.0.5:9090      │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ [110ms - 120ms] Redis GET stock:1001                │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘

快速定位问题

  • 🔴 红色Span:有异常的调用,展开看堆栈
  • ⏱️ 宽的矩形:耗时最长的调用,性能瓶颈
  • 📋 Tags面板:查看HTTP状态码、SQL语句、异常信息

第二部分:进阶篇


5. 多语言Agent接入全攻略

5.1 Go应用接入

步骤1:引入依赖

bash
go get github.com/apache/skywalking-go

步骤2:代码初始化

go
package main

import (
    "github.com/apache/skywalking-go"
    "github.com/apache/skywalking-go/toolkit/trace"
)

func main() {
    // 初始化SkyWalking(也可通过环境变量配置)
    skywalking.Start(skywalking.WithServiceName("user-service-go"))
    
    // 你的业务代码
    http.HandleFunc("/api/users", func(w http.ResponseWriter, r *http.Request) {
        // 获取当前Span,添加自定义标签
        span := trace.ActiveSpan()
        span.SetTag("user_id", r.URL.Query().Get("id"))
        
        // ... 业务逻辑
    })
    
    http.ListenAndServe(":8080", nil)
}

5.2 Python应用接入

bash
# 安装Agent
pip install apache-skywalking

# 启动应用(无侵入方式)
sw-python -d run -p service_name=python-service python app.py

5.3 Node.js应用接入

bash
# 安装Agent
npm install --save skywalking-client-js

# 应用入口引入
require('skywalking-client-js').start({
    serviceName: 'nodejs-service',
    collectorAddress: '192.168.1.50:11800'
});

6. 自定义监控与手动埋点

6.1 手动创建Span

当默认插件无法覆盖你的业务场景时,可手动创建Span。

java
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Span;

// 方式1:注解方式(推荐)
@Trace(operationName = "create_order_biz")
@Tag(key = "order_id", value = "arg[0]")
@Tag(key = "result", value = "returnedObj.id")
public Order createOrder(String userId, OrderDTO dto) {
    // 业务逻辑会被自动包装成Span
    return orderService.create(userId, dto);
}

// 方式2:API方式(灵活控制)
public void complexBusinessLogic() {
    // 创建本地Span
    Span span = Trace.createLocalSpan("complex_calculation");
    try {
        span.tag("step", "validation");
        
        // 业务逻辑...
        
        // 嵌套Span
        Span subSpan = Trace.createLocalSpan("sub_calculation");
        try {
            // 子逻辑...
        } finally {
            Trace.stopSpan(subSpan);
        }
    } catch (Exception e) {
        // 记录异常
        span.log(e);
        throw e;
    } finally {
        Trace.stopSpan(span);
    }
}

6.2 自定义业务指标(Meter)

java
import org.apache.skywalking.apm.toolkit.meter.*;

// 1. 计数器
Counter orderCounter = MeterFactory.counter("order_count")
    .tag("type", "normal")
    .build();

// 下单时计数
orderCounter.inc();

// 2. 直方图(统计耗时分布)
Histogram processLatency = MeterFactory.histogram("process_latency")
    .steps(10, 50, 100, 500)  // 桶边界:ms
    .tag("service", "order")
    .build();

// 记录耗时
processLatency.record(System.currentTimeMillis() - start);

7. 告警配置与通知机制

7.1 告警配置文件

编辑 config/alarm-settings.yml

yaml
# 告警规则配置
rules:
  # 规则1:服务响应时间告警
  service_resp_time_rule:
    metrics-name: service_resp_time
    op: ">"
    threshold: 1000  # 1秒
    period: 10       # 检查周期(分钟)
    count: 3          # 连续3次满足
    silence-period: 5 # 静默期(分钟)
    message: 服务{name}平均响应时间在过去10分钟内有3次超过1秒

  # 规则2:服务可用性告警
  service_sla_rule:
    metrics-name: service_sla
    op: "<"
    threshold: 99.9
    period: 10
    count: 2
    message: 服务{name}可用性在过去10分钟内低于99.9%

# Webhook告警通知
webhooks:
  - http://alert-manager:8080/skywalking/webhook

7.2 钉钉告警示例

python
from flask import Flask, request
import requests

app = Flask(__name__)

@app.route('/skywalking/webhook', methods=['POST'])
def skywalking_webhook():
    alerts = request.json
    
    for alert in alerts:
        message = {
            "msgtype": "markdown",
            "markdown": {
                "title": "🚨 SkyWalking告警",
                "text": f"""
### 🚨 SkyWalking 服务告警
**告警服务**: {alert.get('scopeName', '-')}
**告警详情**:{alert.get('message', '-')}
> 请立即排查处理!
                """
            }
        }
        
        requests.post(
            'https://oapi.dingtalk.com/robot/send?access_token=xxx',
            json=message
        )
    
    return "ok"

第三部分:高级篇


9. SkyWalking架构深度解析

9.1 OAP核心架构

┌─────────────────────────────────────────────────────────────────┐
│                    OAP Server 核心模块                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────────┐   ┌─────────────────┐   ┌──────────────┐ │
│  │   Receivers     │   │   Analysis      │   │   Query      │ │
│  │  (数据接收层)   │──▶│   (聚合分析)    │──▶│  (查询层)     │ │
│  │ - gRPC 11800   │   │ - OAL Engine    │   │ - GraphQL    │ │
│  └─────────────────┘   └─────────────────┘   └──────────────┘ │
│         │                       │                      │       │
│         ▼                       ▼                      ▼       │
│  ┌─────────────────────────────────────────────────────────────┐
│  │                    核心数据模型层(Core)                    │
│  └─────────────────────────────────────────────────────────────┘
│         │                       │                      │       │
│         ▼                       ▼                      ▼       │
│  ┌─────────────────────────────────────────────────────────────┐
│  │                    Storage Provider SPI                      │
│  │  BanyanDB / ES / MySQL / TiDB / VictoriaMetrics              │
│  └─────────────────────────────────────────────────────────────┘
└─────────────────────────────────────────────────────────────────┘

10. 性能调优:从QPS 1k到100k的演进

10.1 OAP服务端调优

JVM参数优化(bin/oapService.sh)

bash
# 8GB内存配置(生产推荐)
export JAVA_OPTS="
  -Xms8g -Xmx8g
  -Xmn2g
  -XX:MetaspaceSize=256m
  -XX:MaxMetaspaceSize=512m
  -XX:+UseG1GC
  -XX:MaxGCPauseMillis=200
"

核心配置调优

yaml
core:
  # 接收队列大小(高并发时调大)
  default:
    receiverQueueSize: 10000
    batchProcessSize: 2000

# Elasticsearch连接池优化
storage-elasticsearch:
  elasticsearch:
    numOfHttpClientConnections: 40
    bulkActions: 5000
    bulkSize: 20 # MB
    concurrentRequests: 4

10.2 Agent端性能优化

properties
# agent.config 关键优化项

# 1. 采样率(高并发场景降低采样率)
agent.sample_n_per_3_secs=1000  # 10%采样

# 2. 缓冲区大小
agent.buffer_size=5120

# 3. 忽略不必要的请求
agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png

第四部分:生产落地篇


13. Kubernetes云原生部署方案

13.1 使用Helm部署(官方推荐)

bash
# 添加Helm仓库
helm repo add skywalking https://apache.jfrog.io/artifactory/skywalking-helm
helm repo update

# 安装
kubectl create namespace skywalking

helm install skywalking skywalking/skywalking \
  --namespace skywalking \
  --version 4.5.0 \
  --set oap.image.tag=10.4.0 \
  --set ui.image.tag=10.4.0 \
  --set elasticsearch.enabled=true \
  --set oap.replicas=2

16. GenAI大模型应用监控(10.4新特性)

16.1 功能概述

SkyWalking 10.4.0新增GenAI可观测性能力:

  • Token消耗统计(输入/输出/总数)
  • 模型调用延迟分析
  • 费用估算与成本监控
  • Prompt/Response内容审计
  • 异常调用检测(超时、失败)

16.2 OpenAI应用接入

java
// 添加依赖
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-sdk-plugin-openai</artifactId>
    <version>9.1.0</version>
</dependency>

// 代码使用(自动拦截)
OpenAiClient client = OpenAiClient.newBuilder()
    .apiKey("sk-xxx")
    .build();

ChatCompletion completion = client.chatCompletion(
    ChatCompletionRequest.builder()
        .model("gpt-4o")
        .addMessage("user", "Hello, SkyWalking!")
        .build()
);

附录:配置速查表

配置项默认值说明
SW_STORAGEh2存储类型
SW_AGENT_NAMEYour_ApplicationName服务名
agent.sample_n_per_3_secs-1(全采样)采样率
SW_TRACE_DATA_TTL3Trace保留天数
SW_METRICS_DATA_TTL7指标保留天数

文档结束

褚成志 · 简历中心