这篇文章讲述 Skywalking 的存储模型。
概述
在 Skywalking 中主要存储有四种类型的数据:
- metric: 时序数据,该数据的特点是跟时间强相关,一般有四个元素构成:1) 名称;2)时间戳;3)数值;4)标签(tag),表示对指标的属性;
- trace: 调用链数据;
- log: 日志类数据,如项目中 logback 等框架输出的日志;
- event: 事件类型,如服务启动。
其界面如下所示:
1. Metric
2. Trace
3. Log
4. Event
Service-Instance-Endpoint 概念
在 Skywalking 中,有三个比较重要的概念:1)Service; 2) Instance; 3) Endpoint, 在 Metric, Trace, Log 数据中都会关联这些属性,从而方便统计和查询:
- Service: 代表一个可以提供服务能力的实体,可对应微服务体系中的一个服务;
- Instance: 代表一个服务实例进程,一个 Service 可以运行多个 Instance;
- Endpoint: 代表一个请求接口,一个服务中可以包含多个 Endpoint.
工程结构
假定有如下的服务,其中 NacosProviderApp
是服务提供方,提供了一个 /hello/{string}
endpoint, NacosConsumerApp
是服务消费方,通过浏览器访问。
Service-Instance-Endpoint 索引
项目接入 Skywalking 中,会使用相应的索引存储这些信息。
索引名称 | 描述 |
---|---|
{namespace}_service_traffic-yyyyMMdd | 服务信息 |
{namespace}_instance_traffic-yyyyMMdd | 服务实例信息 |
{namespace}_endpoint_traffic-yyyyMMdd | Endpoint 信息 |
{namespace}_service_relation_server_side-yyyyMMdd | 服务之间的关联关系 |
说明:
- 假定
namespace
为 my-elasticsearch; - 每一份表会根据业务情况按天生成索引。
Service 索引
1. Mapping
通过命令 GET my-elasticsearch_service_traffic-20220701/_mapping
查看索引结构。
1 | { |
2. 索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
name | keyword | 服务名称 |
node_type | integer | |
service_group | keyword | 服务分组 |
time_bucket | long | 时间桶 |
3. 数据
通过命令 GET my-elasticsearch_service_traffic-20220701/_search
查看数据。
1 | { |
_id | name | node_type | service_group | time_bucket |
---|---|---|---|---|
TmFjb3NQcm92aWRlckFwcA==.1 | NacosProviderApp | 0 | null | |
TmFjb3NDb25zdW1lckFwcA==.1 | NacosConsumerApp | 0 | null |
Instance 索引
1. Mapping
通过命令 GET my-elasticsearch_instance_traffic-20220701/_mapping
查看索引结构。
1 | { |
2. 索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
last_ping | long | 最近一次 ping 的时间 |
name | keyword | “index” : false |
properties | text | 属性字段,不索引,”index” : false |
service_id | keyword | |
time_bucket | long | 时间桶 |
3. 数据
通过命令 GET my-elasticsearch_instance_traffic-20220701/_search
查看数据。
1 | { |
_id | last_ping | name | service_id | properties | time_bucket |
---|---|---|---|---|---|
Tm… | 202207021756 | {..}@192.168.68.62 | TmFjb3NDb25zdW1lckFwcA==.1 | … | 202207011826 |
Tm… | 202207021757 | {...}@192.168.68.62 | TmFjb3NQcm92aWRlckFwcA==.1 | … | 202207011827 |
说明:
- 通过
last_ping
字段进行服务的保活; - 通过
service_id
关联服务索引; time_bucket
字段记录了服务启动的时间;service_id
标识了一个服务实例,格式为:{随机字串}@hostname(ip).
Endpoint 索引
1. Mapping
通过命令 GET my-elasticsearch_endpoint_traffic-20220626/_mapping
查看索引结构。
1 | { |
2. 索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
name | keyword | 将内容 copy_to name_match字段,进行分词索引 |
name_match | text | 进行分词索引 |
service_id | keyword | 关联到服务索引 |
time_bucket | long | 时间桶 |
3. 数据
通过命令 GET my-elasticsearch_endpoint_traffic-20220626/_search
查看数据。
1 | { |
_id | name | service_id | time_bucket |
---|---|---|---|
Tm… | {GET}/echo/{str} | TmFjb3NDb25zdW1lckFwcA==.1 | 202206261908 |
Tm… | {GET}/services/hello/{str} | TmFjb3NQcm92aWRlckFwcA==.1 | 202206261908 |
服务关系索引
1. Mapping
通过命令 GET my-elasticsearch_service_relation_server_side-20220627/_mapping
查看索引结构。
1 | { |
2. 索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
component_id | integer | |
source_service_id | keyword | 源服务 id |
dest_service_id | keyword | 目标服务 id |
entity_id | keyword | |
time_bucket | long | 时间桶 |
3. 数据
通过命令 GET my-elasticsearch_service_relation_server_side-20220627/_search
查看数据。
1 | { |
_id | component_id | source_service_id | dest_service_id | entity_id | time_bucket |
---|---|---|---|---|---|
202.. | 14 | TmFjb3NDb25zdW1lckFwcA==.1 | TmFjb3NQcm92aWRlckFwcA==.1 | Tm… | 202206271817 |
202.. | 14 | VXNlcg==.0 | TmFjb3NDb25zdW1lckFwcA==.1 | VX… | 202206271817 |
说明:
通过 source_service_id
和 dest_service_id
两个字段,可以建立起服务之间的调用关系,从而得到服务之间的拓扑图。根据上面的关系,可以得出拓扑图为:VXNlcg==.0(user) --> TmFjb3NDb25zdW1lckFwcA==.1(NacosConsumerApp) --> TmFjb3NQcm92aWRlckFwcA==.1(NacosProviderApp)
.
Metric
Skywalking 可以存储以下类别的 Metric 数据:APM, Database, Event, Istio, Istio Data Plane, K8s, SelfObservability, VM, Web Browser. 项目中对接 Skywalking 之后,便可采集 APM 的数据。在本文中,我们分析 APM metric 指标,下图展示了 APM 中包含的所有指标。
统计维度
APM metric 指标可以从四个不同的维度进行统计,分别是 Global, Service, Instance, Endpoint. 其含义如下:Global 是从全局整体的维度统计数据,其它维度参考上文的内容。
指标 | 索引 | 描述 |
---|---|---|
all_percentile | {namespace}_metrics-percentile-yyyyMMdd | 服务健康程度 |
service_apdex | {namespace}_metrics-apdex-yyyyMMdd | 服务健康程度 |
service_resp_time | {namespace}_metrics-longavg-yyyyMMdd | 服务平均响应时间 |
service_sla | {namespace}_metrics-percent-yyyyMMdd | 服务请求成功率 |
service_cpm | {namespace}_metrics-cpm-yyyyMMdd | 服务每分钟请求数 |
service_percentile | {namespace}_metrics-percentile-yyyyMMdd | 百分比响应延时 |
service_instance_cpm | {namespace}_metrics-cpm-yyyyMMdd | 服务实例每分钟请求数 |
service_instance_resp_time | {namespace}_metrics-longavg-yyyyMMdd | 每个服务实例的最大延时 |
service_instance_sla | {namespace}_metrics-percent-yyyyMMdd | 每个服务实例的请求成功率 |
instance_jvm_cpu | {namespace}_metrics-doubleavg-yyyyMMdd | jvm占用CPU的百分比 |
instance_jvm_memory_heap | {namespace}_metrics-longavg-yyyyMMdd | JVM内存占用大小,单位m |
instance_jvm_young_gc_time | {namespace}_metrics-sum-yyyyMMdd | JVM垃圾回收时间 |
instance_jvm_thread_live_count | {namespace}_metrics-longavg-yyyyMMdd | JVM线程数量 |
instance_jvm_thread_runnable_state_thread_count | {namespace}_metrics-longavg-yyyyMMdd | JVM不同状态线程数量 |
instance_jvm_class_loaded_class_count | {namespace}_metrics-longavg-yyyyMMdd | JVM对象的数量 |
endpoint_cpm | {namespace}_metrics-cpm-yyyyMMdd | 每个端点的每分钟请求数 |
endpoint_avg | {namespace}_metrics-longavg-yyyyMMdd | 每个端点的最慢请求时间,单位ms |
endpoint_sla | {namespace}_metrics-percent-yyyyMMdd | 每个端点的请求成功率 |
endpoint_percentile | {namespace}_metrics-percentile-yyyyMMdd | 当前端点每个时间段的响应时间占比 |
下面以 endpoint_avg
, service_resp_time
,endpoint_percentile
为例,分析其存储模型。
endpoint_avg: 请求响应的平均时间
1. Mapping
通过命令 GET my-elasticsearch_metrics-longavg-20220702/_mapping
查看索引结构。
1 | { |
2. 索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
count | long | 数量 |
entity_id | keyword | 根据 metric_table 值不同,代表不同的含义,在这里,是指 endpont Id 值 |
metric_table | keyword | 指标名称 |
service_id | keyword | service Id |
summation | long | 总和 |
value | long | 平均值 |
time_bucket | long | 时间桶, 这里是S, 如 202207021443 |
说明:
- metrics-longavg 索引了值为
long
类型的指标; - metric_table 字段存储了指标的名称;
- entity_id 字段,根据 metric_table 值不同,代表不同的含义,在这里,是指 endpont Id 值;
- service_id 字段存储了 service 的 id;
- endpoint_avg 指标记录了 endpoint 每秒请求的数量、平均值及总和。
3. 数据
通过以下命令查看数据。
1 | POST /my-elasticsearch_metrics-longavg-20220702/_search |
结果如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 9.878767,
"hits" : [
{
"_index" : "my-elasticsearch_metrics-longavg-20220702",
"_type" : "_doc",
"_id" : "endpoint_avg_202207021443_TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0=",
"_score" : 9.878767,
"_source" : {
"metric_table" : "endpoint_avg",
"service_id" : "TmFjb3NQcm92aWRlckFwcA==.1",
"count" : 1,
"time_bucket" : 202207021443,
"entity_id" : "TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0=",
"value" : 468,
"summation" : 468
}
},
{
"_index" : "my-elasticsearch_metrics-longavg-20220702",
"_type" : "_doc",
"_id" : "endpoint_avg_202207021443_TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ==",
"_score" : 9.878767,
"_source" : {
"metric_table" : "endpoint_avg",
"service_id" : "TmFjb3NDb25zdW1lckFwcA==.1",
"count" : 1,
"time_bucket" : 202207021443,
"entity_id" : "TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ==",
"value" : 514,
"summation" : 514
}
},
{
"_index" : "my-elasticsearch_metrics-longavg-20220702",
"_type" : "_doc",
"_id" : "endpoint_avg_202207021444_TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0=",
"_score" : 9.878767,
"_source" : {
"metric_table" : "endpoint_avg",
"service_id" : "TmFjb3NQcm92aWRlckFwcA==.1",
"count" : 8,
"time_bucket" : 202207021444,
"entity_id" : "TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0=",
"value" : 518,
"summation" : 4145
}
},
{
"_index" : "my-elasticsearch_metrics-longavg-20220702",
"_type" : "_doc",
"_id" : "endpoint_avg_202207021444_TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ==",
"_score" : 9.878767,
"_source" : {
"metric_table" : "endpoint_avg",
"service_id" : "TmFjb3NDb25zdW1lckFwcA==.1",
"count" : 8,
"time_bucket" : 202207021444,
"entity_id" : "TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ==",
"value" : 521,
"summation" : 4171
}
}
]
}
}
_id | metric_table | service_id | entity_id | count | summation | value | time_bucket |
---|---|---|---|---|---|---|---|
endpoint… | endpoint_avg | TmFjb3NQcm92aWRlckFwcA==.1 | TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0= | 1 | 468 | 468 | 202207021443 |
endpoint… | endpoint_avg | TmFjb3NDb25zdW1lckFwcA==.1 | TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ== | 1 | 4145 | 514 | 202207021443 |
endpoint… | endpoint_avg | TmFjb3NQcm92aWRlckFwcA==.1 | TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0= | 8 | 4145 | 518 | 202207021444 |
endpoint… | endpoint_avg | TmFjb3NDb25zdW1lckFwcA==.1 | TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ== | 8 | 4171 | 521 | 202207021444 |
第一行表示在 202207021443
S, NacosProviderApp
服务的 {GET}/services/hello/{str}
endpint 请求了一次,平均值为 468
ms;
第一行表示在 202207021443
S, NacosConsumerApp
服务的 {GET}/echo/{str}
endpint 请求了一次,平均值为 514
ms;
service_resp_time: 服务平均响应时间
1. Mapping
Mapping 见上文;
2. 索引结构
索引结构见上文。
说明:
- entity_id 字段在这里代表了 service id.
3. 数据
通过以下命令查看数据。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15POST /my-elasticsearch_metrics-longavg-20220702/_search
{
"query": {
"bool": {
"must": [{
"term": {
"metric_table": {
"value": "service_resp_time",
"boost": 1.0
}
}
}]
}
}
}
结果如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 9.861144,
"hits" : [
{
"_index" : "my-elasticsearch_metrics-longavg-20220702",
"_type" : "_doc",
"_id" : "service_resp_time_202207021443_TmFjb3NDb25zdW1lckFwcA==.1",
"_score" : 9.861144,
"_source" : {
"metric_table" : "service_resp_time",
"count" : 1,
"time_bucket" : 202207021443,
"entity_id" : "TmFjb3NDb25zdW1lckFwcA==.1",
"value" : 514,
"summation" : 514
}
},
{
"_index" : "my-elasticsearch_metrics-longavg-20220702",
"_type" : "_doc",
"_id" : "service_resp_time_202207021443_TmFjb3NQcm92aWRlckFwcA==.1",
"_score" : 9.861144,
"_source" : {
"metric_table" : "service_resp_time",
"count" : 1,
"time_bucket" : 202207021443,
"entity_id" : "TmFjb3NQcm92aWRlckFwcA==.1",
"value" : 468,
"summation" : 468
}
},
{
"_index" : "my-elasticsearch_metrics-longavg-20220702",
"_type" : "_doc",
"_id" : "service_resp_time_202207021444_TmFjb3NDb25zdW1lckFwcA==.1",
"_score" : 9.861144,
"_source" : {
"metric_table" : "service_resp_time",
"count" : 8,
"time_bucket" : 202207021444,
"entity_id" : "TmFjb3NDb25zdW1lckFwcA==.1",
"value" : 521,
"summation" : 4171
}
},
{
"_index" : "my-elasticsearch_metrics-longavg-20220702",
"_type" : "_doc",
"_id" : "service_resp_time_202207021444_TmFjb3NQcm92aWRlckFwcA==.1",
"_score" : 9.861144,
"_source" : {
"metric_table" : "service_resp_time",
"count" : 8,
"time_bucket" : 202207021444,
"entity_id" : "TmFjb3NQcm92aWRlckFwcA==.1",
"value" : 518,
"summation" : 4145
}
}
]
}
}
_id | metric_table | service_id | entity_id | count | summation | value | time_bucket |
---|---|---|---|---|---|---|---|
service… | service_resp_time | TmFjb3NQcm92aWRlckFwcA==.1 | 1 | 468 | 468 | 202207021443 | |
service… | service_resp_time | TmFjb3NDb25zdW1lckFwcA==.1 | 1 | 514 | 514 | 202207021443 | |
service… | service_resp_time | TmFjb3NQcm92aWRlckFwcA==.1 | 8 | 4145 | 518 | 202207021444 | |
service… | service_resp_time | TmFjb3NDb25zdW1lckFwcA==.1 | 8 | 4171 | 521 | 202207021444 |
第一行表示在 202207021443
S, NacosProviderApp 服务被请求了一次,平均值为 468
ms;
第一行表示在 202207021443
S, NacosConsumerApp 服务被请求了一次,平均值为 514
ms;
可见 service_resp_time
指标是指服务所有 endpoint 每秒请求的平均值、总数和总和。由于服务只有一个 endpoint, 所以,它与 endpoint_avg
指标值相同。
endpoint_percentile: endpoint 每个时间段的响应时间占比
1. Mapping
通过命令 GET my-elasticsearch_metrics-percentile-20220702/_mapping
查看索引结构。
1 | { |
2. 索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
dataset | text | 数据集 |
entity_id | keyword | 根据 metric_table 值不同,代表不同的含义 |
metric_table | keyword | 指标名称 |
service_id | keyword | service Id |
precision | integer | |
value | text | 指标值 |
time_bucket | long | 时间桶, 这里是S, 如 202207021443 |
3. 数据
通过以下命令查看数据。
1 | POST /my-elasticsearch_metrics-percentile-20220702/_search |
结果如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 1.8170772,
"hits" : [
{
"_index" : "my-elasticsearch_metrics-percentile-20220702",
"_type" : "_doc",
"_id" : "endpoint_percentile_202207021443_TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0=",
"_score" : 1.8170772,
"_source" : {
"metric_table" : "endpoint_percentile",
"service_id" : "TmFjb3NQcm92aWRlckFwcA==.1",
"precision" : 10,
"time_bucket" : 202207021443,
"entity_id" : "TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0=",
"value" : "0,460|1,460|2,460|3,460|4,460",
"dataset" : "46,1"
}
},
{
"_index" : "my-elasticsearch_metrics-percentile-20220702",
"_type" : "_doc",
"_id" : "endpoint_percentile_202207021443_TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ==",
"_score" : 1.8170772,
"_source" : {
"metric_table" : "endpoint_percentile",
"service_id" : "TmFjb3NDb25zdW1lckFwcA==.1",
"precision" : 10,
"time_bucket" : 202207021443,
"entity_id" : "TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ==",
"value" : "0,510|1,510|2,510|3,510|4,510",
"dataset" : "51,1"
}
},
{
"_index" : "my-elasticsearch_metrics-percentile-20220702",
"_type" : "_doc",
"_id" : "endpoint_percentile_202207021444_TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0=",
"_score" : 1.8170772,
"_source" : {
"metric_table" : "endpoint_percentile",
"service_id" : "TmFjb3NQcm92aWRlckFwcA==.1",
"precision" : 10,
"time_bucket" : 202207021444,
"entity_id" : "TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0=",
"value" : "0,530|1,750|2,780|3,940|4,940",
"dataset" : "67,1|78,1|35,1|2,1|7,1|94,1|75,1|53,1"
}
},
{
"_index" : "my-elasticsearch_metrics-percentile-20220702",
"_type" : "_doc",
"_id" : "endpoint_percentile_202207021444_TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ==",
"_score" : 1.8170772,
"_source" : {
"metric_table" : "endpoint_percentile",
"service_id" : "TmFjb3NDb25zdW1lckFwcA==.1",
"precision" : 10,
"time_bucket" : 202207021444,
"entity_id" : "TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ==",
"value" : "0,540|1,760|2,780|3,940|4,940",
"dataset" : "67,1|78,1|35,1|3,1|7,1|94,1|76,1|54,1"
}
}
]
}
}
_id | metric_table | service_id | entity_id | precision | dataset | value | time_bucket |
---|---|---|---|---|---|---|---|
endpoint… | endpoint_percentile | TmFjb3NQcm92aWRlckFwcA==.1 | TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0= | 10 | … | … | 202207021443 |
endpoint… | endpoint_percentile | TmFjb3NDb25zdW1lckFwcA==.1 | TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ== | 10 | … | … | 202207021443 |
endpoint… | endpoint_percentile | TmFjb3NQcm92aWRlckFwcA==.1 | TmFjb3NQcm92aWRlckFwcA==.1_e0dFVH0vc2VydmljZXMvaGVsbG8ve3N0cn0= | 10 | … | … | 202207021444 |
endpoint… | endpoint_percentile | TmFjb3NDb25zdW1lckFwcA==.1 | TmFjb3NDb25zdW1lckFwcA==.1_e0dFVH0vZWNoby97c3RyfQ== | 10 | … | … | 202207021444 |
第一行表示在 202207021443
S, NacosProviderApp
服务的 {GET}/services/hello/{str}
endpint 的 endpoint_percentile 值为 0,460|1,460|2,460|3,460|4,460
;
第一行表示在 202207021443
S, NacosConsumerApp
服务的 {GET}/echo/{str}
endpint 的 endpoint_percentile 值为 0,510|1,510|2,510|3,510|4,510
.
说明:
- 字段
dataset
和value
存储的值不理解,后续再深入理解。
Trace
Trace 日志存储在 {namespace}_segment-yyyyMMdd
索引中。
Mapping
通过命令 GET my-elasticsearch_segment-20220702/_mapping
查看索引结构。
1 | { |
索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
trace_id | keyword | trace id |
segment_id | keyword | segment id |
service_id | keyword | service id |
service_instance_id | keyword | service instance id |
endpoint_id | keyword | endpoint id |
endpoint_name | keyword | endpoint name |
endpoint_name_match | text | 对 endpoint name 分词索引 |
tags | keyword | 标签,可根据标签进行 Keyword 匹配查询 |
statement | keyword | statement |
is_error | integer | 是否错误 |
latency | integer | 延时 |
version | integer | version |
tags | keyword | 标签,可根据标签进行 Keyword 匹配查询 |
start_time | long | 开始时间 |
end_time | long | 结束时间 |
data_binary | data_binary | 完整数据,通过Base64编码存储 |
time_bucket | long | 时间桶 |
说明:
- tags 字段:使用数组存储,可以动态添加多个 tag, 但只能使用内置 tag, 不能自定义 tag;
- data_binary 字段:segment 内容通过 Base64 编码存储,不能索引。
数据
通过以下命令 GET my-elasticsearch_segment-20220702/_search
查看数据。
1 | { |
为了简化,只复制了部分数据。一条完成的 Segment 数据如下:
1 | { |
Log
Log 日志存储在 {namespace}_log-yyyyMMdd
索引中。
Mapping
通过命令 GET my-elasticsearch_log-20220702/_mapping
查看索引结构。
1 | { |
索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
trace_id | keyword | trace id |
trace_segment_id | keyword | trace segment id |
unique_id | keyword | unique id |
span_id | integer | span id |
service_id | keyword | service id |
service_instance_id | keyword | service instance id |
endpoint_id | keyword | endpoint id |
endpoint_name | keyword | endpoint name |
endpoint_name_match | text | 对 endpoint name 分词索引 |
tags | keyword | 标签,可根据标签进行 Keyword 匹配查询 |
tags_raw_data | binary | 标签原始内容,使用 Base64 编码存储 |
statement | keyword | statement |
is_error | integer | 是否错误 |
latency | integer | 延时 |
version | integer | version |
tags | keyword | 标签,可根据标签进行 Keyword 匹配查询 |
timestamp | long | 时间戳 |
content | keyword | 日志内容 |
content_match | text | 日志内容 |
content_type | integer | content type |
content | keyword | 对日志内容分词索引 |
time_bucket | long | 时间桶 |
说明:
- tags 字段:使用数组存储,可以动态添加多个 tag, 但只能使用内置 tag, 不能自定义 tag, 该字段只存储被索引的字段;
- tags_raw_data 字段:tags 原始内容通过 Base64 编码存储,不能索引;
数据
通过以下命令 GET my-elasticsearch_segment-20220702/_search
查看数据。
1 | { |
为了简化,只复制了部分数据。一条完成的 log 数据如下:
1 | { |
Event
Event 日志存储在 {namespace}_events-yyyyMMdd
索引中。
Mapping
通过命令 GET my-elasticsearch_events-20220701/_mapping
查看索引结构。
1 | { |
索引结构
字段名称 | 类型 | 备注 |
---|---|---|
_id | keyword | 唯一id |
uuid | keyword | uuid |
service | keyword | service |
service_instance | keyword | service instance |
endpoint | keyword | endpoint |
name | keyword | name |
type | keyword | type |
start_time | long | 开始时间 |
end_time | long | 结束时间 |
message | keyword | 事件内容 |
parameters | keyword | 启动参数 |
time_bucket | long | 时间桶 |
说明:
- service 字段:服务名称;
- service_instance 字段:服务实例名称;
数据
通过以下命令 GET my-elasticsearch_events-20220701/_search
查看数据。
1 | { |
为了简化,只复制了部分数据。一条完成的 event 数据如下:
1 | { |
参考: