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 个),以防止数据量过大。
相关推荐
Jinkxs4 天前
SkyWalking - Python 应用追踪:基于 skywalking-python 的埋点
开发语言·python·skywalking
xiaohe075 天前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
代码的奴隶(艾伦·耶格尔)6 天前
SkyWalking链路追踪安装和使用
skywalking
Darkdreams9 天前
分布式监控Skywalking安装及使用教程(保姆级教程)
分布式·skywalking
zhglhy14 天前
Apache SkyWalking分布式链路实现
分布式·apache·skywalking
飞火流星020271 个月前
SkyWalking异步日志采集数据压缩从头到尾实现及踩坑笔记
skywalking·skywalking日志采集·skywalking日志压缩·macos上验证sw日志压缩·sw异步采集日志实现数据压缩
叱咤少帅(少帅)2 个月前
Skywalking v10.x 部署
skywalking
EQylwUYz2 个月前
基于DDPG算法优化四旋翼飞行器PD控制:从理论到Matlab实现
skywalking
dfyx9992 个月前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking