一站式可觀測

更新時間:
Copy as MD

雲資料庫 ClickHouse 企業版一站式可觀測服務,是基於ClickHouseOpenTelemetry構建的高效能可觀測解決方案。它無縫融合了日誌(Logs)、調用鏈(Traces)和指標(Metrics),提供統一的可觀測體驗,開發人員和營運人員無需在不同工具間切換,即可全程跟蹤並解決問題。同時,一站式可觀測內建智能可觀測資料分析AI助手,能夠自動查詢OTel可觀測資料(Traces/Logs/Metrics),通過SQL查詢和結構化RCA流程,自動完成可觀測性故障排查與根因定位。本文為您介紹一站式可觀測的相關使用方法。

前提條件

建立雲資料庫 ClickHouse 叢集

  • 雲資料庫 ClickHouse 企業版支援直接一鍵開通一站式可觀測能力。

  • 雲資料庫 ClickHouse 社區相容版一站式可觀測能力目前處於邀測階段,如需開啟請提交工單聯絡支援人員加白處理。

開啟服務

  1. 登入雲資料庫ClickHouse控制台,在頁面左上方,選擇叢集所在的地區。

  2. 集群清單頁面,選擇對應版本的執行個體列表,單擊目的地組群ID。

  3. 在左側導覽列單擊一站式可观测

  4. 在對話方塊中,建議勾選自动创建表导入示例数据,並按需決定是否支援公網訪問大模型,然後單擊確定。開啟服務預計需要5~10分鐘。

    重要
    • 勾選支援公網訪問大模型會產生額外費用,需要按需開啟。

    • 支援在服務開通完成後再單獨開啟公網訪問大模型。

    參數

    說明

    自動建立表

    • 建立資料庫clickobserve_service,並在此庫下建立表otel_logsotel_tracesotel_metrics_gaugeotel_metrics_histogramotel_metrics_sumotel_metrics_summaryotel_traces_trace_id_tsotel_traces_trace_id_ts_mvotel_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;
      

    匯入樣本資料

    會向logs、traces、metrics表匯入符合OpenTelemetry協議的範例資料,壓縮前不到200MB。

    支援公網訪問大模型

    大模型服務只能通過公網出口訪問,因此為了使用可觀測資料智能AI助手,需要為一站式可觀測服務節點開啟公網訪問能力。勾選該選項後,系統將在當前帳號下使用當前執行個體所屬VPC自動建立一個公網NAT Gateway、一個Elastic IP Address(EIP)以及配置一條SNAT路由規則,通過該網關支援一站式可觀測節點訪問公網大模型。

    • 公網NAT GatewayEIP獨立計費。NAT Gateway計費規則請參見NAT Gateway計費,EIP計費規則請參見計費概述。其中NAT GatewayEIP執行個體均為隨用隨付(後付費)類型,EIP預設頻寬為5 Mbps。

    • 如果開通時當前VPC下已存在NAT Gateway執行個體,系統不會建立NAT Gateway,只會建立EIP執行個體並建立SNAT路由規則。

  5. 服務開啟後,如果本機IP不在執行個體的白名單中,系統將提示自動添加。

開通公網訪問大模型能力

如果您在開啟一站式可觀測服務時未勾選支援公網訪問大模型,可觀測資料智能AI助手將無法正常使用。您可以在服務開通後通過以下兩種方式開通該能力。

ClickHouse控制台一鍵開通

  1. 登入雲資料庫ClickHouse控制台,在頁面左上方,選擇叢集所在的地區。

  2. 集群清單頁面,選擇對應版本的執行個體列表,單擊目的地組群ID。

  3. 在左側導覽列單擊一站式可观测

  4. 在公網訪問提示欄中,單擊開通公網訪問大模型

    一站式可觀測服務將進入公網開通中狀態,預計需要1~2分鐘。開通過程中無法訪問一站式可觀測服務,開通完成後狀態恢複。

開通完成後,您可以在一站式可觀測頁面查看自動建立的公網NAT執行個體ID、EIP執行個體ID以及EIP公網地址。

手動設定

如果您需要更靈活的網路設定,可以手動建立EIPNAT Gateway。

步驟一:建立Elastic IP Address(EIP)

  1. 登入Elastic IP Address管理主控台
  2. 選擇與ClickHouse叢集相同的地區,建立一個彈性公網 IP執行個體。

步驟二:建立公網NAT Gateway並綁定EIP

  1. 前往NAT Gateway - 公網 NAT Gateway購買頁

  2. 如果ClickHouse叢集所屬VPC下無公網NAT Gateway執行個體,單擊建立公網NAT Gateway,選擇與ClickHouse叢集相同的地區和VPC,並選擇步驟一中建立的Elastic IP Address執行個體進行綁定。

  3. 如果ClickHouse叢集所屬VPC下已存在公網NAT Gateway執行個體,在公網NAT Gateway控制台的執行個體列表頁面,單擊對應執行個體的更多 > 綁定Elastic IP Address,選擇步驟一中建立的EIP進行綁定。

步驟三:建立SNAT條目

  1. 前往公網 NAT Gateway頁面,進入目標NAT Gateway執行個體詳情頁面。

  2. 單擊SNAT管理選項卡,然後單擊建立SNAT條目

  3. SNAT條目粒度選擇ECS/彈性網卡粒度

  4. ECS/彈性網卡選項中,選擇名稱為rds-eni-<ClickHouse執行個體ID>-webui的輔助彈性網卡。

  5. 選擇Elastic IP Address地址為步驟一中建立的EIP。

  6. 單擊確定,等待SNAT條目建立完成。

公網訪問資源釋放

重要

出於業務安全考慮,ClickHouse執行個體釋放時不會自動刪除建立的NAT Gateway以及EIP執行個體,釋放執行個體後需要在相應控制台進行手動釋放。

資源釋放:

  • 對於一鍵開通的公網資源

    由一站式可觀測服務自動建立的NATEIP資源可以通過標籤createdby:<執行個體ID>進行篩選並刪除。

  • 對於手動建立的公網資源

    需要結合業務使用方式決定是否需要刪除。

使用流程

首頁面

  1. 在執行個體詳情頁左側導覽列單擊一站式可观测,根據頁面上方提示,前往服務首頁面。

  2. 輸入使用者名稱與密碼,登入首頁面。建立資料庫帳號,請參見企業版帳號管理社區相容版帳號管理

  3. 登入後進入首頁面(搜尋網頁面),您可以在頁面上方選擇資料來源、設定時間範圍和篩選條件查詢資料。

    image

    • Filters地區,勾選篩選條件後,將自動篩選出合格log。

    • 單擊log所在行前方的image,可在當前頁面查看對應log的資訊。

    • 單擊log所在行,可查看對應log的詳細資料,包括完整的attribute、關聯trace的耗時資訊以及本條log的上下文資訊。

可觀測資料智能AI助手

可觀測資料智能AI助手可以協助進行OTEL可觀測資料相關表的資料分析工作,可以自動識別執行個體中OTEL可觀測資料相關的庫表資訊,自動根據業務需求構造查詢語句擷取可觀測資料,最後自動化分析並返回診斷結果,應用情境主要包括:業務趨勢分析、資料量分析、RCA異常根因診斷等。

前提條件

已開通公網訪問大模型能力。

使用方法

  1. 在一站式可觀測首頁面,單擊頁面左側導覽列的AI NoteBook按鈕。

  2. AI助手聊天視窗中,輸入您需要分析的問題,AI助手將自動查詢可觀測資料並返回分析結果。

常見情境展示

(1)定位業務日誌錯誤率

問題案例:

  • 幫我分析一下過去一個小時裡,我的OpenClaw程式有沒有什麼異常

  • 幫我分析一下過去10分鐘,我的管控trace資料哪些組件錯誤率較高

診斷結果

結論
根據對 clickobserve_service.otel_traces 表在 2026-05-06 19:50:00 至 2026-05-06 20:00:00 時間範圍內的採樣分析:

錯誤率統計
- 整體錯誤率約為 0.32%(基於 7 個 0.5 秒時間視窗的採樣資料,共 248,077 個 Span)
- 錯誤 Span 總量:917
- 正常 Span(OK + UNSET):207,150

StatusCode 分布
StatusCode    數量        佔比      備忘
UNSET         139,911     74.7%     -
OK            66,247      23.08%    -
ERROR         919         0.32%     -

證據
- 查看 artifact 源自 /artifacts/sessions/c-b859bd2-3942-4d85-b636-51dae0d****/sql_results.json

局限性
- 採樣偏差:由於 ClickHouse 的 max_rows_to_read 限制(20 萬行),無法覆蓋所有資料 10 分鐘資料,實際樣本有偏差
- 時間視窗代表性:採樣點分布在 19:50~20:00 之間,如可能存在僅大量資料的區間被遺漏
- 誤差範圍:實際錯誤率可能在 0.2% ~ 0.5% 之間浮動

後續步驟(如需要更精確分析)
- 如需精確錯誤率,可能需要調整查看完成加採樣比的和數量
- 如對異常感興趣的,可以一步查詢 StatusMessage 或 Events 欄位擷取錯誤詳情
- 對有 SpanName 或 ServiceName 做更深下鑽,定位具體是哪些服務的異常貢獻
(2)根因診斷

問題案例:

  • 幫我分析一下最近一個小時,我的管控組件日誌有沒有報錯,並分析他們的錯誤原因

  • 為什麼我有一個網關請求報錯了,requestId/traceId = ea7d2925-3422-4920-9ab1-b22dd3d85b2f,幫我分析一下詳細原因

診斷結果

錯誤資料分析結論
基於對 clickobserve_service.otel_traces 表在 2026-05-06 19:50:00 至 20:00:00 時間範圍內的採樣分析,以下是錯誤採樣資料和錯誤分析結果。

一、錯誤類型分布
HTTP 狀態代碼    錯誤數量    佔比     類型             描述
404            81         -64%    資源不存在        -
500            19         -10%    伺服器內部錯誤     -
503            3          -2%     服務不可用         -
206            1          -2%     部分內容傳輸       可視為邊緣可能 1000 萬請求偶發

二、典型錯誤案例分析

案例 1:404 Not Found — 資源檔路徑不存在
- TraceId:b1b97380c855083a23ec76ace14e53be
- SpanName:GET
- 請求路徑:http://test-xxxx.com/api/v1.0/clusterInstances/3463****
- 錯誤原因:目標資源ID 19 36317596 對於目標伺服器不存在,確認服務部署和路由配置中 TraceId 下所有關聯 Span 均為 404
- 證據連結:/artifacts/sessions/c-b859bd2-3942-4d85-b636-51dae0d18ae/sql_results.json行22

案例 2:503 Service Unavailable — 服務暫時不可用
- TraceId:b1b97380c855083a23ec76ace14e53be
- SpanName:GET / POST
- 請求路徑:http://test-xxxx.com/api/v1.0/replicatSets/308351****/myfd
- 證據連結:/artifacts/sessions/c-b859bd2-3942-4d85-b636-51dae0d18ae/sql_results.json行22

案例 3:STS 服務調用報錯
- SpanName:POST https://sts.cn-hangzhou.null/
- 錯誤類型:.null 網域名稱,即網域名稱解析錯誤或 DNS 解析失敗
- STS 服務可能在配置中缺少網域名稱
- 證據連結:/artifacts/sessions/c-b859bd2-3942-4d85-b636-51dae0d18ae/sql_results.json行10

案例 4:基礎錯誤 Error 類型
...

會話管理

AI助手支援建立並管理多個會話,您可以進行以下操作:

  • 建立會話:在服務頁面單擊頂部的+按鈕,輸入會話名稱建立新的會話。

  • 刪除會話:在服務頁面單擊頂部的刪除按鈕,即可刪除當前會話。

  • 重新命名會話:在服務頁面單擊頂部的編輯按鈕,輸入新名稱後按斷行符號確認。

切換輸出模式

AI助手支援兩種輸出模式,您可以通過聊天視窗中的切換按鈕進行切換:

  • 流式輸出(預設):即時逐步展示分析結果,響應速度更快。

  • 普通輸出:等待分析完成後一次性展示完整結果。

自訂大盤

服務提供預設大盤供您直接使用,您可以單擊左側導覽列的PRESETS>Services查看。您也可以建立自訂大盤,將感興趣的指標彙總展示在同一個報表中。

  1. 單擊頁面左側導覽列的Create Dashboard

  2. 單擊Add New Tile

    image

  3. 設定資料來源與指標,並單擊儲存。

    image

服務配置

如果您在開啟服務時勾選了自动创建表,則已為您自動設定對應表的服務配置。您也可以按需配置其他表作為資料來源。

  1. 單擊頁面左側導覽列的Team Settings

  2. Sources地區配置資料來源,用於定義logs、metrics、traces資料來源於哪個表,以及列的映射關係。資料配置請參見下方:

    logs

    image

    metrics

    image

    traces

    image

  3. Connections地區配置串連配置,用於配置可觀測服務與雲資料庫ClickHouse執行個體的串連。預設會建立一個到本執行個體的串連配置。其中Host表示與雲資料庫ClickHouse執行個體的Endpoint,僅支援使用VPC地址。若您配置執行個體Endpoint後在執行個體控制台上修改Endpoint地址,則需要重新設定。

  4. ClickHouse Client Settings地區,配置可觀測服務在雲資料庫ClickHouse執行個體上的查詢參數。

使用者偏好

您可以在左側導覽列下方,單擊使用者名稱,然後選擇User Preferences,設定使用者偏好。

相關文檔