SkyWalking_ES_索引说明文档

SkyWalking Elasticsearch 索引说明文档

文档说明

本文档详细说明 Apache SkyWalking 中各个 Elasticsearch 索引的用途、字段含义及数据来源。

索引命名规则

  • 时间序列索引:{index_name}-YYYYMMDD(如 segment-20260115
  • 静态索引:{index_name}(如 service_traffic

字段通用说明

  • time_bucket:时间桶,所有索引都包含此字段
  • entity_id:实体唯一标识
  • storageOnly:标记为仅存储的字段,用于内部计算,不直接查询

索引分类

  1. 关系类索引 - 记录服务、实例、端点之间的调用关系
  2. 流量类索引 - 记录服务、实例、端点的元数据和流量信息
  3. 指标聚合类索引 - 存储通过 OAL 规则计算的各类指标
  4. Meter 类索引 - 通过 Meter API 创建的自定义指标
  5. 追踪类索引 - 存储链路追踪的详细数据
  6. 辅助类索引 - 网络地址映射、TopN 数据等

一、关系类索引

重要说明

  • ✅ Service Relation 和 Service Instance Relation 有 client_sideserver_side 两个索引
  • ⚠️ Endpoint Relation 只有 server_side 索引,没有 client_side

1. sw_service_relation_client_side

索引说明

  • 用途:存储服务之间的调用关系(客户端视角)
  • 数据来源:ServiceRelation 事件(detectPoint == CLIENT)
  • OAL 规则:service_relation_client_cpm, service_relation_client_call_sla, service_relation_client_resp_time
  • 索引命名service_relation_client_side-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String(512) 关系实体唯一标识 由源服务和目标服务组成
source_service_id String 源服务 ID 调用方服务
dest_service_id String 目标服务 ID 被调用方服务
component_id Integer 组件 ID 如 HTTP、gRPC、Dubbo 等,仅存储

应用场景

  • 构建服务拓扑图(调用方视角)
  • 分析服务间调用性能(包含网络延迟)
  • 定位客户端调用问题

2. sw_service_relation_server_side

索引说明

  • 用途:存储服务之间的调用关系(服务端视角)
  • 数据来源:ServiceRelation 事件(detectPoint == SERVER)
  • OAL 规则:service_relation_server_cpm, service_relation_server_call_sla, service_relation_server_resp_time
  • 索引命名service_relation_server_side-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String(512) 关系实体唯一标识 由源服务和目标服务组成
source_service_id String 源服务 ID 调用方服务
dest_service_id String 目标服务 ID 被调用方服务
component_id Integer 组件 ID 如 HTTP、gRPC、Dubbo 等,仅存储

应用场景

  • 构建服务拓扑图(被调用方视角)
  • 分析服务处理性能(不含网络延迟)
  • 定位服务端处理问题

Client Side vs Server Side 差异

  • Client Side:包含网络延迟,反映调用方体验
  • Server Side:不含网络延迟,反映服务处理能力
  • 两者对比可分析网络延迟问题

3. sw_service_instance_relation_client_side

索引说明

  • 用途:存储服务实例之间的调用关系(客户端视角)
  • 数据来源:ServiceInstanceRelation 事件(detectPoint == CLIENT)
  • OAL 规则:service_instance_relation_client_cpm, service_instance_relation_client_call_sla
  • 索引命名service_instance_relation_client_side-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String(512) 关系实体唯一标识 由源实例和目标实例组成
source_service_id String 源服务 ID 调用方所属服务
source_service_instance_id String 源服务实例 ID 调用方实例
dest_service_id String 目标服务 ID 被调用方所属服务
dest_service_instance_id String 目标服务实例 ID 被调用方实例
component_id Integer 组件 ID 如 HTTP、gRPC、Dubbo 等,仅存储

应用场景

  • 构建实例级别拓扑图
  • 分析实例间调用关系
  • 定位具体实例的调用问题

4. sw_service_instance_relation_server_side

索引说明

  • 用途:存储服务实例之间的调用关系(服务端视角)
  • 数据来源:ServiceInstanceRelation 事件(detectPoint == SERVER)
  • OAL 规则:service_instance_relation_server_cpm, service_instance_relation_server_call_sla
  • 索引命名service_instance_relation_server_side-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String(512) 关系实体唯一标识 由源实例和目标实例组成
source_service_id String 源服务 ID 调用方所属服务
source_service_instance_id String 源服务实例 ID 调用方实例
dest_service_id String 目标服务 ID 被调用方所属服务
dest_service_instance_id String 目标服务实例 ID 被调用方实例
component_id Integer 组件 ID 如 HTTP、gRPC、Dubbo 等,仅存储

应用场景

  • 构建实例级别拓扑图(服务端视角)
  • 分析实例处理性能
  • 实例级别的性能监控

5. sw_endpoint_relation_server_side

索引说明

  • 用途:存储端点(Endpoint)之间的调用关系(仅服务端视角)
  • 数据来源:EndpointRelation 事件
  • OAL 规则:endpoint_relation_cpm, endpoint_relation_resp_time, endpoint_relation_sla
  • 索引命名endpoint_relation_server_side-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合
  • 特别说明:⚠️ 端点关系只有 server_side,没有 client_side

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String(512) 关系实体唯一标识 由源端点和目标端点组成
source_endpoint String 源端点名称 调用方端点(API/接口)
dest_endpoint String 目标端点名称 被调用方端点(API/接口)
component_id Integer 组件 ID 如 HTTP、gRPC、Dubbo 等,仅存储

应用场景

  • 构建端点级别的调用关系图
  • 分析 API 之间的依赖关系
  • 端点级别的性能分析

为什么只有 Server Side

  • 端点是服务的具体 API/接口,从服务端记录更准确
  • 避免数据冗余,减少存储压力
  • 客户端可能无法准确识别目标端点

二、流量类索引

说明:流量类索引存储服务、实例、端点的元数据和流量信息,用于服务发现和列表展示。


6. sw_service_traffic

索引说明

  • 用途:存储服务的元数据和流量信息
  • 数据来源:Agent 注册服务时自动创建
  • 索引命名service_traffic(静态索引,无日期后缀)
  • 下采样:不支持(supportDownSampling = false)
  • 更新支持:不支持(supportUpdate = false)

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 记录创建时间
name String 服务名称 支持模糊查询
node_type NodeType 节点类型 Normal、Database、Cache、MQ 等
service_group String 服务分组 从服务名提取,格式:group::service

NodeType 枚举值

  • Normal:普通服务
  • Database:数据库
  • Cache:缓存服务
  • MQ:消息队列
  • Browser:浏览器端
  • User:用户端

应用场景

  • 服务发现和注册
  • 服务列表展示
  • 服务分组管理

7. sw_instance_traffic

索引说明

  • 用途:存储服务实例的元数据和心跳信息
  • 数据来源:Agent 注册实例并定期发送心跳
  • 索引命名instance_traffic(静态索引,无日期后缀)
  • 下采样:不支持
  • 更新支持:支持(supportUpdate = true)

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 实例注册时间
service_id String 所属服务 ID 关联 service_traffic
name String 实例名称 仅存储
last_ping Long 最后心跳时间戳 用于健康检查
properties JsonObject(50000) 实例属性 包含 language、ipv4、ipv4s 等

properties 常用字段

  • language:编程语言(Java、Python、Go 等)
  • ipv4:主 IP 地址
  • ipv4s:所有 IP 地址列表

应用场景

  • 实例健康检查
  • 实例列表展示
  • 实例属性查询

8. sw_endpoint_traffic

索引说明

  • 用途:存储端点(API/接口)的元数据
  • 数据来源:Agent 采集到端点调用时自动注册
  • 索引命名endpoint_traffic(静态索引,无日期后缀)
  • 下采样:不支持
  • 更新支持:不支持

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 端点注册时间
service_id String 所属服务 ID 关联 service_traffic
name String 端点名称 支持模糊查询,如 /api/users

应用场景

  • 端点发现和注册
  • 端点列表展示
  • API 清单管理

三、指标聚合类索引

说明:这些索引使用聚合函数名作为索引名前缀,存储通过 OAL 规则计算的指标数据。


9. sw_metrics-cpm

索引说明

  • 用途:存储每分钟调用次数(Calls Per Minute)指标
  • 数据来源:OAL 规则中的 .cpm() 函数
  • OAL 示例service_cpm = from(Service.*).cpm()
  • 索引命名metrics-cpm-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
value Long CPM 值 每分钟调用次数
total Long 总调用次数 仅存储,用于计算

计算公式value = total / 时间窗口分钟数

应用场景

  • service_cpm:服务级别调用量
  • endpoint_cpm:端点级别调用量
  • service_relation_client_cpm:服务关系调用量

10. sw_metrics-percent

索引说明

  • 用途:存储百分比指标(如成功率、SLA)
  • 数据来源:OAL 规则中的 .percent() 函数
  • OAL 示例service_sla = from(Service.*).percent(status == true)
  • 索引命名metrics-percent-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
percentage Integer 百分比值 0-10000,表示 0.00%-100.00%
total Long 总请求数 仅存储,用于计算
match Long 匹配条件的请求数 仅存储,用于计算

计算公式percentage = (match * 10000) / total

应用场景

  • service_sla:服务成功率
  • endpoint_sla:端点成功率
  • service_relation_client_call_sla:服务关系成功率

11. sw_metrics-longavg

索引说明

  • 用途:存储长整型平均值指标(如响应时间)
  • 数据来源:OAL 规则中的 .longAvg() 函数
  • OAL 示例service_resp_time = from(Service.latency).longAvg()
  • 索引命名metrics-longavg-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
value Long 平均值 计算结果
summation Long 总和 仅存储,用于计算
count Long 计数 仅存储,用于计算

计算公式value = summation / count

应用场景

  • service_resp_time:服务平均响应时间
  • endpoint_avg:端点平均响应时间
  • database_access_resp_time:数据库访问平均时间

12. sw_metrics-doubleavg

索引说明

  • 用途:存储双精度浮点型平均值指标
  • 数据来源:OAL 规则中的 .doubleAvg() 函数
  • 索引命名metrics-doubleavg-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
value Double 平均值 计算结果
summation Double 总和 仅存储,用于计算
count Long 计数 仅存储,用于计算

计算公式value = summation / count

应用场景:需要更高精度的平均值计算


13. sw_metrics-percentile

索引说明

  • 用途:存储百分位数指标(P50、P75、P90、P95、P99)
  • 数据来源:OAL 规则中的 .percentile() 函数
  • OAL 示例service_percentile = from(Service.latency).percentile(10)
  • 索引命名metrics-percentile-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
value DataTable 百分位值表 仅存储,包含 P50/P75/P90/P95/P99
precision Integer 精度 仅存储,用于计算
dataset DataTable 原始数据集 仅存储,用于计算

value 字段格式

{
  "0": "p50_value",
  "1": "p75_value", 
  "2": "p90_value",
  "3": "p95_value",
  "4": "p99_value"
}

应用场景

  • service_percentile:服务延迟分布
  • endpoint_percentile:端点延迟分布
  • 性能分析和 SLA 监控

14. sw_metrics-histogram

索引说明

  • 用途:存储直方图数据(延迟分布热力图)
  • 数据来源:OAL 规则中的 .histogram() 函数
  • OAL 示例all_heatmap = from(All.latency).histogram(100, 20)
  • 索引命名metrics-histogram-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
dataset DataTable 直方图数据集 仅存储

dataset 字段格式

{
  "0": 100,      // [0, 100) 区间有 100 个请求
  "100": 50,     // [100, 200) 区间有 50 个请求
  "200": 20      // [200, 300) 区间有 20 个请求
}

参数说明

  • step:每个区间的大小(如 100ms)
  • maxNumOfSteps:最大区间数(如 20)
  • 最后一个区间表示 [step * maxNumOfSteps, MAX)

应用场景

  • 生成响应时间热力图(Heatmap)
  • 可视化延迟分布

15. sw_metrics-apdex

索引说明

  • 用途:存储 Apdex(Application Performance Index)指标
  • 数据来源:OAL 规则中的 .apdex() 函数
  • OAL 示例service_apdex = from(Service.latency).apdex(name, status)
  • 索引命名metrics-apdex-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
value Integer Apdex 值 0-10000,表示 0.00-1.00
total_num Long 总请求数 仅存储,用于计算
s_num Long 满意请求数 仅存储,用于计算
t_num Long 可容忍请求数 仅存储,用于计算

计算公式value = (s_num * 10000 + t_num * 10000 / 2) / total_num

分级标准

  • Satisfied(满意):响应时间 ≤ T(阈值)
  • Tolerating(可容忍):T < 响应时间 ≤ 4T
  • Frustrated(失望):响应时间 > 4T 或请求失败

Apdex 值含义

  • 10000:所有响应都令人满意
  • 5000:所有响应都在可容忍范围
  • 0:没有令人满意的响应

应用场景

  • 衡量用户满意度
  • 性能指标综合评估

16. sw_metrics-sum

索引说明

  • 用途:存储累加和指标
  • 数据来源:OAL 规则中的 .sum() 函数
  • 索引命名metrics-sum-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
value Long 累加和值 直接累加所有输入值

应用场景

  • 累计计数器类型的指标
  • 总量统计

17. sw_metrics-rate

索引说明

  • 用途:存储速率/比率指标
  • 数据来源:OAL 规则中的 .rate() 函数
  • 索引命名metrics-rate-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String 实体 ID 服务 ID、端点 ID 等
percentage Integer 比率值 0-10000,表示 0.00%-100.00%
numerator Long 分子 满足条件的数量
denominator Long 分母 总数量

计算公式percentage = (numerator * 10000) / denominator

应用场景

  • 变化率类型的指标
  • 比率计算

四、Meter 类索引

说明:Meter 系统提供 API 方式创建自定义指标,无需编写 OAL 脚本。


18. sw_meter-avg

索引说明

  • 用途:存储通过 Meter API 创建的平均值指标
  • 数据来源:MeterSystem API - create(metricsName, "avg", scopeType, Long.class)
  • 函数:AvgFunction
  • 索引命名meter-avg-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String(512) 实体 ID 自定义实体标识
service_id String 服务 ID 用于排序查询
value Long 平均值 计算结果
summation Long 总和 仅存储,用于计算
count Long 计数 仅存储,用于计算

计算公式value = summation / count(最小值为 1)

应用场景

  • 自定义业务指标的平均值
  • 如:订单平均金额、用户平均在线时长等

19. sw_meter-avglabeled

索引说明

  • 用途:存储带标签的平均值指标
  • 数据来源:MeterSystem API - create(metricsName, "avgLabeled", scopeType, DataTable.class)
  • 函数:AvgLabeledFunction
  • 索引命名meter-avglabeled-YYYYMMDD
  • 下采样:支持分钟、小时、天级别聚合

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
entity_id String(512) 实体 ID 自定义实体标识
service_id String 服务 ID 用于排序查询
value DataTable 标签化的平均值表 仅存储
summation DataTable 标签化的总和表 仅存储,用于计算
count DataTable 标签化的计数表 仅存储,用于计算

value 字段格式

{
  "label1": 100,
  "label2": 200,
  "label3": 150
}

计算方式:对每个标签分别计算 value[label] = summation[label] / count[label]

应用场景

  • 多维度标签的平均值指标
  • 按 HTTP 状态码统计的平均响应时间
  • 按不同 API 路径统计的平均延迟
  • 按不同数据库表统计的平均查询时间

五、追踪类索引


20. sw_segment

索引说明

  • 用途:存储链路追踪的 Segment 数据(Trace 的片段)
  • 数据来源:Agent 采集的分布式追踪数据
  • 索引命名segment-YYYYMMDD
  • 特性:标记为 @SuperDataset(超大数据集)
  • 处理器:RecordStreamProcessor(非聚合数据)

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 秒级时间戳
segment_id String(150) Segment 唯一标识 主键
trace_id String(150) Trace 唯一标识 用于关联完整链路
service_id String 所属服务 ID 关联 service_traffic
service_instance_id String 所属实例 ID 关联 instance_traffic
endpoint_name String 端点名称 支持模糊查询,如 /api/users
endpoint_id String 端点 ID 关联 endpoint_traffic
start_time Long 开始时间戳 毫秒级
end_time Long 结束时间戳 毫秒级
latency Integer 延迟时间 毫秒,用于排序
is_error Integer 是否错误 0=正常,1=错误
data_binary byte[] Segment 详细数据 Base64 编码的 protobuf 数据,仅存储
version Integer 数据版本 仅存储
tags List 标签列表 如 http.method=GET
statement String 语句描述 endpoint_name + trace_id

应用场景

  • 链路追踪查询
  • Trace 详情展示
  • 性能分析和问题定位
  • 按耗时排序查询慢请求
  • 错误请求分析

查询示例

{
  "query": {
    "bool": {
      "must": [
        {"term": {"service_id": "服务ID"}},
        {"term": {"service_instance_id": "实例ID"}}
      ]
    }
  },
  "sort": [{"latency": {"order": "desc"}}]
}

六、辅助类索引


21. sw_network_address_alias

索引说明

  • 用途:存储网络地址与服务/实例的映射关系
  • 数据来源:Agent 自动识别网络地址对应的服务
  • 索引命名network_address_alias(静态索引,无日期后缀)
  • 下采样:不支持
  • 更新支持:支持(supportUpdate = true)

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 记录创建时间
address String 网络地址 IP:Port 格式,如 192.168.1.100:8080
represent_service_id String 代表的服务 ID 该地址对应的服务
represent_service_instance_id String 代表的实例 ID 该地址对应的实例
last_update_time_bucket Long 最后更新时间 用于追踪变更

应用场景

  • 将 IP 地址映射到服务名
  • 支持服务拓扑图中的地址解析
  • 缓存网络地址别名信息
  • 跨服务调用时的地址识别

22. sw_top_n_database_statement

索引说明

  • 用途:存储数据库慢查询 Top N 语句
  • 数据来源:Agent 采集的数据库访问语句
  • 索引命名top_n_database_statement-YYYYMMDD
  • 处理器:TopNStreamProcessor(自动保留最慢的 N 条)

字段说明

字段名 类型 说明 备注
time_bucket Long 时间桶 分钟级时间戳
statement String(2000) SQL 语句或数据库命令 仅存储,长度可通过环境变量配置
trace_id String 关联的 Trace ID 用于追踪完整链路
latency Long 执行延迟 毫秒,用于排序
service_id String 所属服务 ID 执行该语句的服务

支持的数据库类型

  • SQL 数据库(MySQL、PostgreSQL、Oracle 等)
  • MongoDB
  • Redis
  • Elasticsearch

应用场景

  • 数据库性能分析
  • 慢查询监控和优化
  • SQL 语句性能排行
  • 数据库访问问题定位

七、索引命名规则详解

7.1 时间序列索引(带日期后缀)

命名格式{index_name}-YYYYMMDD

适用索引

  • 所有关系类索引(service_relation、service_instance_relation、endpoint_relation)
  • 所有指标聚合类索引(metrics-*)
  • 所有 Meter 类索引(meter-*)
  • 追踪类索引(segment)
  • 辅助类索引(top_n_database_statement)

日期计算规则

下采样级别 计算公式 示例
分钟级(Minute) indexName = tableName + "-" + compressTimeBucket(timeBucket / 10000, DAY_STEP) timeBucket=202601151430 → segment-20260115
小时级(Hour) indexName = tableName + "-" + compressTimeBucket(timeBucket / 100, DAY_STEP) timeBucket=2026011514 → metrics-cpm-20260115
天级(Day) indexName = tableName + "-" + compressTimeBucket(timeBucket, DAY_STEP) timeBucket=20260115 → metrics-cpm-20260115
秒级(Second) indexName = tableName + "-" + compressTimeBucket(timeBucket / 1000000, DAY_STEP) timeBucket=20260115143045 → segment-20260115

DAY_STEP 配置

  • 默认值:1(每天一个索引)
  • 可配置为更大值以合并多天数据到一个索引(低流量场景优化)
  • 例如:DAY_STEP=7 表示每 7 天一个索引

7.2 静态索引(无日期后缀)

命名格式{index_name}

适用索引

  • service_traffic
  • instance_traffic
  • endpoint_traffic
  • network_address_alias

特点

  • 不支持下采样
  • 数据持续更新
  • 用于元数据和配置信息
  • 数据量相对较小

八、数据流转流程

┌─────────────┐
│ Agent 采集   │
└──────┬──────┘
       │
       ▼
┌─────────────────────────────────────┐
│ Source 数据                          │
│ (Service, Endpoint, Segment 等)     │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ OAL 规则处理 / Meter API            │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ MetricsStreamProcessor.in()         │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ L1 聚合 (MetricsAggregateWorker)    │
│ 周期:500ms                          │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ L2 聚合 (MetricsPersistentWorker)   │
│ 内存缓存,合并数据                   │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ PersistenceTimer 触发                │
│ 周期:10 秒(默认)                  │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ 构建批量请求                         │
│ prepareBatchInsert/Update           │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ 生成索引名称                         │
│ TimeSeriesUtils.writeIndexName      │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ 批量写入 ES                          │
│ BatchProcessEsDAO.flush             │
└──────┬──────────────────────────────┘
       │
       ▼
┌─────────────────────────────────────┐
│ Elasticsearch 索引                   │
└─────────────────────────────────────┘

九、关键配置参数

9.1 持久化配置

参数名 默认值 说明
persistentPeriod 10 秒 持久化周期
prepareThreads CPU 核心数 准备阶段线程数
metricsDataTTL 3 天 指标数据保留天数

9.2 索引配置

参数名 默认值 说明
dayStep 1 索引日期分组步长
superDatasetDayStep 1 超大数据集索引步长

9.3 批量写入配置

参数名 默认值 说明
bulkActions 5000 批量操作数量
flushInterval 15 秒 刷新间隔
concurrentRequests 2 并发请求数

十、使用建议

10.1 查询优化

  1. 使用索引别名

    • ES 模板会创建别名指向所有物理索引
    • 查询时使用别名可自动匹配所有日期的索引
  2. 指定时间范围

    • 查询时指定具体日期范围以减少扫描索引数量
    • 使用 time_bucket 字段进行时间过滤
  3. 利用 entity_id

    • entity_id 是复合主键,查询效率高
    • 精确匹配时使用 term 查询

10.2 存储优化

  1. 配置 TTL

    • 根据业务需求设置合理的数据保留期
    • 不同类型索引可设置不同的 TTL
  2. 调整 DAY_STEP

    • 低流量场景可增大 DAY_STEP 减少索引数量
    • 高流量场景保持默认值 1
  3. 监控索引大小

    • 定期检查索引大小
    • 必要时调整分片策略

10.3 性能优化

  1. 批量写入

    • 利用 BulkProcessor 批量提交数据
    • 减少网络开销
  2. 异步处理

    • 使用 DataCarrier 异步处理数据流
    • 避免阻塞主流程
  3. 分级聚合

    • L1 和 L2 两级聚合减少数据库压力
    • 内存中完成大部分聚合计算

十一、常见查询场景

11.1 查询服务的所有端点

GET /endpoint_traffic/_search
{
  "query": {
    "term": {"service_id": "服务ID"}
  }
}

11.2 查询服务的调用量趋势

GET /metrics-cpm-*/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {"entity_id": "服务ID"}},
        {"range": {"time_bucket": {"gte": "起始时间", "lte": "结束时间"}}}
      ]
    }
  },
  "sort": [{"time_bucket": "asc"}]
}

11.3 查询慢请求 Trace

GET /segment-*/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {"service_id": "服务ID"}},
        {"range": {"latency": {"gte": 1000}}}
      ]
    }
  },
  "sort": [{"latency": {"order": "desc"}}],
  "size": 100
}

11.4 查询服务拓扑关系

GET /service_relation_server_side-*/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {"source_service_id": "服务ID"}},
        {"term": {"dest_service_id": "服务ID"}}
      ]
    }
  },
  "aggs": {
    "relations": {
      "terms": {"field": "entity_id"}
    }
  }
}

附录:相关代码位置

功能 文件路径
指标定义 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/
OAL 规则 oap-server/server-bootstrap/src/main/resources/oal/core.oal
数据流处理 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/
索引名生成 oap-server/server-storage-plugin/storage-elasticsearch-plugin/.../TimeSeriesUtils.java
ES 存储实现 oap-server/server-storage-plugin/storage-elasticsearch-plugin/.../MetricsEsDAO.java
批量写入 oap-server/server-storage-plugin/storage-elasticsearch-plugin/.../BatchProcessEsDAO.java
持久化定时器 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/PersistenceTimer.java

文档版本:2.0
适用 SkyWalking 版本:8.7.0+
最后更新:2026-01-16

十二、Component ID 完整列表

说明:component_id 用于标识调用关系中使用的技术组件或框架。以下是所有支持的组件及其 ID。

12.1 Java 组件 (ID: 1-114)

Web 服务器 / 容器

ID 组件名称 说明
1 Tomcat Apache Tomcat 服务器
10 Resin Resin 应用服务器
19 JettyServer Jetty 服务器
84 Undertow Undertow 服务器

HTTP 客户端

ID 组件名称 说明
2 HttpClient Apache HttpClient
11 Feign Spring Cloud Feign
12 OKHttp OkHttp 客户端
13 SpringRestTemplate Spring RestTemplate
18 JettyClient Jetty 客户端
26 httpasyncclient Apache HttpAsyncClient
66 JdkHttp JDK 内置 HTTP 客户端
102 AsyncHttpClient Async HTTP Client

Web 框架

ID 组件名称 说明
14 SpringMVC Spring MVC 框架
15 Struts2 Struts2 框架
16 NutzMVC Nutz MVC 框架
62 RESTEasy JBoss RESTEasy
67 spring-webflux Spring WebFlux
68 Play Play Framework
71 Light4J Light-4j 框架
79 Armeria Armeria 框架
92 GraphQL GraphQL
93 spring-annotation Spring 注解
105 Apache-CXF Apache CXF

RPC 框架

ID 组件名称 说明
3 Dubbo Apache Dubbo
8 Motan 新浪微博 Motan
23 GRPC gRPC
28 ServiceComb Apache ServiceComb
43 SOFARPC 蚂蚁金服 SOFARPC
82 AvroServer Avro 服务端
83 AvroClient Avro 客户端
85 Finagle Twitter Finagle
91 brpc-java 百度 bRPC Java
100 thrift-server Thrift 服务端
101 thrift-client Thrift 客户端
107 JsonRpc JSON-RPC

数据库驱动

ID 组件名称 说明
4 H2 H2 数据库
5 Mysql MySQL 数据库
6 ORACLE Oracle 数据库
22 PostgreSQL PostgreSQL 数据库
31 SQLite SQLite 数据库
32 h2-jdbc-driver H2 JDBC 驱动
33 mysql-connector-java MySQL JDBC 驱动
34 ojdbc Oracle JDBC 驱动
37 postgresql-jdbc-driver PostgreSQL JDBC 驱动
86 Mariadb MariaDB 数据库
87 mariadb-jdbc MariaDB JDBC 驱动
104 mssql-jdbc-driver SQL Server JDBC 驱动

NoSQL 数据库

ID 组件名称 说明
7 Redis Redis 缓存
9 MongoDB MongoDB 数据库
20 Memcached Memcached 缓存
30 Jedis Redis Java 客户端 Jedis
35 Spymemcached Memcached 客户端
36 Xmemcached Memcached 客户端
42 mongodb-driver MongoDB Java 驱动
56 Redisson Redis 客户端 Redisson
57 Lettuce Redis 客户端 Lettuce
69 cassandra-java-driver Cassandra Java 驱动
70 Cassandra Cassandra 数据库
75 Ehcache Ehcache 缓存
89 InfluxDB InfluxDB 时序数据库
90 influxdb-java InfluxDB Java 客户端
94 HBase Apache HBase
112 Neo4j Neo4j 图数据库
114 GuavaCache Guava Cache

消息队列

ID 组件名称 说明
25 RocketMQ Apache RocketMQ
27 Kafka Apache Kafka
38 rocketMQ-producer RocketMQ 生产者
39 rocketMQ-consumer RocketMQ 消费者
40 kafka-producer Kafka 生产者
41 kafka-consumer Kafka 消费者
44 ActiveMQ Apache ActiveMQ
45 activemq-producer ActiveMQ 生产者
46 activemq-consumer ActiveMQ 消费者
51 RabbitMQ RabbitMQ
52 rabbitmq-producer RabbitMQ 生产者
53 rabbitmq-consumer RabbitMQ 消费者
72 Pulsar Apache Pulsar
73 pulsar-producer Pulsar 生产者
74 pulsar-consumer Pulsar 消费者
95 spring-kafka-consumer Spring Kafka 消费者

搜索引擎

ID 组件名称 说明
47 Elasticsearch Elasticsearch
48 transport-client ES Transport 客户端
63 SolrJ Solr Java 客户端
64 Solr Apache Solr
77 rest-high-level-client ES REST 高级客户端

中间件 / 工具

ID 组件名称 说明
21 ShardingJDBC ShardingJDBC
24 ElasticJob ElasticJob 分布式调度
29 Hystrix Netflix Hystrix 熔断器
54 Canal 阿里 Canal
55 Gson Google Gson
58 Zookeeper Apache Zookeeper
59 Vertx Eclipse Vert.x
60 ShardingSphere Apache ShardingSphere
61 spring-cloud-gateway Spring Cloud Gateway
65 SpringAsync Spring 异步
76 SocketIO Socket.IO
78 spring-tx Spring 事务
80 JdkThreading JDK 线程
81 KotlinCoroutine Kotlin 协程
88 quasar Quasar 纤程
96 SpringScheduled Spring 定时任务
97 quartz-scheduler Quartz 调度器
98 xxl-job XXL-JOB 分布式调度
99 spring-webflux-webclient Spring WebClient
103 dbcp Apache DBCP 连接池
106 dolphinscheduler Apache DolphinScheduler
108 seata Seata 分布式事务
109 MyBatis MyBatis ORM 框架
113 Sentinel 阿里 Sentinel 流控

12.2 .NET / C# 组件 (ID: 3000-3999)

ID 组件名称 说明
3001 AspNetCore ASP.NET Core
3002 EntityFrameworkCore Entity Framework Core
3003 SqlClient SQL Server 客户端
3004 CAP CAP 分布式事务
3005 StackExchange.Redis Redis 客户端
3006 SqlServer SQL Server
3007 Npgsql PostgreSQL 客户端
3008 MySqlConnector MySQL 连接器
3009 EntityFrameworkCore.InMemory EF Core 内存数据库
3010 EntityFrameworkCore.SqlServer EF Core SQL Server
3011 EntityFrameworkCore.Sqlite EF Core SQLite
3012 Pomelo.EntityFrameworkCore.MySql EF Core MySQL
3013 Npgsql.EntityFrameworkCore.PostgreSQL EF Core PostgreSQL
3014 InMemoryDatabase 内存数据库
3015 AspNet ASP.NET
3016 SmartSql SmartSql ORM

12.3 Node.js 组件 (ID: 4000-4999)

ID 组件名称 说明
4001 HttpServer HTTP 服务器
4002 Express Express 框架
4003 Egg Egg.js 框架
4004 Koa Koa 框架
4005 Axios Axios HTTP 客户端
4006 Mongoose Mongoose MongoDB ODM

12.4 Golang 组件 (ID: 5000-5999)

ID 组件名称 说明
5001 ServiceCombMesher ServiceComb Mesher
5002 ServiceCombServiceCenter ServiceComb 服务中心
5003 MOSN 蚂蚁 MOSN
5004 GoHttpServer Go HTTP 服务器
5005 GoHttpClient Go HTTP 客户端
5006 Gin Gin 框架
5007 Gear Gear 框架
5008 GoMicroClient Go-Micro 客户端
5009 GoMicroServer Go-Micro 服务端

12.5 Lua 组件 (ID: 6000-6999)

ID 组件名称 说明
6000 Nginx Nginx
6001 Kong Kong API 网关
6002 APISIX Apache APISIX

12.6 Python 组件 (ID: 7000-7999)

ID 组件名称 说明
7000 Python Python 运行时
7001 Flask Flask 框架
7002 Requests Requests HTTP 库
7003 PyMysql PyMySQL 驱动
7004 Django Django 框架
7005 Tornado Tornado 框架
7006 Urllib3 Urllib3 HTTP 库
7007 Sanic Sanic 框架
7008 AioHttp AioHttp 异步 HTTP
7009 Pyramid Pyramid 框架
7010 Psychopg PostgreSQL 驱动
7011 Celery Celery 分布式任务队列

12.7 PHP 组件 (ID: 8000-8999)

ID 组件名称 说明
8001 PHP PHP 运行时
8002 cURL cURL 扩展
8003 PDO PDO 数据库抽象层
8004 Mysqli MySQLi 扩展
8005 Yar Yar RPC 框架
8006 Predis Predis Redis 客户端

12.8 C++ 组件 (ID: 9000-9999)

ID 组件名称 说明
9000 EnvoyProxy Envoy 代理

12.9 JavaScript 组件 (ID: 10000-10999)

ID 组件名称 说明
10000 JavaScript JavaScript 运行时
10001 ajax AJAX 请求

12.10 通用组件

ID 组件名称 说明
0 Unknown 未知组件
49 http 通用 HTTP
50 rpc 通用 RPC
110 tcp TCP 协议
111 AzureHttpTrigger Azure HTTP 触发器(多语言)

12.11 Component-Server 映射

某些客户端组件会映射到对应的服务端组件,用于拓扑图展示:

客户端组件 映射到服务端
Jedis, Redisson, Lettuce, StackExchange.Redis, Predis Redis
mongodb-driver, Mongoose MongoDB
mysql-connector-java, MySqlConnector, PyMysql, Mysqli Mysql
postgresql-jdbc-driver, Npgsql, Psychopg PostgreSQL
h2-jdbc-driver H2
mssql-jdbc-driver, SqlClient SqlServer
rocketMQ-producer, rocketMQ-consumer RocketMQ
kafka-producer, kafka-consumer, spring-kafka-consumer Kafka
activemq-producer, activemq-consumer ActiveMQ
rabbitmq-producer, rabbitmq-consumer RabbitMQ
pulsar-producer, pulsar-consumer Pulsar
transport-client, rest-high-level-client Elasticsearch
SolrJ Solr
cassandra-java-driver Cassandra
Xmemcached, Spymemcached Memcached
influxdb-java InfluxDB
mariadb-jdbc Mariadb

12.12 使用说明

  1. 查询特定组件的调用关系

    GET /service_relation_client_side-*/_search
    {
      "query": {
        "term": {"component_id": 3}
      }
    }
    

    上述查询会返回所有使用 Dubbo (ID=3) 的服务调用关系。

  2. 按组件类型统计

    GET /service_relation_client_side-*/_search
    {
      "size": 0,
      "aggs": {
        "by_component": {
          "terms": {"field": "component_id"}
        }
      }
    }
    
  3. 组件 ID 的重要性

    • 用于识别调用链路中使用的技术栈
    • 帮助生成技术架构拓扑图
    • 支持按技术组件进行性能分析
    • 便于定位特定技术栈的问题

文档版本:2.1
适用 SkyWalking 版本:8.7.0+
最后更新:2026-01-16

posted @ 2026-01-16 14:34  A1exLee  阅读(0)  评论(0)    收藏  举报