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

Переход к промышленной эксплуатации

При развертывании ClickStack в рабочей (production) среде необходимо учитывать ряд дополнительных факторов, чтобы обеспечить безопасность, стабильность и правильную конфигурацию.

Безопасность сети и портов

По умолчанию Docker Compose пробрасывает порты на хост, делая их доступными извне контейнеров — даже если включены такие инструменты, как ufw (Uncomplicated Firewall). Такое поведение связано с сетевой подсистемой Docker, которая может обходить правила файрвола на уровне хоста, если явно не настроена иначе.

Рекомендация:

Открывайте только те порты, которые необходимы для работы в продакшене. Как правило, это OTLP-эндпоинты, API-сервер и фронтенд.

Например, удалите или закомментируйте лишние сопоставления портов в вашем файле docker-compose.yml:

ports:
  - "4317:4317"  # OTLP gRPC
  - "4318:4318"  # OTLP HTTP
  - "8080:8080"  # Только при необходимости для API
# Не открывайте внутренние порты, такие как ClickHouse 8123 или MongoDB 27017. \{#avoid-exposing-internal-ports-like-clickhouse-8123-or-mongodb-27017}

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

Настройка секрета сессии

В продуктивной среде необходимо задать надёжное случайное значение для переменной окружения EXPRESS_SESSION_SECRET, чтобы защитить данные сессий и предотвратить их подделку.

Вот как добавить её в файл docker-compose.yml для сервиса приложения:

  app:
    image: ${IMAGE_NAME_HDX}:${IMAGE_VERSION}
    ports:
      - ${HYPERDX_API_PORT}:${HYPERDX_API_PORT}
      - ${HYPERDX_APP_PORT}:${HYPERDX_APP_PORT}
    environment:
      FRONTEND_URL: ${HYPERDX_APP_URL}:${HYPERDX_APP_PORT}
      HYPERDX_API_KEY: ${HYPERDX_API_KEY}
      HYPERDX_API_PORT: ${HYPERDX_API_PORT}
      HYPERDX_APP_PORT: ${HYPERDX_APP_PORT}
      HYPERDX_APP_URL: ${HYPERDX_APP_URL}
      HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
      MINER_API_URL: 'http://miner:5123'
      MONGO_URI: 'mongodb://db:27017/hyperdx'
      NEXT_PUBLIC_SERVER_URL: http://127.0.0.1:${HYPERDX_API_PORT}
      OTEL_SERVICE_NAME: 'hdx-oss-api'
      USAGE_STATS_ENABLED: ${USAGE_STATS_ENABLED:-true}
      EXPRESS_SESSION_SECRET: "super-secure-random-string"
    networks:
      - internal
    depends_on:
      - ch-server
      - db1

Вы можете сгенерировать надёжный секретный ключ с помощью OpenSSL:

openssl rand -hex 32

Не добавляйте секреты в систему контроля версий. В рабочей (production) среде рассмотрите использование инструментов управления переменными окружения (например, Docker Secrets, HashiCorp Vault или конфигураций CI/CD, специфичных для конкретных окружений).

Безопасная ингестия

Вся ингестия должна выполняться через OTLP‑порты, которые предоставляет дистрибутив ClickStack с коллектором OpenTelemetry (OTel). По умолчанию для этого требуется защищённый ключ API для приёма данных, который генерируется при запуске. Этот ключ необходим при отправке данных на порты OTel и его можно найти в интерфейсе HyperDX в разделе Team Settings → API Keys.

Ключи для ингестии

Кроме того, рекомендуется включить TLS для OTLP‑эндпоинтов и создать выделенного пользователя для ингестии в ClickHouse.

ClickHouse

Для производственных развертываний мы рекомендуем использовать ClickHouse Cloud, который по умолчанию применяет отраслевые меры безопасности, включая усиленное шифрование, аутентификацию и сетевое подключение, а также управляемое разграничение доступа. См. раздел "ClickHouse Cloud" для пошагового руководства по использованию ClickHouse Cloud в соответствии с лучшими практиками.

Права пользователя

Пользователь HyperDX

Для HyperDX в ClickHouse достаточно пользователя с правами readonly, который имеет возможность изменять следующие настройки:

  • max_rows_to_read (не менее 1 миллиона)
  • read_overflow_mode
  • cancel_http_readonly_queries_on_client_close
  • wait_end_of_query

По умолчанию пользователь default как в OSS, так и в ClickHouse Cloud обладает этими правами, но мы рекомендуем создать отдельного пользователя с такими правами.

Пользователь для базы данных и ингестии

Мы рекомендуем создать отдельного пользователя, которого OTel collector будет использовать для ингестии в ClickHouse, и убедиться, что данные отправляются в конкретную базу данных, например otel. Подробности см. в разделе "Создание пользователя для ингестии".

Самостоятельное управление безопасностью

Если вы управляете собственным экземпляром ClickHouse, важно включить SSL/TLS, обеспечить обязательную аутентификацию и следовать передовым практикам по укреплению защиты доступа. См. эту запись в блоге о типичных ошибках конфигурации в реальных системах и способах их избежать.

ClickHouse OSS предоставляет мощные средства безопасности «из коробки». Однако они требуют настройки:

  • Используйте SSL/TLS через tcp_port_secure и <openSSL> в config.xml. См. guides/sre/configuring-ssl.
  • Задайте надёжный пароль для пользователя default или отключите его.
  • Избегайте внешней публикации ClickHouse, если это не требуется явно. По умолчанию ClickHouse привязывается только к localhost, пока не изменён listen_host.
  • Используйте методы аутентификации, такие как пароли, сертификаты, SSH-ключи или external authenticators.
  • Ограничивайте доступ с помощью фильтрации по IP и предложения HOST. См. sql-reference/statements/create/user#user-host.
  • Включите управление доступом на основе ролей (RBAC) для выдачи тонко настраиваемых привилегий. См. operations/access-rights.
  • Применяйте квоты и лимиты с помощью quotas, settings profiles и режимов только для чтения.
  • Шифруйте данные на диске и используйте защищённое внешнее хранилище. См. operations/storing-data и cloud/security/CMEK.
  • Не жёстко прописывайте учётные данные. Используйте named collections или IAM-роли в ClickHouse Cloud.
  • Аудируйте доступ и запросы с помощью system logs и session logs.

См. также external authenticators и query complexity settings для управления пользователями и обеспечения ограничений на запросы и использование ресурсов.

Настройка Time To Live (TTL)

Убедитесь, что параметр Time To Live (TTL) правильно настроен для вашего развертывания ClickStack. Он определяет срок хранения данных: значение по умолчанию — 3 дня, и его часто требуется изменить.

Рекомендации по MongoDB

Следуйте официальному контрольному списку мер безопасности MongoDB.

ClickHouse Cloud

Ниже представлен простой вариант развертывания ClickStack с использованием ClickHouse Cloud, соответствующий лучшим практикам.

Создайте сервис

Следуйте руководству по началу работы с ClickHouse Cloud, чтобы создать сервис.

Скопируйте данные для подключения

Чтобы найти параметры подключения для HyperDX, перейдите в консоль ClickHouse Cloud и нажмите кнопку Connect на боковой панели, после чего зафиксируйте параметры HTTP-подключения, в частности URL.

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

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

Создайте пользователя HyperDX

Мы рекомендуем создать отдельного пользователя для HyperDX. Выполните следующие SQL-команды в SQL-консоли Cloud, указав надёжный пароль, соответствующий требованиям к сложности:

CREATE USER hyperdx IDENTIFIED WITH sha256_password BY '<YOUR_PASSWORD>' SETTINGS PROFILE 'readonly';
GRANT sql_console_read_only TO hyperdx;

Подготовьте пользователя для ингестии

Создайте базу данных otel для данных и пользователя hyperdx_ingest для ингестии с ограниченными правами.

CREATE DATABASE otel;
CREATE USER hyperdx_ingest IDENTIFIED WITH sha256_password BY 'ClickH0u3eRocks123!';
GRANT SELECT, INSERT, CREATE TABLE, CREATE VIEW ON otel.* TO hyperdx_ingest;

Разверните ClickStack

Разверните ClickStack — предпочтительны модели развертывания Helm или Docker Compose (модифицированный для исключения ClickHouse).

Развёртывание компонентов по отдельности

Опытные пользователи могут развернуть OTel collector и HyperDX отдельно, используя их автономные режимы развертывания.

Инструкции по использованию ClickHouse Cloud с Helm-чартом можно найти здесь. Эквивалентные инструкции для Docker Compose можно найти здесь.

Перейдите по адресу http://localhost:8080, чтобы получить доступ к интерфейсу HyperDX.

Создайте пользователя, указав имя пользователя и пароль, соответствующие требованиям.

Интерфейс HyperDX

После нажатия Create вам будет предложено ввести параметры подключения.

Подключитесь к ClickHouse Cloud

Используя ранее созданные учётные данные, заполните параметры подключения и нажмите Create.

HyperDX Cloud

Отправьте данные в ClickStack

Чтобы отправить данные в ClickStack, см. раздел "Sending OpenTelemetry data".