mirror of
https://github.com/hanzoai/otel-collector.git
synced 2026-11-03 02:20:04 +00:00
Modules declare go 1.27.1 and the build images follow. go fix applied the modernizers; omitzero is not applied, since it changes what the JSON says. Co-authored-by: Hanzo Dev <[email protected]>
1163 lines
46 KiB
Go
1163 lines
46 KiB
Go
package schemamigrator
|
|
|
|
// move them to TracesMigrations once it's ready to deploy
|
|
var TracesMigrations = []SchemaMigrationRecord{
|
|
{
|
|
MigrationID: 1000,
|
|
UpItems: []Operation{
|
|
CreateTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Columns: []Column{
|
|
{Name: "ts_bucket_start", Type: ColumnTypeUInt64, Codec: "DoubleDelta, LZ4"},
|
|
{Name: "resource_fingerprint", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "timestamp", Type: DateTime64ColumnType{Precision: 9}, Codec: "DoubleDelta, LZ4"},
|
|
{Name: "trace_id", Type: FixedStringColumnType{Length: 32}, Codec: "ZSTD(1)"},
|
|
{Name: "span_id", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "trace_state", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "parent_span_id", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "flags", Type: ColumnTypeUInt32, Codec: "T64, ZSTD(1)"},
|
|
{Name: "name", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "kind", Type: ColumnTypeInt8, Codec: "T64, ZSTD(1)"},
|
|
{Name: "kind_string", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "duration_nano", Type: ColumnTypeUInt64, Codec: "T64, ZSTD(1)"},
|
|
{Name: "status_code", Type: ColumnTypeInt16, Codec: "T64, ZSTD(1)"},
|
|
{Name: "status_message", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "status_code_string", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
|
|
{Name: "attributes_string", Type: MapColumnType{LowCardinalityColumnType{ColumnTypeString}, ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "attributes_number", Type: MapColumnType{LowCardinalityColumnType{ColumnTypeString}, ColumnTypeFloat64}, Codec: "ZSTD(1)"},
|
|
{Name: "attributes_bool", Type: MapColumnType{LowCardinalityColumnType{ColumnTypeString}, ColumnTypeBool}, Codec: "ZSTD(1)"},
|
|
{Name: "resources_string", Type: MapColumnType{LowCardinalityColumnType{ColumnTypeString}, ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
|
|
{Name: "events", Type: ArrayColumnType{ColumnTypeString}, Codec: "ZSTD(2)"},
|
|
{Name: "links", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
|
|
// custom composite columns
|
|
{Name: "response_status_code", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "external_http_url", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "http_url", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "external_http_method", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "http_method", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "http_host", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "db_name", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "db_operation", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "has_error", Type: ColumnTypeBool, Codec: "T64, ZSTD(1)"},
|
|
{Name: "is_remote", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
|
|
// simple resource attribute
|
|
{Name: "resource_string_service$$name", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "resources_string['service.name']", Codec: "ZSTD(1)"},
|
|
|
|
// simple attributes
|
|
{Name: "attribute_string_http$$route", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['http.route']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_messaging$$system", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['messaging.system']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_messaging$$operation", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['messaging.operation']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_db$$system", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['db.system']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_rpc$$system", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['rpc.system']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_rpc$$service", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['rpc.service']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_rpc$$method", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['rpc.method']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_peer$$service", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['peer.service']", Codec: "ZSTD(1)"},
|
|
|
|
// ----- ALIAS for backward compatibility ------------
|
|
// ---------------------------------------------------
|
|
|
|
// ALIAS columns to maintain compatibility with o11y_index_v2
|
|
{Name: "traceID", Type: FixedStringColumnType{Length: 32}, Alias: "trace_id"},
|
|
{Name: "spanID", Type: ColumnTypeString, Alias: "span_id"},
|
|
{Name: "parentSpanID", Type: ColumnTypeString, Alias: "parent_span_id"},
|
|
{Name: "spanKind", Type: ColumnTypeString, Alias: "kind_string"},
|
|
{Name: "durationNano", Type: ColumnTypeUInt64, Alias: "duration_nano"},
|
|
{Name: "statusCode", Type: ColumnTypeInt16, Alias: "status_code"},
|
|
{Name: "statusMessage", Type: ColumnTypeString, Alias: "status_message"},
|
|
{Name: "statusCodeString", Type: ColumnTypeString, Alias: "status_code_string"},
|
|
|
|
{Name: "references", Type: ColumnTypeString, Alias: "links"},
|
|
|
|
// ALIAS for composite attrs
|
|
{Name: "responseStatusCode", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "response_status_code"},
|
|
{Name: "externalHttpUrl", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "external_http_url"},
|
|
{Name: "httpUrl", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "http_url"},
|
|
{Name: "externalHttpMethod", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "external_http_method"},
|
|
{Name: "httpMethod", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "http_method"},
|
|
{Name: "httpHost", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "http_host"},
|
|
{Name: "dbName", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "db_name"},
|
|
{Name: "dbOperation", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "db_operation"},
|
|
{Name: "hasError", Type: ColumnTypeBool, Alias: "has_error"},
|
|
{Name: "isRemote", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "is_remote"},
|
|
|
|
{Name: "serviceName", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "resource_string_service$$name"},
|
|
|
|
// ALIAS for simple attrs
|
|
{Name: "httpRoute", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_http$$route"},
|
|
{Name: "msgSystem", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_messaging$$system"},
|
|
{Name: "msgOperation", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_messaging$$operation"},
|
|
{Name: "dbSystem", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_db$$system"},
|
|
{Name: "rpcSystem", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_rpc$$system"},
|
|
{Name: "rpcService", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_rpc$$service"},
|
|
{Name: "rpcMethod", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_rpc$$method"},
|
|
{Name: "peerService", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_peer$$service"},
|
|
},
|
|
Indexes: []Index{
|
|
{Name: "idx_trace_id", Expression: "trace_id", Type: "tokenbf_v1(10000, 5,0)", Granularity: 1},
|
|
{Name: "idx_span_id", Expression: "span_id", Type: "tokenbf_v1(5000, 5,0)", Granularity: 1},
|
|
{Name: "idx_duration", Expression: "duration_nano", Type: "minmax", Granularity: 1},
|
|
{Name: "idx_name", Expression: "name", Type: "ngrambf_v1(4, 5000, 2, 0)", Granularity: 1},
|
|
{Name: "idx_kind", Expression: "kind", Type: "minmax", Granularity: 4},
|
|
{Name: "idx_http_route", Expression: "attribute_string_http$$route", Type: "bloom_filter", Granularity: 4},
|
|
{Name: "idx_http_url", Expression: "http_url", Type: "bloom_filter", Granularity: 4},
|
|
{Name: "idx_http_host", Expression: "http_host", Type: "bloom_filter", Granularity: 4},
|
|
{Name: "idx_http_method", Expression: "http_method", Type: "bloom_filter", Granularity: 4},
|
|
{Name: "idx_timestamp", Expression: "timestamp", Type: "minmax", Granularity: 1},
|
|
{Name: "idx_rpc_method", Expression: "attribute_string_rpc$$method", Type: "bloom_filter", Granularity: 4},
|
|
{Name: "idx_response_statusCode", Expression: "response_status_code", Type: "set(0)", Granularity: 1},
|
|
{Name: "idx_status_code_string", Expression: "status_code_string", Type: "set(3)", Granularity: 4},
|
|
{Name: "idx_kind_string", Expression: "kind_string", Type: "set(5)", Granularity: 4},
|
|
{Name: "attributes_string_idx_key", Expression: "mapKeys(attributes_string)", Type: "tokenbf_v1(1024, 2, 0)", Granularity: 1},
|
|
{Name: "attributes_string_idx_val", Expression: "mapValues(attributes_string)", Type: "ngrambf_v1(4, 5000, 2, 0)", Granularity: 1},
|
|
{Name: "attributes_number_idx_key", Expression: "mapKeys(attributes_number)", Type: "tokenbf_v1(1024, 2, 0)", Granularity: 1},
|
|
{Name: "attributes_number_idx_val", Expression: "mapValues(attributes_number)", Type: "bloom_filter", Granularity: 1},
|
|
{Name: "attributes_bool_idx_key", Expression: "mapKeys(attributes_bool)", Type: "tokenbf_v1(1024, 2, 0)", Granularity: 1},
|
|
{Name: "resources_string_idx_key", Expression: "mapKeys(resources_string)", Type: "tokenbf_v1(1024, 2, 0)", Granularity: 1},
|
|
{Name: "resources_string_idx_val", Expression: "mapValues(resources_string)", Type: "ngrambf_v1(4, 5000, 2, 0)", Granularity: 1},
|
|
},
|
|
Engine: MergeTree{
|
|
PartitionBy: "toDate(timestamp)",
|
|
OrderBy: "(ts_bucket_start, resource_fingerprint, has_error, name, timestamp)",
|
|
TTL: "toDateTime(timestamp) + toIntervalSecond(1296000)",
|
|
Settings: TableSettings{
|
|
{Name: "index_granularity", Value: "8192"},
|
|
{Name: "ttl_only_drop_parts", Value: "1"},
|
|
},
|
|
},
|
|
},
|
|
CreateTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Columns: []Column{
|
|
{Name: "ts_bucket_start", Type: ColumnTypeUInt64, Codec: "DoubleDelta, LZ4"},
|
|
{Name: "resource_fingerprint", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "timestamp", Type: DateTime64ColumnType{Precision: 9}, Codec: "DoubleDelta, LZ4"},
|
|
{Name: "trace_id", Type: FixedStringColumnType{Length: 32}, Codec: "ZSTD(1)"},
|
|
{Name: "span_id", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "trace_state", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "parent_span_id", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "flags", Type: ColumnTypeUInt32, Codec: "T64, ZSTD(1)"},
|
|
{Name: "name", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "kind", Type: ColumnTypeInt8, Codec: "T64, ZSTD(1)"},
|
|
{Name: "kind_string", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "duration_nano", Type: ColumnTypeUInt64, Codec: "T64, ZSTD(1)"},
|
|
{Name: "status_code", Type: ColumnTypeInt16, Codec: "T64, ZSTD(1)"},
|
|
{Name: "status_message", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "status_code_string", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
|
|
{Name: "attributes_string", Type: MapColumnType{LowCardinalityColumnType{ColumnTypeString}, ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "attributes_number", Type: MapColumnType{LowCardinalityColumnType{ColumnTypeString}, ColumnTypeFloat64}, Codec: "ZSTD(1)"},
|
|
{Name: "attributes_bool", Type: MapColumnType{LowCardinalityColumnType{ColumnTypeString}, ColumnTypeBool}, Codec: "ZSTD(1)"},
|
|
{Name: "resources_string", Type: MapColumnType{LowCardinalityColumnType{ColumnTypeString}, ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
|
|
{Name: "events", Type: ArrayColumnType{ColumnTypeString}, Codec: "ZSTD(2)"},
|
|
{Name: "links", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
|
|
// custom composite columns
|
|
{Name: "response_status_code", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "external_http_url", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "http_url", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "external_http_method", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "http_method", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "http_host", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "db_name", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "db_operation", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "has_error", Type: ColumnTypeBool, Codec: "T64, ZSTD(1)"},
|
|
{Name: "is_remote", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
|
|
// simple resource attribute
|
|
{Name: "resource_string_service$$name", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "resources_string['service.name']", Codec: "ZSTD(1)"},
|
|
|
|
// simple attributes
|
|
{Name: "attribute_string_http$$route", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['http.route']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_messaging$$system", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['messaging.system']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_messaging$$operation", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['messaging.operation']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_db$$system", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['db.system']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_rpc$$system", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['rpc.system']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_rpc$$service", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['rpc.service']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_rpc$$method", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['rpc.method']", Codec: "ZSTD(1)"},
|
|
{Name: "attribute_string_peer$$service", Type: LowCardinalityColumnType{ColumnTypeString}, Default: "attributes_string['peer.service']", Codec: "ZSTD(1)"},
|
|
|
|
// ----- ALIAS for backward compatibility ------------
|
|
// ---------------------------------------------------
|
|
|
|
// ALIAS columns to maintain compatibility with o11y_index_v2
|
|
{Name: "traceID", Type: FixedStringColumnType{Length: 32}, Alias: "trace_id"},
|
|
{Name: "spanID", Type: ColumnTypeString, Alias: "span_id"},
|
|
{Name: "parentSpanID", Type: ColumnTypeString, Alias: "parent_span_id"},
|
|
{Name: "spanKind", Type: ColumnTypeString, Alias: "kind_string"},
|
|
{Name: "durationNano", Type: ColumnTypeUInt64, Alias: "duration_nano"},
|
|
{Name: "statusCode", Type: ColumnTypeInt16, Alias: "status_code"},
|
|
{Name: "statusMessage", Type: ColumnTypeString, Alias: "status_message"},
|
|
{Name: "statusCodeString", Type: ColumnTypeString, Alias: "status_code_string"},
|
|
|
|
{Name: "references", Type: ColumnTypeString, Alias: "links"},
|
|
|
|
// ALIAS for composite attrs
|
|
{Name: "responseStatusCode", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "response_status_code"},
|
|
{Name: "externalHttpUrl", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "external_http_url"},
|
|
{Name: "httpUrl", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "http_url"},
|
|
{Name: "externalHttpMethod", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "external_http_method"},
|
|
{Name: "httpMethod", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "http_method"},
|
|
{Name: "httpHost", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "http_host"},
|
|
{Name: "dbName", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "db_name"},
|
|
{Name: "dbOperation", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "db_operation"},
|
|
{Name: "hasError", Type: ColumnTypeBool, Alias: "has_error"},
|
|
{Name: "isRemote", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "is_remote"},
|
|
|
|
{Name: "serviceName", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "resource_string_service$$name"},
|
|
|
|
// ALIAS for simple attrs
|
|
{Name: "httpRoute", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_http$$route"},
|
|
{Name: "msgSystem", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_messaging$$system"},
|
|
{Name: "msgOperation", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_messaging$$operation"},
|
|
{Name: "dbSystem", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_db$$system"},
|
|
{Name: "rpcSystem", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_rpc$$system"},
|
|
{Name: "rpcService", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_rpc$$service"},
|
|
{Name: "rpcMethod", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_rpc$$method"},
|
|
{Name: "peerService", Type: LowCardinalityColumnType{ColumnTypeString}, Alias: "attribute_string_peer$$service"},
|
|
},
|
|
Engine: Distributed{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
ShardingKey: "cityHash64(trace_id)",
|
|
},
|
|
},
|
|
CreateTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "traces_v3_resource",
|
|
Columns: []Column{
|
|
{Name: "labels", Type: ColumnTypeString, Codec: "ZSTD(5)"},
|
|
{Name: "fingerprint", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "seen_at_ts_bucket_start", Type: ColumnTypeInt64, Codec: "Delta(8), ZSTD(1)"},
|
|
},
|
|
Indexes: []Index{
|
|
{Name: "idx_labels", Expression: "lower(labels)", Type: "ngrambf_v1(4, 1024, 3, 0)", Granularity: 1},
|
|
{Name: "idx_labels_v1", Expression: "labels", Type: "ngrambf_v1(4, 1024, 3, 0)", Granularity: 1},
|
|
},
|
|
Engine: ReplacingMergeTree{
|
|
MergeTree: MergeTree{
|
|
PartitionBy: "toDate(seen_at_ts_bucket_start)",
|
|
OrderBy: "(labels, fingerprint, seen_at_ts_bucket_start)",
|
|
TTL: "toDateTime(seen_at_ts_bucket_start) + INTERVAL 1296000 SECOND + INTERVAL 1800 SECOND DELETE",
|
|
Settings: TableSettings{
|
|
{Name: "ttl_only_drop_parts", Value: "1"},
|
|
{Name: "index_granularity", Value: "8192"},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
CreateTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_traces_v3_resource",
|
|
Columns: []Column{
|
|
{Name: "labels", Type: ColumnTypeString, Codec: "ZSTD(5)"},
|
|
{Name: "fingerprint", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "seen_at_ts_bucket_start", Type: ColumnTypeInt64, Codec: "Delta(8), ZSTD(1)"},
|
|
},
|
|
Engine: Distributed{
|
|
Database: "o11y_traces",
|
|
Table: "traces_v3_resource",
|
|
ShardingKey: "cityHash64(labels, fingerprint)",
|
|
},
|
|
},
|
|
CreateTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "trace_summary",
|
|
Columns: []Column{
|
|
{Name: "trace_id", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "start",
|
|
Type: SimpleAggregateFunction{
|
|
FunctionName: "min",
|
|
Arguments: []ColumnType{DateTime64ColumnType{Precision: 9}},
|
|
},
|
|
Codec: "ZSTD(1)"},
|
|
{Name: "end",
|
|
Type: SimpleAggregateFunction{
|
|
FunctionName: "max",
|
|
Arguments: []ColumnType{DateTime64ColumnType{Precision: 9}},
|
|
},
|
|
Codec: "ZSTD(1)"},
|
|
{Name: "num_spans",
|
|
Type: SimpleAggregateFunction{
|
|
FunctionName: "sum",
|
|
Arguments: []ColumnType{ColumnTypeUInt64},
|
|
},
|
|
Codec: "ZSTD(1)"},
|
|
},
|
|
Engine: AggregatingMergeTree{
|
|
MergeTree: MergeTree{
|
|
PartitionBy: "toDate(end)",
|
|
OrderBy: "(trace_id)",
|
|
TTL: "toDateTime(end) + toIntervalSecond(1296000)",
|
|
Settings: TableSettings{
|
|
{Name: "index_granularity", Value: "8192"},
|
|
{Name: "ttl_only_drop_parts", Value: "1"},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
CreateTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_trace_summary",
|
|
Columns: []Column{
|
|
{Name: "trace_id", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "start",
|
|
Type: SimpleAggregateFunction{
|
|
FunctionName: "min",
|
|
Arguments: []ColumnType{DateTime64ColumnType{Precision: 9}},
|
|
},
|
|
Codec: "ZSTD(1)"},
|
|
{Name: "end",
|
|
Type: SimpleAggregateFunction{
|
|
FunctionName: "max",
|
|
Arguments: []ColumnType{DateTime64ColumnType{Precision: 9}},
|
|
},
|
|
Codec: "ZSTD(1)"},
|
|
{Name: "num_spans",
|
|
Type: SimpleAggregateFunction{
|
|
FunctionName: "sum",
|
|
Arguments: []ColumnType{ColumnTypeUInt64},
|
|
},
|
|
Codec: "ZSTD(1)"},
|
|
},
|
|
Engine: Distributed{
|
|
Database: "o11y_traces",
|
|
Table: "trace_summary",
|
|
ShardingKey: "cityHash64(trace_id)",
|
|
},
|
|
},
|
|
CreateMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "trace_summary_mv",
|
|
DestTable: "trace_summary",
|
|
Query: `SELECT
|
|
trace_id,
|
|
min(timestamp) AS start,
|
|
max(timestamp) AS end,
|
|
toUInt64(count()) AS num_spans
|
|
FROM o11y_traces.o11y_index_v3
|
|
GROUP BY trace_id;`,
|
|
},
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "root_operations",
|
|
Query: `SELECT DISTINCT
|
|
name,
|
|
resource_string_service$$name as serviceName
|
|
FROM o11y_traces.o11y_index_v3
|
|
WHERE parent_span_id = ''`,
|
|
},
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "sub_root_operations",
|
|
Query: `SELECT DISTINCT
|
|
name,
|
|
resource_string_service$$name as serviceName
|
|
FROM o11y_traces.o11y_index_v3 AS A, o11y_traces.o11y_index_v3 AS B
|
|
WHERE (A.resource_string_service$$name != B.resource_string_service$$name) AND (A.parent_span_id = B.span_id)`,
|
|
},
|
|
},
|
|
DownItems: []Operation{
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "traces_v3_resource",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_traces_v3_resource",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "trace_summary",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_trace_summary",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "trace_summary_mv",
|
|
},
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "root_operations",
|
|
Query: `SELECT DISTINCT
|
|
name,
|
|
serviceName
|
|
FROM o11y_traces.o11y_index_v2
|
|
WHERE parentSpanID = ''`,
|
|
},
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "sub_root_operations",
|
|
Query: `SELECT DISTINCT
|
|
name,
|
|
serviceName
|
|
FROM o11y_traces.o11y_index_v2 AS A, o11y_traces.o11y_index_v2 AS B
|
|
WHERE (A.serviceName != B.serviceName) AND (A.parentSpanID = B.spanID)`,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
MigrationID: 1001,
|
|
UpItems: []Operation{
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "durationSortMV",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_durationSort",
|
|
},
|
|
// DropTableOperation{
|
|
// Database: "o11y_traces",
|
|
// Table: "durationSort",
|
|
// // this is added so that we can avoid the following error
|
|
// //1. Size (453.51 GB) is greater than max_[table/partition]_size_to_drop (50.00 GB)
|
|
// // https://stackoverflow.com/questions/78162269/cannot-drop-large-materialized-view-in-datastore
|
|
// Settings: TableSettings{{Name: "max_table_size_to_drop", Value: "0"}},
|
|
// },
|
|
},
|
|
DownItems: []Operation{},
|
|
},
|
|
{
|
|
MigrationID: 1002,
|
|
UpItems: []Operation{
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "dependency_graph_minutes_db_calls_mv_v2",
|
|
Query: `SELECT
|
|
resource_string_service$$name AS src,
|
|
attribute_string_db$$system AS dest,
|
|
quantilesState(0.5, 0.75, 0.9, 0.95, 0.99)(toFloat64(duration_nano)) AS duration_quantiles_state,
|
|
countIf(status_code = 2) AS error_count,
|
|
count(*) AS total_count,
|
|
toStartOfMinute(timestamp) AS timestamp,
|
|
resources_string['deployment.environment'] AS deployment_environment,
|
|
resources_string['k8s.cluster.name'] AS k8s_cluster_name,
|
|
resources_string['k8s.namespace.name'] AS k8s_namespace_name
|
|
FROM o11y_traces.o11y_index_v3
|
|
WHERE (dest != '') AND (kind != 2)
|
|
GROUP BY
|
|
timestamp,
|
|
src,
|
|
dest,
|
|
deployment_environment,
|
|
k8s_cluster_name,
|
|
k8s_namespace_name`,
|
|
},
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "dependency_graph_minutes_messaging_calls_mv_v2",
|
|
Query: `SELECT
|
|
resource_string_service$$name AS src,
|
|
attribute_string_messaging$$system AS dest,
|
|
quantilesState(0.5, 0.75, 0.9, 0.95, 0.99)(toFloat64(duration_nano)) AS duration_quantiles_state,
|
|
countIf(status_code = 2) AS error_count,
|
|
count(*) AS total_count,
|
|
toStartOfMinute(timestamp) AS timestamp,
|
|
resources_string['deployment.environment'] AS deployment_environment,
|
|
resources_string['k8s.cluster.name'] AS k8s_cluster_name,
|
|
resources_string['k8s.namespace.name'] AS k8s_namespace_name
|
|
FROM o11y_traces.o11y_index_v3
|
|
WHERE (dest != '') AND (kind != 2)
|
|
GROUP BY
|
|
timestamp,
|
|
src,
|
|
dest,
|
|
deployment_environment,
|
|
k8s_cluster_name,
|
|
k8s_namespace_name`,
|
|
},
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "dependency_graph_minutes_service_calls_mv_v2",
|
|
Query: `SELECT
|
|
A.resource_string_service$$name AS src,
|
|
B.resource_string_service$$name AS dest,
|
|
quantilesState(0.5, 0.75, 0.9, 0.95, 0.99)(toFloat64(B.duration_nano)) AS duration_quantiles_state,
|
|
countIf(B.status_code = 2) AS error_count,
|
|
count(*) AS total_count,
|
|
toStartOfMinute(B.timestamp) AS timestamp,
|
|
B.resources_string['deployment.environment'] AS deployment_environment,
|
|
B.resources_string['k8s.cluster.name'] AS k8s_cluster_name,
|
|
B.resources_string['k8s.namespace.name'] AS k8s_namespace_name
|
|
FROM o11y_traces.o11y_index_v3 AS A, o11y_traces.o11y_index_v3 AS B
|
|
WHERE (A.resource_string_service$$name != B.resource_string_service$$name) AND (A.span_id = B.parent_span_id)
|
|
GROUP BY
|
|
timestamp,
|
|
src,
|
|
dest,
|
|
deployment_environment,
|
|
k8s_cluster_name,
|
|
k8s_namespace_name`,
|
|
},
|
|
},
|
|
DownItems: []Operation{
|
|
// no point of down here as we don't want to go back
|
|
},
|
|
},
|
|
{
|
|
MigrationID: 1003,
|
|
UpItems: []Operation{
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "dependency_graph_minutes_db_calls_mv",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "dependency_graph_minutes_messaging_calls_mv",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "dependency_graph_minutes_service_calls_mv",
|
|
},
|
|
DropTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_dependency_graph_minutes",
|
|
},
|
|
// remove dependency_graph_minutes later
|
|
},
|
|
DownItems: []Operation{
|
|
// no point of down here as we don't use these
|
|
},
|
|
},
|
|
{
|
|
MigrationID: 1004,
|
|
UpItems: []Operation{
|
|
CreateTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "tag_attributes_v2",
|
|
Columns: []Column{
|
|
{Name: "unix_milli", Type: ColumnTypeInt64, Codec: "Delta(8), ZSTD(1)"},
|
|
{Name: "tag_key", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "tag_type", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "tag_data_type", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "string_value", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "number_value", Type: NullableColumnType{ColumnTypeFloat64}, Codec: "ZSTD(1)"},
|
|
},
|
|
Indexes: []Index{
|
|
{Name: "string_value_index", Expression: "string_value", Type: "ngrambf_v1(4, 1024, 3, 0)", Granularity: 1},
|
|
{Name: "number_value_index", Expression: "number_value", Type: "minmax", Granularity: 1},
|
|
},
|
|
Engine: ReplacingMergeTree{
|
|
MergeTree: MergeTree{
|
|
PartitionBy: "toDate(unix_milli / 1000)",
|
|
OrderBy: "(tag_key, tag_type, tag_data_type, string_value, number_value)",
|
|
TTL: "toDateTime(unix_milli / 1000) + toIntervalSecond(1296000)",
|
|
Settings: TableSettings{
|
|
{Name: "index_granularity", Value: "8192"},
|
|
{Name: "ttl_only_drop_parts", Value: "1"},
|
|
{Name: "allow_nullable_key", Value: "1"},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
CreateTableOperation{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_tag_attributes_v2",
|
|
Columns: []Column{
|
|
{Name: "unix_milli", Type: ColumnTypeInt64, Codec: "Delta(8), ZSTD(1)"},
|
|
{Name: "tag_key", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "tag_type", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "tag_data_type", Type: LowCardinalityColumnType{ColumnTypeString}, Codec: "ZSTD(1)"},
|
|
{Name: "string_value", Type: ColumnTypeString, Codec: "ZSTD(1)"},
|
|
{Name: "number_value", Type: NullableColumnType{ColumnTypeFloat64}, Codec: "ZSTD(1)"},
|
|
},
|
|
Engine: Distributed{
|
|
Database: "o11y_traces",
|
|
Table: "tag_attributes_v2",
|
|
ShardingKey: "cityHash64(rand())",
|
|
},
|
|
},
|
|
},
|
|
DownItems: []Operation{},
|
|
},
|
|
{
|
|
MigrationID: 1005,
|
|
UpItems: []Operation{
|
|
// Local Table
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "resource_string_service$$name_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(resources_string, 'service.name') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_http$$route_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'http.route') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_messaging$$system_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'messaging.system') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_messaging$$operation_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'messaging.operation') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_db$$system_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'db.system') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$system_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'rpc.system') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$service_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'rpc.service') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$method_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'rpc.method') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_peer$$service_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'peer.service') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
|
|
// Distributed Table
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "resource_string_service$$name_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(resources_string, 'service.name') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_http$$route_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'http.route') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_messaging$$system_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'messaging.system') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_messaging$$operation_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'messaging.operation') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_db$$system_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'db.system') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$system_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'rpc.system') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$service_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'rpc.service') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$method_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'rpc.method') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_peer$$service_exists",
|
|
Type: ColumnTypeBool,
|
|
Default: "if(mapContains(attributes_string, 'peer.service') != 0, true, false)",
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
},
|
|
DownItems: []Operation{
|
|
// Distributed table
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "resource_string_service$$name_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_http$$route_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_messaging$$system_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_messaging$$operation_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_db$$system_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$system_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$service_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$method_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_peer$$service_exists",
|
|
},
|
|
},
|
|
|
|
// Local table
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "resource_string_service$$name_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_http$$route_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_messaging$$system_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_messaging$$operation_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_db$$system_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$system_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$service_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_rpc$$method_exists",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "attribute_string_peer$$service_exists",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
MigrationID: 1006,
|
|
UpItems: []Operation{
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "resource",
|
|
Type: JSONColumnType{MaxDynamicPaths: new(uint(100))},
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "resource",
|
|
Type: JSONColumnType{MaxDynamicPaths: new(uint(100))},
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
},
|
|
DownItems: []Operation{
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "resource",
|
|
},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "resource",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
MigrationID: 1007,
|
|
UpItems: []Operation{
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "dependency_graph_minutes_service_calls_mv_v2",
|
|
Query: `SELECT
|
|
A.resource_string_service$$name AS src,
|
|
B.resource_string_service$$name AS dest,
|
|
quantilesState(0.5, 0.75, 0.9, 0.95, 0.99)(toFloat64(B.duration_nano)) AS duration_quantiles_state,
|
|
countIf(B.status_code = 2) AS error_count,
|
|
count(*) AS total_count,
|
|
toStartOfMinute(B.timestamp) AS timestamp,
|
|
B.resources_string['deployment.environment'] AS deployment_environment,
|
|
B.resources_string['k8s.cluster.name'] AS k8s_cluster_name,
|
|
B.resources_string['k8s.namespace.name'] AS k8s_namespace_name
|
|
FROM o11y_traces.o11y_index_v3 AS A, o11y_traces.o11y_index_v3 AS B
|
|
WHERE (A.resource_string_service$$name != B.resource_string_service$$name) AND (A.span_id = B.parent_span_id)
|
|
AND B.span_id != '' AND A.span_id != ''
|
|
GROUP BY
|
|
timestamp,
|
|
src,
|
|
dest,
|
|
deployment_environment,
|
|
k8s_cluster_name,
|
|
k8s_namespace_name;`,
|
|
},
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "sub_root_operations",
|
|
Query: `SELECT DISTINCT
|
|
name,
|
|
resource_string_service$$name AS serviceName
|
|
FROM o11y_traces.o11y_index_v3 AS A, o11y_traces.o11y_index_v3 AS B
|
|
WHERE (A.resource_string_service$$name != B.resource_string_service$$name) AND (A.parent_span_id = B.span_id) AND B.span_id != '' AND A.span_id != ''`,
|
|
},
|
|
},
|
|
DownItems: []Operation{
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "dependency_graph_minutes_service_calls_mv_v2",
|
|
Query: `SELECT
|
|
A.resource_string_service$$name AS src,
|
|
B.resource_string_service$$name AS dest,
|
|
quantilesState(0.5, 0.75, 0.9, 0.95, 0.99)(toFloat64(B.duration_nano)) AS duration_quantiles_state,
|
|
countIf(B.status_code = 2) AS error_count,
|
|
count(*) AS total_count,
|
|
toStartOfMinute(B.timestamp) AS timestamp,
|
|
B.resources_string['deployment.environment'] AS deployment_environment,
|
|
B.resources_string['k8s.cluster.name'] AS k8s_cluster_name,
|
|
B.resources_string['k8s.namespace.name'] AS k8s_namespace_name
|
|
FROM o11y_traces.o11y_index_v3 AS A, o11y_traces.o11y_index_v3 AS B
|
|
WHERE (A.resource_string_service$$name != B.resource_string_service$$name) AND (A.span_id = B.parent_span_id)
|
|
GROUP BY
|
|
timestamp,
|
|
src,
|
|
dest,
|
|
deployment_environment,
|
|
k8s_cluster_name,
|
|
k8s_namespace_name;`,
|
|
},
|
|
ModifyQueryMaterializedViewOperation{
|
|
Database: "o11y_traces",
|
|
ViewName: "sub_root_operations",
|
|
Query: `SELECT DISTINCT
|
|
name,
|
|
resource_string_service$$name AS serviceName
|
|
FROM o11y_traces.o11y_index_v3 AS A, o11y_traces.o11y_index_v3 AS B
|
|
WHERE (A.resource_string_service$$name != B.resource_string_service$$name) AND (A.parent_span_id = B.span_id)`,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
MigrationID: 1008,
|
|
UpItems: []Operation{
|
|
// Add timestamp column to span_attributes_keys table
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "span_attributes_keys",
|
|
Column: Column{
|
|
Name: "timestamp",
|
|
Type: DateTimeColumnType{},
|
|
Default: "toDateTime(now())",
|
|
},
|
|
},
|
|
// Set TTL on span_attributes_keys to match o11y_spans table (15 days)
|
|
AlterTableModifyTTL{
|
|
Database: "o11y_traces",
|
|
Table: "span_attributes_keys",
|
|
TTL: "timestamp + INTERVAL 15 DAY",
|
|
Settings: ModifyTTLSettings{
|
|
MaterializeTTLAfterModify: false,
|
|
},
|
|
},
|
|
},
|
|
DownItems: []Operation{
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "span_attributes_keys",
|
|
Column: Column{
|
|
Name: "timestamp",
|
|
},
|
|
},
|
|
AlterTableDropTTL{
|
|
Database: "o11y_traces",
|
|
Table: "span_attributes_keys",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
MigrationID: 1009,
|
|
UpItems: []Operation{
|
|
// Add scope column to local table
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{
|
|
Name: "scope",
|
|
Type: JSONColumnType{
|
|
MaxDynamicPaths: new(uint(0)),
|
|
Columns: []Column{
|
|
{Name: "name", Type: ColumnTypeString},
|
|
{Name: "version", Type: ColumnTypeString},
|
|
{Name: "attributes", Type: JSONColumnType{MaxDynamicPaths: new(uint(0))}},
|
|
},
|
|
},
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
// Add scope column to distributed table
|
|
AlterTableAddColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{
|
|
Name: "scope",
|
|
Type: JSONColumnType{
|
|
MaxDynamicPaths: new(uint(0)),
|
|
Columns: []Column{
|
|
{Name: "name", Type: ColumnTypeString},
|
|
{Name: "version", Type: ColumnTypeString},
|
|
{Name: "attributes", Type: JSONColumnType{MaxDynamicPaths: new(uint(0))}},
|
|
},
|
|
},
|
|
Codec: "ZSTD(1)",
|
|
},
|
|
},
|
|
},
|
|
DownItems: []Operation{
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_o11y_index_v3",
|
|
Column: Column{Name: "scope"},
|
|
},
|
|
AlterTableDropColumn{
|
|
Database: "o11y_traces",
|
|
Table: "o11y_index_v3",
|
|
Column: Column{Name: "scope"},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
MigrationID: 1010,
|
|
UpItems: []Operation{
|
|
// Extend tagType enum to include 'scope' in local table
|
|
AlterTableModifyColumn{
|
|
Database: "o11y_traces",
|
|
Table: "span_attributes_keys",
|
|
Column: Column{
|
|
Name: "tagType",
|
|
Type: EnumerationColumnType{
|
|
Values: []string{"'tag' = 1", "'resource' = 2", "'scope' = 3"},
|
|
Size: 8,
|
|
},
|
|
},
|
|
},
|
|
// Extend tagType enum to include 'scope' in distributed table
|
|
AlterTableModifyColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_span_attributes_keys",
|
|
Column: Column{
|
|
Name: "tagType",
|
|
Type: EnumerationColumnType{
|
|
Values: []string{"'tag' = 1", "'resource' = 2", "'scope' = 3"},
|
|
Size: 8,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
DownItems: []Operation{
|
|
// Revert tagType enum back to original (removes 'scope')
|
|
AlterTableModifyColumn{
|
|
Database: "o11y_traces",
|
|
Table: "distributed_span_attributes_keys",
|
|
Column: Column{
|
|
Name: "tagType",
|
|
Type: EnumerationColumnType{
|
|
Values: []string{"'tag' = 1", "'resource' = 2"},
|
|
Size: 8,
|
|
},
|
|
},
|
|
},
|
|
AlterTableModifyColumn{
|
|
Database: "o11y_traces",
|
|
Table: "span_attributes_keys",
|
|
Column: Column{
|
|
Name: "tagType",
|
|
Type: EnumerationColumnType{
|
|
Values: []string{"'tag' = 1", "'resource' = 2"},
|
|
Size: 8,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|