云数据库 ClickHouse 企业版一站式可观测服务,是基于ClickHouse与OpenTelemetry构建的高性能可观测解决方案。它无缝融合了日志(Logs)、调用链(Traces)和指标(Metrics),提供统一的可观测体验,开发者和运维人员无需在不同工具间切换,即可全程跟踪并解决问题。本文为您介绍一站式可观测的相关使用方法。
前提条件
开启服务
登录云数据库ClickHouse控制台,在页面左上角,选择集群所在的地域。
在集群列表页面,选择对应版本的实例列表,单击目标集群ID。
在左侧导航栏单击一站式可观测。
在对话框中,建议勾选自动创建表和导入示例数据,然后单击确定。开启服务预计需要5~10分钟。

参数
说明
自动创建表
集群版本为24.12以下版本:创建数据库
clickobserve_service,并在此库下创建表otel_logs,otel_traces,otel_metrics_gauge,otel_metrics_histogram,otel_metrics_sum,otel_metrics_summary,otel_traces_trace_id_ts,otel_traces_trace_id_ts_mv,otel_metrics_exponential_histogram。点击查看表结构
otel_logs
CREATE TABLE IF NOT EXISTS "clickobserve_service"."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 = SharedMergeTree() PARTITION BY toDate(TimestampTime) PRIMARY KEY (ServiceName, TimestampTime) ORDER BY (ServiceName, TimestampTime, Timestamp) TTL TimestampTime + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;otel_traces
CREATE TABLE IF NOT EXISTS "clickobserve_service"."otel_traces" ( Timestamp DateTime64(9) CODEC(Delta, ZSTD(1)), TraceId String CODEC(ZSTD(1)), SpanId String CODEC(ZSTD(1)), ParentSpanId String CODEC(ZSTD(1)), TraceState String CODEC(ZSTD(1)), SpanName LowCardinality(String) CODEC(ZSTD(1)), SpanKind LowCardinality(String) CODEC(ZSTD(1)), ServiceName LowCardinality(String) CODEC(ZSTD(1)), ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ScopeName String CODEC(ZSTD(1)), ScopeVersion String CODEC(ZSTD(1)), SpanAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), Duration UInt64 CODEC(ZSTD(1)), StatusCode LowCardinality(String) CODEC(ZSTD(1)), StatusMessage String CODEC(ZSTD(1)), Events Nested ( Timestamp DateTime64(9), Name LowCardinality(String), Attributes Map(LowCardinality(String), String) ) CODEC(ZSTD(1)), Links Nested ( TraceId String, SpanId String, TraceState String, Attributes 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_span_attr_key mapKeys(SpanAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_span_attr_value mapValues(SpanAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_duration Duration TYPE minmax GRANULARITY 1 ) ENGINE = SharedMergeTree() PARTITION BY toDate(Timestamp) ORDER BY (ServiceName, SpanName, toDateTime(Timestamp)) TTL toDateTime(Timestamp) + toIntervalDay(180) SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;otel_metrics_gauge
CREATE TABLE IF NOT EXISTS "clickobserve_service"."otel_metrics_gauge" ( ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ResourceSchemaUrl String CODEC(ZSTD(1)), ScopeName String CODEC(ZSTD(1)), ScopeVersion String CODEC(ZSTD(1)), ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)), ScopeSchemaUrl String CODEC(ZSTD(1)), ServiceName LowCardinality(String) CODEC(ZSTD(1)), MetricName String CODEC(ZSTD(1)), MetricDescription String CODEC(ZSTD(1)), MetricUnit String CODEC(ZSTD(1)), Attributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), StartTimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), TimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), Value Float64 CODEC(ZSTD(1)), Flags UInt32 CODEC(ZSTD(1)), Exemplars Nested ( FilteredAttributes Map(LowCardinality(String), String), TimeUnix DateTime64(9), Value Float64, SpanId String, TraceId String ) CODEC(ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree() TTL toDateTime(TimeUnix) + toIntervalDay(180) PARTITION BY toDate(TimeUnix) ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix)) SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;otel_metrics_histogram
CREATE TABLE IF NOT EXISTS "clickobserve_service"."otel_metrics_histogram" ( ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ResourceSchemaUrl String CODEC(ZSTD(1)), ScopeName String CODEC(ZSTD(1)), ScopeVersion String CODEC(ZSTD(1)), ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)), ScopeSchemaUrl String CODEC(ZSTD(1)), ServiceName LowCardinality(String) CODEC(ZSTD(1)), MetricName String CODEC(ZSTD(1)), MetricDescription String CODEC(ZSTD(1)), MetricUnit String CODEC(ZSTD(1)), Attributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), StartTimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), TimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), Count UInt64 CODEC(Delta, ZSTD(1)), Sum Float64 CODEC(ZSTD(1)), BucketCounts Array(UInt64) CODEC(ZSTD(1)), ExplicitBounds Array(Float64) CODEC(ZSTD(1)), Exemplars Nested ( FilteredAttributes Map(LowCardinality(String), String), TimeUnix DateTime64(9), Value Float64, SpanId String, TraceId String ) CODEC(ZSTD(1)), Flags UInt32 CODEC(ZSTD(1)), Min Float64 CODEC(ZSTD(1)), Max Float64 CODEC(ZSTD(1)), AggregationTemporality Int32 CODEC(ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree() TTL toDateTime(TimeUnix) + toIntervalDay(180) PARTITION BY toDate(TimeUnix) ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix)) SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;otel_metrics_sum
CREATE TABLE IF NOT EXISTS "clickobserve_service"."otel_metrics_sum" ( ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ResourceSchemaUrl String CODEC(ZSTD(1)), ScopeName String CODEC(ZSTD(1)), ScopeVersion String CODEC(ZSTD(1)), ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)), ScopeSchemaUrl String CODEC(ZSTD(1)), ServiceName LowCardinality(String) CODEC(ZSTD(1)), MetricName String CODEC(ZSTD(1)), MetricDescription String CODEC(ZSTD(1)), MetricUnit String CODEC(ZSTD(1)), Attributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), StartTimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), TimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), Value Float64 CODEC(ZSTD(1)), Flags UInt32 CODEC(ZSTD(1)), Exemplars Nested ( FilteredAttributes Map(LowCardinality(String), String), TimeUnix DateTime64(9), Value Float64, SpanId String, TraceId String ) CODEC(ZSTD(1)), AggregationTemporality Int32 CODEC(ZSTD(1)), IsMonotonic Boolean CODEC(Delta, ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree() TTL toDateTime(TimeUnix) + toIntervalDay(180) PARTITION BY toDate(TimeUnix) ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix)) SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;otel_metrics_summary
CREATE TABLE IF NOT EXISTS "clickobserve_service"."otel_metrics_summary" ( ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ResourceSchemaUrl String CODEC(ZSTD(1)), ScopeName String CODEC(ZSTD(1)), ScopeVersion String CODEC(ZSTD(1)), ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)), ScopeSchemaUrl String CODEC(ZSTD(1)), ServiceName LowCardinality(String) CODEC(ZSTD(1)), MetricName String CODEC(ZSTD(1)), MetricDescription String CODEC(ZSTD(1)), MetricUnit String CODEC(ZSTD(1)), Attributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), StartTimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), TimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), Count UInt64 CODEC(Delta, ZSTD(1)), Sum Float64 CODEC(ZSTD(1)), ValueAtQuantiles Nested( Quantile Float64, Value Float64 ) CODEC(ZSTD(1)), Flags UInt32 CODEC(ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree() TTL toDateTime(TimeUnix) + toIntervalDay(180) PARTITION BY toDate(TimeUnix) ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix)) SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;otel_traces_trace_id_ts
CREATE TABLE IF NOT EXISTS "clickobserve_service"."otel_traces_trace_id_ts" ( TraceId String CODEC(ZSTD(1)), Start DateTime CODEC(Delta, ZSTD(1)), End DateTime CODEC(Delta, ZSTD(1)), INDEX idx_trace_id TraceId TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree() PARTITION BY toDate(Start) ORDER BY (TraceId, Start) TTL toDateTime(Start) + toIntervalDay(180) SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;物化视图otel_traces_trace_id_ts_mv
CREATE MATERIALIZED VIEW IF NOT EXISTS "clickobserve_service"."otel_traces_trace_id_ts_mv" TO "clickobserve_service"."otel_traces_trace_id_ts" AS SELECT TraceId, min(Timestamp) as Start, max(Timestamp) as End FROM "clickobserve_service"."otel_traces" WHERE TraceId != '' GROUP BY TraceId;otel_metrics_exponential_histogram
CREATE TABLE clickobserve_service.otel_metrics_exponential_histogram ( `ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ResourceSchemaUrl` String CODEC(ZSTD(1)), `ScopeName` String CODEC(ZSTD(1)), `ScopeVersion` String CODEC(ZSTD(1)), `ScopeAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ScopeDroppedAttrCount` UInt32 CODEC(ZSTD(1)), `ScopeSchemaUrl` String CODEC(ZSTD(1)), `ServiceName` LowCardinality(String) CODEC(ZSTD(1)), `MetricName` String CODEC(ZSTD(1)), `MetricDescription` String CODEC(ZSTD(1)), `MetricUnit` String CODEC(ZSTD(1)), `Attributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `StartTimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `TimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `Count` UInt64 CODEC(Delta(8), ZSTD(1)), `Sum` Float64 CODEC(ZSTD(1)), `Scale` Int32 CODEC(ZSTD(1)), `ZeroCount` UInt64 CODEC(ZSTD(1)), `PositiveOffset` Int32 CODEC(ZSTD(1)), `PositiveBucketCounts` Array(UInt64) CODEC(ZSTD(1)), `NegativeOffset` Int32 CODEC(ZSTD(1)), `NegativeBucketCounts` Array(UInt64) CODEC(ZSTD(1)), `Exemplars.FilteredAttributes` Array(Map(LowCardinality(String), String)) CODEC(ZSTD(1)), `Exemplars.TimeUnix` Array(DateTime64(9)) CODEC(ZSTD(1)), `Exemplars.Value` Array(Float64) CODEC(ZSTD(1)), `Exemplars.SpanId` Array(String) CODEC(ZSTD(1)), `Exemplars.TraceId` Array(String) CODEC(ZSTD(1)), `Flags` UInt32 CODEC(ZSTD(1)), `Min` Float64 CODEC(ZSTD(1)), `Max` Float64 CODEC(ZSTD(1)), `AggregationTemporality` Int32 CODEC(ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') PARTITION BY toDate(TimeUnix) ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix)) TTL toDateTime(TimeUnix) + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;集群版本为24.12及以上版本:将开启JSON字段支持,对应表的
ResourceAttributes、ScopeAttributes、LogAttributes、SpanAttributes等部分字段类型为JSON。点击查看表结构
otel_logs
CREATE TABLE clickobserve_service.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` JSON CODEC(ZSTD(1)), `ScopeSchemaUrl` LowCardinality(String) CODEC(ZSTD(1)), `ScopeName` String CODEC(ZSTD(1)), `ScopeVersion` LowCardinality(String) CODEC(ZSTD(1)), `ScopeAttributes` JSON CODEC(ZSTD(1)), `LogAttributes` JSON CODEC(ZSTD(1)), INDEX idx_body Body TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 8 ) ENGINE = SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') PARTITION BY toDate(TimestampTime) PRIMARY KEY (ServiceName, TimestampTime) ORDER BY (ServiceName, TimestampTime, Timestamp) TTL TimestampTime + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;otel_traces
CREATE TABLE clickobserve_service.otel_traces ( `Timestamp` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `TraceId` String CODEC(ZSTD(1)), `SpanId` String CODEC(ZSTD(1)), `ParentSpanId` String CODEC(ZSTD(1)), `TraceState` String CODEC(ZSTD(1)), `SpanName` LowCardinality(String) CODEC(ZSTD(1)), `SpanKind` LowCardinality(String) CODEC(ZSTD(1)), `ServiceName` LowCardinality(String) CODEC(ZSTD(1)), `ResourceAttributes` JSON CODEC(ZSTD(1)), `ScopeName` String CODEC(ZSTD(1)), `ScopeVersion` String CODEC(ZSTD(1)), `SpanAttributes` JSON CODEC(ZSTD(1)), `Duration` UInt64 CODEC(ZSTD(1)), `StatusCode` LowCardinality(String) CODEC(ZSTD(1)), `StatusMessage` String CODEC(ZSTD(1)), `Events.Timestamp` Array(DateTime64(9)) CODEC(ZSTD(1)), `Events.Name` Array(LowCardinality(String)) CODEC(ZSTD(1)), `Events.Attributes` Array(JSON) CODEC(ZSTD(1)), `Links.TraceId` Array(String) CODEC(ZSTD(1)), `Links.SpanId` Array(String) CODEC(ZSTD(1)), `Links.TraceState` Array(String) CODEC(ZSTD(1)), `Links.Attributes` Array(JSON) CODEC(ZSTD(1)), INDEX idx_duration Duration TYPE minmax GRANULARITY 1 ) ENGINE = SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') PARTITION BY toDate(Timestamp) ORDER BY (ServiceName, SpanName, toDateTime(Timestamp), Timestamp) TTL toDateTime(Timestamp) + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;otel_metrics_gauge
CREATE TABLE clickobserve_service.otel_metrics_gauge ( `ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ResourceSchemaUrl` String CODEC(ZSTD(1)), `ScopeName` String CODEC(ZSTD(1)), `ScopeVersion` String CODEC(ZSTD(1)), `ScopeAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ScopeDroppedAttrCount` UInt32 CODEC(ZSTD(1)), `ScopeSchemaUrl` String CODEC(ZSTD(1)), `ServiceName` LowCardinality(String) CODEC(ZSTD(1)), `MetricName` String CODEC(ZSTD(1)), `MetricDescription` String CODEC(ZSTD(1)), `MetricUnit` String CODEC(ZSTD(1)), `Attributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `StartTimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `TimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `Value` Float64 CODEC(ZSTD(1)), `Flags` UInt32 CODEC(ZSTD(1)), `Exemplars.FilteredAttributes` Array(Map(LowCardinality(String), String)) CODEC(ZSTD(1)), `Exemplars.TimeUnix` Array(DateTime64(9)) CODEC(ZSTD(1)), `Exemplars.Value` Array(Float64) CODEC(ZSTD(1)), `Exemplars.SpanId` Array(String) CODEC(ZSTD(1)), `Exemplars.TraceId` Array(String) CODEC(ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') PARTITION BY toDate(TimeUnix) ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix)) TTL toDateTime(TimeUnix) + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;otel_metrics_histogram
CREATE TABLE clickobserve_service.otel_metrics_histogram ( `ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ResourceSchemaUrl` String CODEC(ZSTD(1)), `ScopeName` String CODEC(ZSTD(1)), `ScopeVersion` String CODEC(ZSTD(1)), `ScopeAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ScopeDroppedAttrCount` UInt32 CODEC(ZSTD(1)), `ScopeSchemaUrl` String CODEC(ZSTD(1)), `ServiceName` LowCardinality(String) CODEC(ZSTD(1)), `MetricName` String CODEC(ZSTD(1)), `MetricDescription` String CODEC(ZSTD(1)), `MetricUnit` String CODEC(ZSTD(1)), `Attributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `StartTimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `TimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `Count` UInt64 CODEC(Delta(8), ZSTD(1)), `Sum` Float64 CODEC(ZSTD(1)), `BucketCounts` Array(UInt64) CODEC(ZSTD(1)), `ExplicitBounds` Array(Float64) CODEC(ZSTD(1)), `Exemplars.FilteredAttributes` Array(Map(LowCardinality(String), String)) CODEC(ZSTD(1)), `Exemplars.TimeUnix` Array(DateTime64(9)) CODEC(ZSTD(1)), `Exemplars.Value` Array(Float64) CODEC(ZSTD(1)), `Exemplars.SpanId` Array(String) CODEC(ZSTD(1)), `Exemplars.TraceId` Array(String) CODEC(ZSTD(1)), `Flags` UInt32 CODEC(ZSTD(1)), `Min` Float64 CODEC(ZSTD(1)), `Max` Float64 CODEC(ZSTD(1)), `AggregationTemporality` Int32 CODEC(ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') PARTITION BY toDate(TimeUnix) ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix)) TTL toDateTime(TimeUnix) + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;otel_metrics_sum
CREATE TABLE IF NOT EXISTS clickobserve_service.otel_metrics_sum ( ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ResourceSchemaUrl String CODEC(ZSTD(1)), ScopeName String CODEC(ZSTD(1)), ScopeVersion String CODEC(ZSTD(1)), ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)), ScopeSchemaUrl String CODEC(ZSTD(1)), ServiceName LowCardinality(String) CODEC(ZSTD(1)), MetricName String CODEC(ZSTD(1)), MetricDescription String CODEC(ZSTD(1)), MetricUnit String CODEC(ZSTD(1)), Attributes Map(LowCardinality(String), String) CODEC(ZSTD(1)), StartTimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), TimeUnix DateTime64(9) CODEC(Delta, ZSTD(1)), Value Float64 CODEC(ZSTD(1)), Flags UInt32 CODEC(ZSTD(1)), Exemplars Nested ( FilteredAttributes Map(LowCardinality(String), String), TimeUnix DateTime64(9), Value Float64, SpanId String, TraceId String ) CODEC(ZSTD(1)), AggregationTemporality Int32 CODEC(ZSTD(1)), IsMonotonic Boolean CODEC(Delta, ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree() TTL toDateTime(TimeUnix) + toIntervalDay(180) PARTITION BY toDate(TimeUnix) ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix)) SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;otel_metrics_summary
CREATE TABLE clickobserve_service.otel_metrics_summary ( `ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ResourceSchemaUrl` String CODEC(ZSTD(1)), `ScopeName` String CODEC(ZSTD(1)), `ScopeVersion` String CODEC(ZSTD(1)), `ScopeAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ScopeDroppedAttrCount` UInt32 CODEC(ZSTD(1)), `ScopeSchemaUrl` String CODEC(ZSTD(1)), `ServiceName` LowCardinality(String) CODEC(ZSTD(1)), `MetricName` String CODEC(ZSTD(1)), `MetricDescription` String CODEC(ZSTD(1)), `MetricUnit` String CODEC(ZSTD(1)), `Attributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `StartTimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `TimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `Count` UInt64 CODEC(Delta(8), ZSTD(1)), `Sum` Float64 CODEC(ZSTD(1)), `ValueAtQuantiles.Quantile` Array(Float64) CODEC(ZSTD(1)), `ValueAtQuantiles.Value` Array(Float64) CODEC(ZSTD(1)), `Flags` UInt32 CODEC(ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') PARTITION BY toDate(TimeUnix) ORDER BY ( ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix) ) TTL toDateTime(TimeUnix) + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;otel_traces_trace_id_ts
CREATE TABLE clickobserve_service.otel_traces_trace_id_ts ( `TraceId` String CODEC(ZSTD(1)), `Start` DateTime CODEC(Delta(4), ZSTD(1)), `End` DateTime CODEC(Delta(4), ZSTD(1)), INDEX idx_trace_id TraceId TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') PARTITION BY toDate(Start) ORDER BY ( TraceId, Start ) TTL toDateTime(Start) + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;物化视图otel_traces_trace_id_ts_mv
CREATE MATERIALIZED VIEW clickobserve_service.otel_traces_trace_id_ts_mv TO clickobserve_service.otel_traces_trace_id_ts ( `TraceId` String, `Start` DateTime64(9), `End` DateTime64(9) ) AS SELECT TraceId, min(Timestamp) AS Start, max(Timestamp) AS End FROM clickobserve_service.otel_traces WHERE TraceId != '' GROUP BY TraceId;otel_metrics_exponential_histogram
CREATE TABLE clickobserve_service.otel_metrics_exponential_histogram ( `ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ResourceSchemaUrl` String CODEC(ZSTD(1)), `ScopeName` String CODEC(ZSTD(1)), `ScopeVersion` String CODEC(ZSTD(1)), `ScopeAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `ScopeDroppedAttrCount` UInt32 CODEC(ZSTD(1)), `ScopeSchemaUrl` String CODEC(ZSTD(1)), `ServiceName` LowCardinality(String) CODEC(ZSTD(1)), `MetricName` String CODEC(ZSTD(1)), `MetricDescription` String CODEC(ZSTD(1)), `MetricUnit` String CODEC(ZSTD(1)), `Attributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), `StartTimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `TimeUnix` DateTime64(9) CODEC(Delta(8), ZSTD(1)), `Count` UInt64 CODEC(Delta(8), ZSTD(1)), `Sum` Float64 CODEC(ZSTD(1)), `Scale` Int32 CODEC(ZSTD(1)), `ZeroCount` UInt64 CODEC(ZSTD(1)), `PositiveOffset` Int32 CODEC(ZSTD(1)), `PositiveBucketCounts` Array(UInt64) CODEC(ZSTD(1)), `NegativeOffset` Int32 CODEC(ZSTD(1)), `NegativeBucketCounts` Array(UInt64) CODEC(ZSTD(1)), `Exemplars.FilteredAttributes` Array(Map(LowCardinality(String), String)) CODEC(ZSTD(1)), `Exemplars.TimeUnix` Array(DateTime64(9)) CODEC(ZSTD(1)), `Exemplars.Value` Array(Float64) CODEC(ZSTD(1)), `Exemplars.SpanId` Array(String) CODEC(ZSTD(1)), `Exemplars.TraceId` Array(String) CODEC(ZSTD(1)), `Flags` UInt32 CODEC(ZSTD(1)), `Min` Float64 CODEC(ZSTD(1)), `Max` Float64 CODEC(ZSTD(1)), `AggregationTemporality` Int32 CODEC(ZSTD(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_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') PARTITION BY toDate(TimeUnix) ORDER BY ( ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix) ) TTL toDateTime(TimeUnix) + toIntervalDay(180) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1;
导入示例数据
会向logs、traces、metrics表导入符合OpenTelemetry协议的样例数据,压缩前不到200MB。
服务开启后,如果本机IP不在实例的白名单中,系统将提示自动添加。

使用流程
主页面
在实例详情页左侧导航栏单击一站式可观测,根据页面上方提示,前往服务主页面。

输入用户名与密码,登录主页面。创建数据库账号,请参见企业版账号管理。
登录后进入主页面(搜索页面),您可以在页面上方选择数据源、设置时间范围和筛选条件查询数据。

在Filters区域,勾选筛选条件后,将自动筛选出符合条件的log。
单击log所在行前方的
,可在当前页面查看对应log的信息。单击log所在行,可查看对应log的详细信息,包括完整的attribute、关联trace的耗时信息以及本条log的上下文信息。
自定义大盘
服务提供预设大盘供您直接使用,您可以单击左侧导航栏的PRESETS>Services查看。您也可以创建自定义大盘,将感兴趣的指标聚合展示在同一个报表中。
单击页面左侧导航栏的Create Dashboard。
单击Add New Tile。

设置数据源与指标,并单击保存。

服务配置
如果您在开启服务时勾选了自动创建表,则已为您自动配置对应表的服务配置。您也可以按需配置其他表作为数据源。
单击页面左侧导航栏的Team Settings。
在Sources区域配置数据源,用于定义logs、metrics、traces数据来源于哪个表,以及列的映射关系。数据配置请参见下方:
logs

metrics

traces

在Connections区域配置连接配置,用于配置可观测服务与云数据库ClickHouse实例的连接。默认会创建一个到本实例的连接配置。其中Host表示与云数据库ClickHouse实例的Endpoint,仅支持使用VPC地址。若您配置实例Endpoint后在实例控制台上修改Endpoint地址,则需要重新配置。
在ClickHouse Client Settings区域,配置可观测服务在云数据库ClickHouse实例上的查询参数。
用户偏好
您可以在左侧导航栏下方,单击用户名,然后选择User Preferences,设置用户偏好。