Traces Schema
- Version
0.113.0
otel_logs
sql
CREATE TABLE otel_logs
(
`Timestamp` DateTime64(9) CODEC(Delta(8), ZSTD(1)),
`TimestampTime` DateTime DEFAULT toDateTime(Timestamp),
`TraceId` String CODEC(ZSTD(1)),
`SpanId` String CODEC(ZSTD(1)),
`TraceFlags` UInt8,
`SeverityText` LowCardinality(String) CODEC(ZSTD(1)),
`SeverityNumber` UInt8,
`ServiceName` LowCardinality(String) CODEC(ZSTD(1)),
`Body` String CODEC(ZSTD(1)),
`ResourceSchemaUrl` LowCardinality(String) CODEC(ZSTD(1)),
`ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)),
`ScopeSchemaUrl` LowCardinality(String) CODEC(ZSTD(1)),
`ScopeName` String CODEC(ZSTD(1)),
`ScopeVersion` LowCardinality(String) CODEC(ZSTD(1)),
`ScopeAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)),
`LogAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)),
INDEX idx_trace_id TraceId TYPE bloom_filter(0.001) GRANULARITY 1,
INDEX idx_res_attr_key mapKeys(ResourceAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_res_attr_value mapValues(ResourceAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_scope_attr_key mapKeys(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_scope_attr_value mapValues(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_log_attr_key mapKeys(LogAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_log_attr_value mapValues(LogAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_body Body TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 8
)
ENGINE = MergeTree
PARTITION BY toDate(TimestampTime)
PRIMARY KEY (ServiceName, TimestampTime)
ORDER BY (ServiceName, TimestampTime, Timestamp)
TTL toDateTime(Timestamp) + toIntervalDay(7)
SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;
otel_logs_tags
sql
CREATE TABLE otel_logs_tags
(
`Timestamp` DateTime CODEC(Delta(4), ZSTD(1)),
`TagKey` LowCardinality(String) CODEC(ZSTD(1)),
`TagVal` String CODEC(ZSTD(1)),
`Count` UInt64 CODEC(ZSTD(1)),
INDEX idx_tag_key TagKey TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_tag_val TagVal TYPE bloom_filter(0.01) GRANULARITY 1
)
ENGINE = SummingMergeTree()
PARTITION BY toDate(Timestamp)
ORDER BY (Timestamp, TagKey, TagVal)
TTL toDate(Timestamp) + toIntervalDay(7)
SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;
otel_logs_tags_mv
sql
CREATE MATERIALIZED VIEW otel_logs_tags_mv
TO otel_logs_tags
(
Timestamp DateTime,
TagKey LowCardinality(String),
TagVal String,
Count UInt64
) AS
SELECT
toStartOfMinute(Timestamp) AS Timestamp,
tag.1 AS TagKey,
tag.2 AS TagVal,
count() AS Count
FROM otel_logs
ARRAY JOIN [
('log.service.name', ServiceName),
('log.severity.text', SeverityText),
('log.severity.number', toString(SeverityNumber)),
('log.attributes.namespace', LogAttributes['namespace']),
('log.attributes.container_image', LogAttributes['container_image']),
('log.attributes.container_name', LogAttributes['container_name']),
('log.attributes.pod_name', LogAttributes['pod_name']),
('log.attributes.pod_ip', LogAttributes['pod_ip'])
] AS tag
WHERE tag.2 IS NOT NULL AND tag.2 != ''
GROUP BY
Timestamp,
TagKey,
TagVal
otel_logs_stats_minute
sql
CREATE TABLE otel_logs_stats_minute
(
`Timestamp` DateTime CODEC(Delta(4), ZSTD(1)),
`ServiceName` LowCardinality(String) CODEC(ZSTD(1)),
`Count` UInt64 CODEC(ZSTD(1))
)
ENGINE = SummingMergeTree
PARTITION BY toDate(Timestamp)
ORDER BY (ServiceName, Timestamp)
TTL toDate(Timestamp) + toIntervalDay(7)
SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;
otel_logs_stats_minute_mv
sql
CREATE MATERIALIZED VIEW otel_logs_stats_minute_mv
TO otel_logs_stats_minute
(
Timestamp DateTime,
ServiceName LowCardinality(String),
Count UInt64
) AS
SELECT
toStartOfMinute(Timestamp) AS Timestamp,
ServiceName,
count() AS Count
FROM otel_logs
WHERE ServiceName != ''
GROUP BY
Timestamp,
ServiceName
API Test
Get Logs
bash
curl 'http://localhost:3000/api/v1/logs/query' \
-X POST \
-H 'Content-Type: application/json' \
-b 'EnvironmentID=1; JSESSIONID=48facfbe9f23884ca89611dbffa62c6c' \
-d '{
"envId": 1,
"timeFrame": {
"startTime": 1750405400,
"endTime": 1750405445
},
"whereClause": "ServiceName = '\''foobar-one'\''",
"paginator": {
"lastTimestamp": ""
}
}'
Field Stats
bash
curl 'http://localhost:3000/api/v1/logs/field/stats' \
-X POST \
-H 'Content-Type: application/json' \
-b 'EnvironmentID=1; JSESSIONID=48facfbe9f23884ca89611dbffa62c6c' \
-d '{
"envId": 1,
"field": "log.service.name",
"timeFrame": {
"startTime": 1750405400,
"endTime": 1750405445
}
}'
bash
curl 'http://localhost:3000/api/v1/logs/field/stats' \
-X POST \
-H 'Content-Type: application/json' \
-b 'EnvironmentID=1; JSESSIONID=48facfbe9f23884ca89611dbffa62c6c' \
-d '{
"envId": 1,
"field": "log.scope.name",
"timeFrame": {
"startTime": 1750405400,
"endTime": 1750405445
}
}'
Get Histogram
bash
curl 'http://localhost:3000/api/v1/logs/histogram' \
-X POST \
-H 'Content-Type: application/json' \
-b 'EnvironmentID=1; JSESSIONID=48facfbe9f23884ca89611dbffa62c6c' \
-d '{
"envId": 1,
"timeFrame": {
"startTime": 1750405400,
"endTime": 1750405445
}
}'