SkyWalking 分布式追踪、APM学习-I

文章目录

Apache SkyWalking 是一个开源的应用性能监控(APM)系统,专为微服务、云原生和容器化架构设计。它提供了一套完整的可观测性解决方案,主要包括分布式追踪、指标监控、服务网格遥测分析和可视化功能。

存储

在 SkyWalking 的存储选型上,Elasticsearch (ES) 7BanyanDB 代表了"成熟稳定"与"原生高效"两种不同的技术路线

核心对比

维度 Elasticsearch 7.x BanyanDB
定位 通用搜索引擎,SkyWalking 的传统默认存储 SkyWalking 原生专用时序数据库
成熟度 ⭐⭐⭐⭐⭐ (极高,经过多年大规模生产验证) ⭐⭐⭐⭐ (高,2025年起已标记为生产就绪)
性能 写入吞吐高,但查询延迟随数据量增加而波动 写入与查询极快,专为 Trace/Log 模型优化
资源消耗 高 (Java 进程,吃内存,GC 压力大) 低 (Go 编写,内存占用小,无 GC 停顿)
运维复杂度 高 (需调优 JVM、分片、副本、ILM 策略) 低 (二进制部署,K8s 原生,自动管理生命周期)
存储成本 较高 (压缩率一般) 极低 (采用 Gorilla 等算法高效压缩)

BanyanDB

BanyanDB 是 SkyWalking 社区专门为了解决 ES 痛点而自研的数据库。根据 2025 年的社区回顾,BanyanDB 已经完成了从"实验性"到"生产就绪"的跨越,成为 SkyWalking 的默认推荐路径

  • 优势:
    • 专为监控而生: 它不像 ES 那样是通用搜索引擎,BanyanDB 的底层数据模型(Stream/Measure)是完全贴合 SkyWalking 的 Trace 和 Metrics 设计的。这意味着它没有冗余功能,效率极高。
    • 极致压缩: 采用了类似 Facebook Gorilla 的压缩算法,针对时序数据进行了 XOR 压缩,磁盘占用通常只有 ES 的几分之一,大幅降低存储成本。
    • 查询加速: 针对 SkyWalking 的 UI 查询模式进行了深度优化,页面加载速度通常比 ES 更快,且支持热/温/冷数据分层存储。
    • 部署简单: 它是 Go 语言编写的单二进制文件,没有 Java 依赖,启动快,内存占用极低,非常适合容器化和 Kubernetes 部署。
  • 劣势:
    • 生态相对年轻: 虽然已经是生产级,但相比 ES 十几年的积累,BanyanDB 的周边工具、第三方集成和故障排查经验库还在积累中。
    • 通用性弱: 如果你不仅想存监控数据,还想存业务日志做全文检索,BanyanDB 的全文检索能力不如 ES 强大。

elasticsearh 7

  • 劣势:
    • 资源大户: ES 是 Java 应用,非常消耗内存。随着数据量增长,你需要不断堆砌硬件资源,且 JVM 的垃圾回收(GC)可能会导致间歇性的停顿。
    • 运维复杂: 需要配置复杂的索引生命周期管理(ILM)来自动删除旧数据,否则磁盘很快就会满。分片(Shard)管理如果不当,会导致集群性能急剧下降。

总结: 站在 2026 年的视角,BanyanDB 是 SkyWalking 的未来,它在性能和成本上完胜 ES。除非你有必须使用 ES 的存量架构限制,否则在新部署中,推荐尝试使用 BanyanDB。

安装

oap部署

容器化部署

  1. elasticsearch:作为 SkyWalking 的后端存储(用于存储指标和追踪数据)。
  2. oap:SkyWalking 的后端分析处理服务(Observability Analysis Platform)。
  3. ui:SkyWalking 的前端展示界面。

容器下载地址
skywalking-oap-server 10.3.0-java21
skywalking-ui 10.3.0-java21
skywalking-java-agent 9.6.0-java21
skywalking-banyandb 0.10.0-slim

skywalking-graalvm-distro

yaml 复制代码
version: '3.8'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.6
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - TZ=Asia/Shanghai
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms1024m -Xmx1024m
    volumes:
      - /home/wtl/software/skywalking/es/data:/usr/share/elasticsearch/data
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:9200 || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5     
  kibana:
    image: docker.elastic.co/kibana/kibana:7.17.6
    container_name: kibana
    ports:
      - "5601:5601"
    depends_on:
      elasticsearch:
        condition: service_healthy
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - I18N_LOCALE=zh-CN

  oap:
    image: apache/skywalking-oap-server:9.4.0
    container_name: oap
    restart: always
    ports:
      - 12800:12800
      - 11800:11800
    environment:
      - JAVA_OPTS=-Xms2048m -Xmx2048m
      - SW_ENABLE_UPDATE_UI_TEMPLATE=true
      - SW_CORE_METRICS_DATA_TTL=15
      - SW_CORE_RECORD_DATA_TTL=15
      - SW_STORAGE=elasticsearch
      - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
      - TZ=Asia/Shanghai
      - SW_HEALTH_CHECKER=default
    healthcheck:
      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
      interval: 5s
      timeout: 10s
      retries: 120
    depends_on:
      elasticsearch:
        condition: service_healthy

  ui:
    image: docker.io/apache/skywalking-ui:9.4.0
    container_name: ui
    restart: always
    ports:
      - 8080:8080
    environment:
      - SW_OAP_ADDRESS=http://oap:12800
    depends_on:
      - oap
          condition: service_healthy
    links:
      - oap

agent安装

下载地址 是:java-agent

注意:agent上报数据采用的是http2

关键参数说明

  • -javaagent:指定 SkyWalking Agent 的 JAR 包路径,是启动代理的必要参数。
  • -Dskywalking.logging.file_name:设置 SkyWalking 代理的日志文件名,便于追踪代理运行状态。
  • -Dskywalking.agent.service_name:定义该服务在 SkyWalking UI 中显示的名称,用于服务拓扑和链路追踪识别。
python 复制代码
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar \
-Dskywalking.logging.file_name=/data/logs/skywalking/app-provider-sw.log \
-Dskywalking.agent.service_name=app-provider

部署建议

  • 路径需根据实际部署环境调整,确保 skywalking-agent.jar 存在且可读。
  • 日志文件名建议按服务命名,便于运维排查。
  • 服务名应与微服务架构中的服务标识一致,确保在 SkyWalking 控制台中正确归类。
  • 可结合环境变量或配置中心动态注入参数,提升部署灵活性。

关键配置文件

skywalking-agent/config/agent.config

默认配置文件 : Agent 启动时首先定位 skywalking-agent.jar 所在的目录,然后去同级目录下的 config 文件夹读取 agent.config。这是所有配置的基准。

自定义指定配置文件-Dskywalking.config=/path/to/your.config

核心参数

配置项 说明 建议值/示例
agent.service_name 服务名称。这是你在 SkyWalking UI 上看到的应用名称。 建议使用业务含义清晰的名称,如 order-serviceuser-center。不要用默认的 Your_ApplicationName
collector.backend_service 后端地址。Agent 将数据发送到的 OAP 服务器地址。 格式为 IP:11800。 例如:192.168.1.100:11800。 注意:这里填的是 gRPC 端口(默认 11800),不是 UI 的 8080/12800 端口。
agent.namespace 命名空间。用于多环境隔离(如开发、测试、生产)。 可选。如果设置了,UI 上会按 Namespace 分组显示。
agent.sample_n_per_3_secs 采样率。控制追踪数据的收集量。 -1 表示全量采样(开发环境推荐);生产环境建议设置为数字(如 1000 表示每 1000 个请求采样 1 个),以防止数据量过大。
相关推荐
身如柳絮随风扬4 天前
链路追踪SkyWalking 架构了解
架构·skywalking
洒满阳光的午后8 天前
我做了一个“能理解业务语义”的可观测性 MCP Server:统一接入 Prometheus、OpenObserve 和 SkyWalking
人工智能·ai·prometheus·skywalking·openobserve·mcp
梵得儿SHI8 天前
SpringCloud 实战落地:可观测性建设(SkyWalking + Prometheus + Grafana)从 0 到 1 生产级部署
grafana·prometheus·springcloud·skywalking·微服务可观测性·线上问题排查
Jinkxs10 天前
SkyWalking - Spring Cloud Alibaba 全链路追踪实战
skywalking
烛之武11 天前
Skywalking服务链路追踪与Jemeter压力测试
压力测试·skywalking
鬼先生_sir11 天前
Spring Cloud 微服务监控实战:SkyWalking + Prometheus+Grafana 全栈解决方案
运维·spring cloud·grafana·prometheus·skywalking
dgvri17 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
rOuN STAT17 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
危笑ioi17 天前
helm部署skywalking链路追踪 java
java·开发语言·skywalking
MmeD UCIZ19 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking