SkyWalking 生产部署的关键环节 —— 存储与配置管理。

SkyWalking 生产部署的关键环节 —— 存储与配置管理

默认的 H2 存储仅用于测试,生产环境必须切换到 Elasticsearch,以支持高并发、高性能的链路查询和指标聚合。

下面,我为你提供一份 完整、清晰、可落地的指南,涵盖:

  1. ✅ 如何将 SkyWalking OAP 的存储从 H2 切换为 Elasticsearch
  2. ✅ 如何配置 application.yml 连接 ES 集群
  3. ✅ 生产环境关键配置优化(采样率、数据过期、性能调优)

🧩 一、为什么不能用 H2?为什么要换 Elasticsearch?

对比项H2(默认)Elasticsearch(生产推荐)
性能慢,不支持高并发查询高性能,支持海量数据检索
可靠性单机文件存储,易损坏分布式、高可用、可扩展
功能不支持日志、拓扑复杂时卡顿支持 Logs、Metrics、Traces 全家桶
数据保留手动管理支持 TTL 自动过期
适用场景本地测试、Demo生产环境

✅ 结论:H2 仅用于学习,生产必须用 Elasticsearch


🔁 二、切换存储:H2 → Elasticsearch

步骤 1:准备 Elasticsearch 集群

确保你有一个可用的 Elasticsearch 7.x 或 8.x 集群(SkyWalking 9.x 推荐 ES 7.17.3+)

# 示例:使用 Docker 启动单节点 ES(测试用)
docker run -d \
  --name elasticsearch \
  -p 9200:9200 \
  -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=false" \
  docker.elastic.co/elasticsearch/elasticsearch:7.17.3

访问:http://localhost:9200 应返回 JSON 信息。


步骤 2:修改 OAP 配置文件 application.yml

路径:apache-skywalking-apm-bin/config/application.yml

修改前:默认使用 H2
storage:
  selector: ${SW_STORAGE:h2}
  h2:
    driver: org.h2.jdbcx.JdbcDataSource
    url: jdbc:h2:~/oap-db
    userName: sa
修改后:切换为 Elasticsearch
storage:
  selector: ${SW_STORAGE:elasticsearch}  # 关键:切换为 elasticsearch
  elasticsearch:
    nameSpace: ${SW_NAMESPACE:skywalking}           # 索引前缀,如 skywalking_trace_segment
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}  # ES 集群地址
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:http}   # 协议:http 或 https
    user: ${SW_ES_USER:}                            # 如果启用了 x-pack 安全认证
    password: ${SW_ES_PASSWORD:}
    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:4}        # 索引分片数
    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1}    # 副本数
    # TLS / HTTPS 配置(可选)
    # trustStorePath: ${SW_SW_STORAGE_ES_TLS_JKS_PATH:""}
    # trustStorePass: ${SW_SW_STORAGE_ES_TLS_JKS_PASS:""}

    # 自定义索引设置(可选)
    # bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000}  # 每批写入文档数
    # flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # 刷新间隔(秒)

    # 数据过期策略(关键!)
    recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:90}            # 链路数据保留天数(默认 90)
    otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRICS_DATA_TTL:90}   # 其他指标
    monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRICS_DATA_TTL:180}  # 月聚合指标

步骤 3:设置环境变量(推荐方式)

你也可以通过环境变量覆盖配置,便于容器化部署:

export SW_STORAGE=elasticsearch
export SW_NAMESPACE=prod-skywalking
export SW_STORAGE_ES_CLUSTER_NODES=es-node1:9200,es-node2:9200
export SW_STORAGE_ES_HTTP_PROTOCOL=http
export SW_STORAGE_ES_INDEX_SHARDS_NUMBER=5
export SW_STORAGE_ES_INDEX_REPLICAS_NUMBER=1
export SW_STORAGE_ES_RECORD_DATA_TTL=30        # 链路数据只保留 30 天
export SW_STORAGE_ES_OTHER_METRICS_DATA_TTL=45

✅ 推荐:在 docker-compose.yml 或 Kubernetes 中使用环境变量配置。


步骤 4:启动 OAP Server

cd apache-skywalking-apm-bin
bin/oap.sh start

查看日志:

tail -f logs/skywalking-oap.log

✅ 成功标志:

[StartTimeBasedIndexPolicy] Index policy started. Data TTL: 30 days
[IndexController] Indices created: skywalking_trace_segment-20250405

表示已成功连接 ES 并创建索引。


⚙️ 三、基础配置优化(生产建议)

1. 📉 采样率控制(降低 Agent 开销)

agent/config/agent.config 中设置:

# 每3秒采集1个 trace(约 0.33 QPS),适合生产
agent.sample_n_per_3_secs=1

# 或关闭采样(调试用)
# agent.sample_n_per_3_secs=-1

✅ 生产建议:高 QPS 服务设为 1,低流量服务可设为 -1(全量)


2. 🗑️ 数据过期时间(TTL)

application.yml 中配置:

elasticsearch:
  recordDataTTL: 30          # 调用链数据保留 30 天
  otherMetricsDataTTL: 45    # 指标数据保留 45 天
  monthMetricsDataTTL: 180   # 月聚合数据保留 180 天

✅ 建议根据磁盘容量和合规要求调整。


3. 🧱 索引分片与副本(ES 性能调优)

indexShardsNumber: 5      # 根据数据量调整,单 shard 建议 < 50GB
indexReplicasNumber: 1    # 副本提高可用性

🔍 分片建议:

  • 小集群:4~5
  • 大集群:10~20(需评估 ES 节点数)

4. 🚀 批量写入优化(提升 OAP 写入性能)

bulkActions: 1000         # 每批写入 1000 条文档
flushInterval: 10         # 每 10 秒强制刷新
concurrentRequests: 2     # 并发写入请求

5. 🔐 安全配置(启用 HTTPS + 认证)

protocol: https
user: skywalking
password: mysecretpassword
trustStorePath: /path/to/truststore.jks
trustStorePass: changeit

适用于启用了 x-pack security 的 ES 集群。


📦 四、验证配置是否生效

1. 查看 ES 中的索引

curl http://localhost:9200/_cat/indices/skywalking*?v

应看到类似:

health status index                          uuid                   pri rep docs.count
green  open   skywalking_trace_segment-20250405 abc123                 4   1     12000
green  open   skywalking_service_relation-202504  def456                 4   1       300

2. 查看 SkyWalking UI

启动 UI 后访问:http://localhost:8080

  • 能看到服务、拓扑、链路 → 说明 OAP 写入成功
  • 查看日志无 ElasticsearchException 错误

✅ 五、总结:存储切换 checklist

步骤操作
1️⃣ 准备 ES 集群确保网络可达,版本兼容(7.x / 8.x)
2️⃣ 修改 application.ymlselector: elasticsearch + 配置集群地址
3️⃣ 设置 TTL根据业务需求配置数据保留时间
4️⃣ 调整分片避免单 shard 过大
5️⃣ 启动 OAP检查日志是否成功连接 ES
6️⃣ 验证数据UI 能看到服务和链路

🎁 附件:Docker Compose 示例片段

version: '3.8'
services:
  oap:
    image: apache/skywalking-oap-server:9.7.0
    environment:
      - SW_STORAGE=elasticsearch
      - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
      - SW_STORAGE_ES_RECORD_DATA_TTL=30
      - SW_STORAGE_ES_INDEX_SHARDS_NUMBER=5
    depends_on:
      - elasticsearch
    ports:
      - "12800:12800"
      - "11800:11800"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值