Перейти к основному содержанию
Перейти к основному содержанию

ClickHouse Cloud

Private preview in ClickHouse Cloud
Закрытый предварительный просмотр

Эта функция находится в режиме закрытого предварительного просмотра в ClickHouse Cloud. Если ваша организация заинтересована в приоритетном доступе, присоединяйтесь к списку ожидания.

Если вы только начинаете работать с ClickHouse Cloud, нажмите здесь, чтобы узнать больше, или зарегистрируйтесь для бесплатной пробной версии, чтобы начать работу.

Этот вариант предназначен для пользователей ClickHouse Cloud. В этом варианте развертывания и ClickHouse, и HyperDX размещаются в ClickHouse Cloud, что минимизирует количество компонентов, которые пользователю необходимо хостить самостоятельно.

Помимо снижения объёма управления инфраструктурой, такой вариант развертывания обеспечивает интеграцию аутентификации с SSO/SAML ClickHouse Cloud. В отличие от самостоятельно развернутых инсталляций, здесь также нет необходимости поднимать экземпляр MongoDB для хранения состояния приложения — такого как дашборды, сохранённые запросы, пользовательские настройки и оповещения.

В этом режиме ингестия данных полностью остаётся на стороне пользователя. Вы можете выполнять приём данных в ClickHouse Cloud с помощью собственного развернутого коллектора OpenTelemetry, прямого приёма из клиентских библиотек, нативных табличных движков ClickHouse (таких как Kafka или S3), ETL-пайплайнов или ClickPipes — управляемого сервиса ингестии ClickHouse Cloud. Такой подход обеспечивает самый простой и высокопроизводительный способ эксплуатации ClickStack.

Подходит для

Этот паттерн развертывания оптимален в следующих сценариях:

  1. У вас уже есть данные наблюдаемости в ClickHouse Cloud, и вы хотите визуализировать их с помощью HyperDX.
  2. Вы управляете крупным развертыванием системы наблюдаемости и нуждаетесь в выделенной производительности и масштабируемости ClickStack в связке с ClickHouse Cloud.
  3. Вы уже используете ClickHouse Cloud для аналитики и хотите инструментировать свое приложение с помощью библиотек инструментирования ClickStack, отправляя данные в тот же кластер. В этом случае мы рекомендуем использовать warehouses для изоляции вычислительных ресурсов под рабочие нагрузки наблюдаемости.

Шаги по развертыванию

В этом руководстве предполагается, что у вас уже создан сервис ClickHouse Cloud. Если вы ещё не создали сервис, выполните шаг "Создать сервис ClickHouse" из нашего руководства по быстрому старту.

Копирование учетных данных службы (необязательно)

Если у вас уже есть события наблюдаемости, которые требуется визуализировать в вашем сервисе, этот шаг можно пропустить.

Перейдите к основному списку сервисов и выберите сервис, события наблюдаемости которого вы хотите визуализировать в HyperDX.

Нажмите кнопку Connect в меню навигации. Откроется модальное окно с учетными данными для подключения к вашему сервису и инструкциями по подключению через различные интерфейсы и языки программирования. Выберите HTTPS из выпадающего списка и сохраните адрес конечной точки подключения и учетные данные.

Подключение к ClickHouse Cloud

Развертывание OpenTelemetry Collector (необязательно)

Если у вас уже есть события наблюдаемости, которые требуется визуализировать в вашем сервисе, этот шаг можно пропустить.

Этот шаг обеспечивает создание таблиц со схемой OpenTelemetry (OTel), которая в дальнейшем может быть использована для создания источника данных в HyperDX. Также предоставляется конечная точка OLTP для загрузки примеров наборов данных и отправки событий OTel в ClickStack.

Использование стандартного коллектора OpenTelemetry

В следующих инструкциях используется стандартный дистрибутив OTel collector, а не дистрибутив ClickStack. Последний требует OpAMP-сервер для конфигурации. В настоящее время это не поддерживается в закрытой предварительной версии. Приведенная ниже конфигурация воспроизводит версию, используемую дистрибутивом ClickStack для коллектора, предоставляя OTLP-эндпоинт, на который могут отправляться события.

Загрузите конфигурацию для OTel collector:

curl -O https://raw.githubusercontent.com/ClickHouse/clickhouse-docs/refs/heads/main/docs/use-cases/observability/clickstack/deployment/_snippets/otel-cloud-config.yaml
otel-cloud-config.yaml
receivers:
  otlp/hyperdx:
    protocols:
      grpc:
        include_metadata: true
        endpoint: '0.0.0.0:4317'
      http:
        cors:
          allowed_origins: ['*']
          allowed_headers: ['*']
        include_metadata: true
        endpoint: '0.0.0.0:4318'
processors:
  transform:
    log_statements:
      - context: log
        error_mode: ignore
        statements:
          # Парсинг JSON: расширяет атрибуты лога полями из структурированного содержимого тела лога — либо в виде карты OTEL, либо
          # в виде строки с JSON-содержимым.
          - set(log.cache, ExtractPatterns(log.body, "(?P<0>(\\{.*\\}))")) where
            IsString(log.body)
          - merge_maps(log.attributes, ParseJSON(log.cache["0"]), "upsert")
            where IsMap(log.cache)
          - flatten(log.attributes) where IsMap(log.cache)
          - merge_maps(log.attributes, log.body, "upsert") where IsMap(log.body)
      - context: log
        error_mode: ignore
        conditions:
          - severity_number == 0 and severity_text == ""
        statements:
          # Определение: извлечение первого ключевого слова уровня лога из первых 256 символов тела
          - set(log.cache["substr"], log.body.string) where Len(log.body.string)
            < 256
          - set(log.cache["substr"], Substring(log.body.string, 0, 256)) where
            Len(log.body.string) >= 256
          - set(log.cache, ExtractPatterns(log.cache["substr"],
            "(?i)(?P<0>(alert|crit|emerg|fatal|error|err|warn|notice|debug|dbug|trace))"))
          # Определение: обнаружение FATAL
          - set(log.severity_number, SEVERITY_NUMBER_FATAL) where
            IsMatch(log.cache["0"], "(?i)(alert|crit|emerg|fatal)")
          - set(log.severity_text, "fatal") where log.severity_number ==
            SEVERITY_NUMBER_FATAL
          # Определение: обнаружение ERROR
          - set(log.severity_number, SEVERITY_NUMBER_ERROR) where
            IsMatch(log.cache["0"], "(?i)(error|err)")
          - set(log.severity_text, "error") where log.severity_number ==
            SEVERITY_NUMBER_ERROR
          # Определение: обнаружение WARN
          - set(log.severity_number, SEVERITY_NUMBER_WARN) where
            IsMatch(log.cache["0"], "(?i)(warn|notice)")
          - set(log.severity_text, "warn") where log.severity_number ==
            SEVERITY_NUMBER_WARN
          # Определение: обнаружение DEBUG
          - set(log.severity_number, SEVERITY_NUMBER_DEBUG) where
            IsMatch(log.cache["0"], "(?i)(debug|dbug)")
          - set(log.severity_text, "debug") where log.severity_number ==
            SEVERITY_NUMBER_DEBUG
          # Определение: обнаружение TRACE
          - set(log.severity_number, SEVERITY_NUMBER_TRACE) where
            IsMatch(log.cache["0"], "(?i)(trace)")
          - set(log.severity_text, "trace") where log.severity_number ==
            SEVERITY_NUMBER_TRACE
          # Определение: в остальных случаях
          - set(log.severity_text, "info") where log.severity_number == 0
          - set(log.severity_number, SEVERITY_NUMBER_INFO) where log.severity_number == 0
      - context: log
        error_mode: ignore
        statements:
          # Нормализация регистра поля severity_text
          - set(log.severity_text, ConvertCase(log.severity_text, "lower"))
  resourcedetection:
    detectors:
      - env
      - system
      - docker
    timeout: 5s
    override: false
  batch:
  memory_limiter:
    # 80% от максимальной памяти (до 2 ГБ), настройте для сред с ограниченной памятью
    limit_mib: 1500
    # 25% от лимита (до 2 ГБ), настройте для сред с ограниченной памятью
    spike_limit_mib: 512
    check_interval: 5s
connectors:
  routing/logs:
    default_pipelines: [logs/out-default]
    error_mode: ignore
    table:
      - context: log
        statement: route() where IsMatch(attributes["rr-web.event"], ".*")
        pipelines: [logs/out-rrweb]
exporters:
  debug:
    verbosity: detailed
    sampling_initial: 5
    sampling_thereafter: 200
  clickhouse/rrweb:
    database: ${env:CLICKHOUSE_DATABASE}
    endpoint: ${env:CLICKHOUSE_ENDPOINT}
    password: ${env:CLICKHOUSE_PASSWORD}
    username: ${env:CLICKHOUSE_USER}
    ttl: 720h
    logs_table_name: hyperdx_sessions
    timeout: 5s
    retry_on_failure:
      enabled: true
      initial_interval: 5s
      max_interval: 30s
      max_elapsed_time: 300s
  clickhouse:
    database: ${env:CLICKHOUSE_DATABASE}
    endpoint: ${env:CLICKHOUSE_ENDPOINT}
    password: ${env:CLICKHOUSE_PASSWORD}
    username: ${env:CLICKHOUSE_USER}
    ttl: 720h
    timeout: 5s
    retry_on_failure:
      enabled: true
      initial_interval: 5s
      max_interval: 30s
      max_elapsed_time: 300s
extensions:
  health_check:
    endpoint: :13133
service:
  pipelines:
    traces:
      receivers: [otlp/hyperdx]
      processors: [memory_limiter, batch]
      exporters: [clickhouse]
    metrics:
      receivers: [otlp/hyperdx]
      processors: [memory_limiter, batch]
      exporters: [clickhouse]
    logs/in:
      receivers: [otlp/hyperdx]
      exporters: [routing/logs]
    logs/out-default:
      receivers: [routing/logs]
      processors: [memory_limiter, transform, batch]
      exporters: [clickhouse]
    logs/out-rrweb:
      receivers: [routing/logs]
      processors: [memory_limiter, batch]
      exporters: [clickhouse/rrweb]

Разверните коллектор с помощью следующей команды Docker, указав соответствующие переменные окружения со значениями параметров подключения, зафиксированными ранее, и выбрав подходящую команду ниже в зависимости от вашей операционной системы.

# укажите endpoint вашего облачного экземпляра
export CLICKHOUSE_ENDPOINT=
export CLICKHOUSE_PASSWORD=
# при необходимости измените 
export CLICKHOUSE_DATABASE=default

# osx
docker run --rm -it \
  -p 4317:4317 -p 4318:4318 \
  -e CLICKHOUSE_ENDPOINT=${CLICKHOUSE_ENDPOINT} \
  -e CLICKHOUSE_USER=default \
  -e CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD} \
  -e CLICKHOUSE_DATABASE=${CLICKHOUSE_DATABASE} \
  --user 0:0 \
  -v "$(pwd)/otel-cloud-collector.yaml":/etc/otel/config.yaml \
  -v /var/log:/var/log:ro \
  -v /private/var/log:/private/var/log:ro \
  otel/opentelemetry-collector-contrib:latest \
  --config /etc/otel/config.yaml

# команда для linux

# docker run --network=host --rm -it \
#   -e CLICKHOUSE_ENDPOINT=${CLICKHOUSE_ENDPOINT} \
#   -e CLICKHOUSE_USER=default \
#   -e CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD} \
#   -e CLICKHOUSE_DATABASE=${CLICKHOUSE_DATABASE} \
#   --user 0:0 \
#   -v "$(pwd)/otel-cloud-config.yaml":/etc/otel/config.yaml \
#   -v /var/log:/var/log:ro \
#   -v /private/var/log:/private/var/log:ro \
#   otel/opentelemetry-collector-contrib:latest \
#   --config /etc/otel/config.yaml
Примечание

В производственной среде рекомендуется создать выделенного пользователя для ингестии, ограничив права доступа к необходимым базе данных и таблицам. Подробности см. в разделе "База данных и пользователь для ингестии".

Подключение к HyperDX

Выберите нужный сервис, затем выберите HyperDX в меню слева.

ClickHouse Cloud HyperDX

Создавать пользователя не потребуется — вы будете автоматически аутентифицированы, после чего система предложит создать источник данных.

Пользователям, которые хотят только изучить интерфейс HyperDX, мы рекомендуем наши примеры наборов данных, использующие данные OTel.

Главная страница HyperDX в ClickHouse Cloud

Разрешения пользователя

Пользователи, получающие доступ к HyperDX, автоматически проходят аутентификацию с помощью учётных данных консоли ClickHouse Cloud. Управление доступом осуществляется через разрешения SQL-консоли, настроенные в параметрах сервиса.

Настройка доступа пользователей

  1. Перейдите к своему сервису в консоли ClickHouse Cloud
  2. Перейдите в раздел SettingsSQL Console Access
  3. Установите соответствующий уровень прав доступа для каждого пользователя:
    • Service Admin → Full Access - Необходимо для включения оповещений
    • Service Read Only → Read Only - Позволяет просматривать данные наблюдаемости и создавать дашборды
    • No access - Не имеет доступа к HyperDX
ClickHouse Cloud (только чтение)
Для оповещений требуется доступ администратора

Чтобы включить оповещения, хотя бы один пользователь с правами Service Admin (соответствует Full Access в выпадающем списке SQL Console Access) должен войти в HyperDX как минимум один раз. Это создаст выделенную учётную запись в базе данных для выполнения запросов оповещений.

Создание источника данных

HyperDX изначально поддерживает OpenTelemetry, но не ограничивается им — пользователи могут использовать собственные схемы таблиц при необходимости.

Использование схем OpenTelemetry

Если вы используете указанный выше OTel collector для создания базы данных и таблиц в ClickHouse, оставьте все значения по умолчанию в форме создания источника, указав в поле Table значение otel_logs — это создаст источник логов. Все остальные параметры должны определиться автоматически, после чего можно нажать Save New Source.

Источник данных HyperDX ClickHouse Cloud

Для создания источников трассировок и метрик OTel выберите Создать Новый Источник в верхнем меню.

Создать Новый Источник в HyperDX

Здесь выберите требуемый тип источника, затем соответствующую таблицу — например, для трассировок выберите таблицу otel_traces. Все настройки должны определиться автоматически.

Создание источника трассировок в HyperDX
Корреляция источников

Обратите внимание, что различные источники данных в ClickStack — такие как логи и трассировки — можно коррелировать между собой. Для этого требуется дополнительная настройка каждого источника. Например, в источнике логов можно указать соответствующий источник трассировок и наоборот. Подробнее см. раздел "Коррелированные источники".

Использование пользовательских схем

Пользователи, которые хотят подключить HyperDX к существующему сервису с данными, могут настроить параметры базы данных и таблиц в соответствии с требованиями. Настройки будут определены автоматически, если таблицы соответствуют схемам OpenTelemetry для ClickHouse.

При использовании собственной схемы рекомендуется создать источник логов с указанием всех необходимых полей — подробнее см. в разделе "Настройки источника логов".

Поддержка типа JSON

Beta feature. Learn more.
Beta Feature - not production ready

Поддержка типа JSON в ClickStack находится в статусе бета-версии. Хотя сам тип JSON готов к промышленной эксплуатации в ClickHouse 25.3+, его интеграция в ClickStack всё ещё активно разрабатывается и может иметь ограничения, изменяться в будущем или содержать ошибки.

Поддержка типа JSON в ClickStack доступна в статусе бета-версии, начиная с версии 2.0.4.

О преимуществах этого типа см. раздел Преимущества типа JSON.

Чтобы включить поддержку типа JSON, пользователи должны задать следующие переменные окружения:

  • OTEL_AGENT_FEATURE_GATE_ARG='--feature-gates=clickhouse.json' — включает поддержку в OTel collector, гарантируя, что схемы создаются с использованием типа JSON.
  • BETA_CH_OTEL_JSON_SCHEMA_ENABLED=true — включает поддержку в приложении HyperDX, позволяя выполнять запросы к данным JSON.

Кроме того, пользователям следует связаться с support@clickhouse.com, чтобы убедиться, что в их сервисе ClickHouse Cloud включена поддержка JSON.