雲資料庫 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,設定使用者偏好。