文章目录
Apache SkyWalking 是一个开源的应用性能监控(APM)系统,专为微服务、云原生和容器化架构设计。它提供了一套完整的可观测性解决方案,主要包括分布式追踪、指标监控、服务网格遥测分析和可视化功能。
存储
在 SkyWalking 的存储选型上,Elasticsearch (ES) 7 和 BanyanDB 代表了"成熟稳定"与"原生高效"两种不同的技术路线
核心对比
| 维度 | 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部署
容器化部署
- elasticsearch:作为 SkyWalking 的后端存储(用于存储指标和追踪数据)。
- oap:SkyWalking 的后端分析处理服务(Observability Analysis Platform)。
- 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
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-service、user-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 个),以防止数据量过大。 |