SkyWalking_ES_索引说明文档
SkyWalking Elasticsearch 索引说明文档
文档说明
本文档详细说明 Apache SkyWalking 中各个 Elasticsearch 索引的用途、字段含义及数据来源。
索引命名规则:
- 时间序列索引:
{index_name}-YYYYMMDD(如segment-20260115) - 静态索引:
{index_name}(如service_traffic)
字段通用说明:
time_bucket:时间桶,所有索引都包含此字段entity_id:实体唯一标识storageOnly:标记为仅存储的字段,用于内部计算,不直接查询
索引分类
- 关系类索引 - 记录服务、实例、端点之间的调用关系
- 流量类索引 - 记录服务、实例、端点的元数据和流量信息
- 指标聚合类索引 - 存储通过 OAL 规则计算的各类指标
- Meter 类索引 - 通过 Meter API 创建的自定义指标
- 追踪类索引 - 存储链路追踪的详细数据
- 辅助类索引 - 网络地址映射、TopN 数据等
一、关系类索引
重要说明:
- ✅ Service Relation 和 Service Instance Relation 有
client_side和server_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 查询优化
-
使用索引别名
- ES 模板会创建别名指向所有物理索引
- 查询时使用别名可自动匹配所有日期的索引
-
指定时间范围
- 查询时指定具体日期范围以减少扫描索引数量
- 使用
time_bucket字段进行时间过滤
-
利用 entity_id
- entity_id 是复合主键,查询效率高
- 精确匹配时使用 term 查询
10.2 存储优化
-
配置 TTL
- 根据业务需求设置合理的数据保留期
- 不同类型索引可设置不同的 TTL
-
调整 DAY_STEP
- 低流量场景可增大 DAY_STEP 减少索引数量
- 高流量场景保持默认值 1
-
监控索引大小
- 定期检查索引大小
- 必要时调整分片策略
10.3 性能优化
-
批量写入
- 利用 BulkProcessor 批量提交数据
- 减少网络开销
-
异步处理
- 使用 DataCarrier 异步处理数据流
- 避免阻塞主流程
-
分级聚合
- 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 使用说明
-
查询特定组件的调用关系:
GET /service_relation_client_side-*/_search { "query": { "term": {"component_id": 3} } }上述查询会返回所有使用 Dubbo (ID=3) 的服务调用关系。
-
按组件类型统计:
GET /service_relation_client_side-*/_search { "size": 0, "aggs": { "by_component": { "terms": {"field": "component_id"} } } } -
组件 ID 的重要性:
- 用于识别调用链路中使用的技术栈
- 帮助生成技术架构拓扑图
- 支持按技术组件进行性能分析
- 便于定位特定技术栈的问题
文档版本:2.1
适用 SkyWalking 版本:8.7.0+
最后更新:2026-01-16

浙公网安备 33010602011771号