Разверните Управляемый ClickStack в ClickHouse Cloud, отправьте тестовое событие через конвейер ингестии и убедитесь, что оно доступно в интерфейсе ClickStack.
ClickHouse Cloud управляет backend ClickHouse, а вы сохраняете контроль над конвейером ингестии и схемой. Управляемый ClickStack предоставляет:
- Автоматическое масштабирование вычислительных ресурсов независимо от хранилища
- Недорогое и практически неограниченное хранение на базе объектного хранилища
- Независимую изоляцию рабочих нагрузок чтения и записи с помощью хранилищ
- Встроенную аутентификацию
- Автоматические резервные копии
- Средства безопасности и соответствия требованиям
- Бесшовные обновления
Перед началом работы
Вы также можете отправлять данные напрямую в ClickHouse, используя поддерживаемую интеграцию и собственную схему.
Создайте сервис ClickHouse Cloud
Выполните шаг «Создание сервиса ClickHouse» в руководстве по быстрому началу работы с ClickHouse Cloud. Прежде чем продолжить, убедитесь, что сервис запущен.
Подготовьте среду для ингестии
- Чтобы запустить новый OpenTelemetry Collector, установите Docker. В Kubernetes разверните коллектор с помощью Helm.
- Чтобы использовать существующий коллектор, запустите его в режиме шлюза и убедитесь, что его дистрибутив включает ClickHouse exporter. В этом руководстве вы добавите необходимую конфигурацию.
Настройка управляемого ClickStack
Выберите источник для ингестии и настройте коллектор
В сервисе ClickHouse Cloud запустите ClickStack. На странице ClickStack Начало работы выберите Начать ингестию.

На странице Выберите источник ингестии выберите OpenTelemetry.

ClickStack генерирует команду запуска коллектора с учетными данными администратора default. Рекомендуется использовать отдельные учетные данные для ингестии, чтобы отделить доступ для ингестии от административного доступа и не зависеть от пароля администратора.
Создать отдельные учетные данные для ингестии (рекомендуется)
В ClickHouse Cloud откройте SQL-консоль сервиса и выполните:
CREATE USER `clickstack-ingest` IDENTIFIED WITH sha256_password BY '<password>';
GRANT SELECT, INSERT, CREATE DATABASE, CREATE TABLE, CREATE VIEW ON default.* TO `clickstack-ingest`;В сгенерированной команде замените CLICKHOUSE_USER="default" на CLICKHOUSE_USER="clickstack-ingest" и укажите в CLICKHOUSE_PASSWORD пароль этого пользователя.
Чтобы продолжить с учетными данными администратора default, скопируйте команду на вкладке Запустить коллектор. ClickStack автоматически подставляет конечную точку сервиса. Замените заполнитель пароля паролем сервиса. Если он у вас больше не сохранился, получите или сбросьте сведения о подключении.
Команда имеет следующий вид:
docker run -e CLICKHOUSE_ENDPOINT="https://<host>:8443" \
-e CLICKHOUSE_USER="default" \
-e CLICKHOUSE_PASSWORD="<your_password_here>" \
-p 4317:4317 -p 4318:4318 \
clickhouse/clickstack-otel-collector:latestЗамените <host> и <your_password_here> значениями для своего сервиса ClickHouse Cloud, затем выполните команду.
Коллектор запускается в интерактивном режиме. Оставьте этот терминал открытым, а для остальных команд из этого руководства используйте второй терминал.
Выберите Настроить существующий коллектор, затем адаптируйте конфигурацию коллектора.
Запустите коллектор как шлюз между приложениями и ClickHouse Cloud. Приведенная ниже конфигурация добавляет необходимые экспортеры ClickHouse и конвейеры обработки сигналов.
В примере используются учетные данные default, сгенерированные ClickStack. Чтобы использовать отдельные учетные данные для ингестии, выполните необязательную настройку на вкладке Запустить новый коллектор. В обоих блоках экспортера ClickHouse замените username: default на username: clickstack-ingest и укажите в password пароль этого пользователя.
Добавьте следующие компоненты в существующую конфигурацию, не заменяя несвязанные приёмники, процессоры, экспортеры или расширения.
Пример добавляет приёмники OTLP, пакетную обработку и ограничение памяти, маршрутизацию воспроизведения сеансов и экспортеры ClickHouse.
Замените плейсхолдеры конечной точки и пароля учётными данными, сгенерированными ClickStack:
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:
batch:
memory_limiter:
# 80% of maximum memory up to 2G, adjust for low memory environments
limit_mib: 1500
# 25% of limit up to 2G, adjust for low memory environments
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:
clickhouse/rrweb:
database: default
endpoint: <clickhouse_cloud_endpoint>
password: <your_password_here>
username: default
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: default
endpoint: <clickhouse_cloud_endpoint>
password: <your_password_here>
username: default
ttl: 720h
timeout: 5s
retry_on_failure:
enabled: true
initial_interval: 5s
max_interval: 30s
max_elapsed_time: 300s
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, batch]
exporters: [clickhouse]
logs/out-rrweb:
receivers: [routing/logs]
processors: [memory_limiter, batch]
exporters: [clickhouse/rrweb]Используйте существующий приёмник OTLP и сохраните его настройки аутентификации и TLS. Если в конфигурации уже используются идентификаторы компонентов или конвейеров из примера, объедините или переименуйте их, а не создавайте дублирующиеся идентификаторы. Запуск двух приёмников на портах 4317 и 4318 приводит к конфликту портов.
После объединения конфигурации перезагрузите или перезапустите коллектор согласно используемому процессу развертывания.
Дополнительные сведения о настройке коллекторов OpenTelemetry см. в разделе Ингестия с OpenTelemetry.
Отправьте тестовые данные
Отправьте тестовую запись журнала с текущей временной меткой:
NOW_NANO="$(date +%s)000000000"
curl -i "http://localhost:4318/v1/logs" \
-H "Content-Type: application/json" \
--data-binary @- <<EOF
{
"resourceLogs": [{
"resource": {
"attributes": [{
"key": "service.name",
"value": {"stringValue": "clickstack-docs-test"}
}]
},
"scopeLogs": [{
"scope": {"name": "clickstack-docs-test"},
"logRecords": [{
"timeUnixNano": "${NOW_NANO}",
"severityText": "INFO",
"body": {"stringValue": "ClickStack ingestion test"}
}]
}]
}]
}
EOFЕсли вы используете существующий коллектор, замените http://localhost:4318 на его конечную точку OTLP HTTP. Если приёмник требует аутентификации, добавьте необходимый заголовок в команду curl.
При успешном запросе возвращается HTTP/1.1 200 OK.
Начните работу и подтвердите приём данных
После того как ClickStack обнаружит источники данных OpenTelemetry, выберите Начать изучение, чтобы открыть представление Search. Найдите ClickStack ingestion test.
В результатах должно отображаться тестовое событие с именем сервиса clickstack-docs-test.

Подготовьте окружение для приёма данных
Начните с существующего конвейера Vector, который умеет отправлять данные в ClickHouse.
Настройка управляемого ClickStack
Выберите Vector и настройте приём данных
В своём сервисе ClickHouse Cloud запустите ClickStack. На странице ClickStack Getting Started выберите Start ingestion.

На странице Choose an ingestion source выберите Vector.

Vector — это высокопроизводительный, независимый от вендоров конвейер данных обсервабилити, особенно популярный для приёма логов благодаря своей гибкости и низкому потреблению ресурсов.
При использовании Vector вместе с ClickStack схему определяете вы. Она может соответствовать соглашениям OpenTelemetry либо содержать поля, специфичные для ваших событий.
Создайте базу данных и таблицу
Создайте базу данных и таблицу перед настройкой sink в Vector.
В ClickHouse Cloud откройте SQL Console вашего сервиса и создайте базу данных:
Например, создайте базу данных для журналов:
CREATE DATABASE IF NOT EXISTS logsЗатем создайте таблицу, схема которой соответствует структуре ваших логов. В приведённом ниже примере используется классический формат логов доступа Nginx:
CREATE TABLE logs.nginx_logs
(
`time_local` DateTime,
`remote_addr` IPv4,
`remote_user` LowCardinality(String),
`request` String,
`status` UInt16,
`body_bytes_sent` UInt64,
`http_referer` String,
`http_user_agent` String,
`http_x_forwarded_for` LowCardinality(String),
`request_time` Float32,
`upstream_response_time` Float32,
`http_host` String
)
ENGINE = MergeTree
ORDER BY (toStartOfMinute(time_local), status, remote_addr);Ваша таблица должна соответствовать выходной схеме, которую формирует Vector. При необходимости скорректируйте схему под свои данные, руководствуясь рекомендуемыми лучшими практиками работы со схемами.
Мы настоятельно рекомендуем разобраться, как в ClickHouse работают первичные ключи, и выбирать ключ сортировки с учётом характерных для вас шаблонов доступа к данным. См. рекомендации для ClickStack по выбору первичного ключа.
Настройте sink для ClickHouse
После создания таблицы добавьте sink ClickHouse в конфигурацию Vector:
sinks:
clickhouse:
type: clickhouse
inputs:
- your_input
endpoint: "https://<host>:8443"
database: logs
table: nginx_logs
format: json_each_row
skip_unknown_fields: true
auth:
strategy: basic
user: default
password: "<your_password_here>"Замените your_input на входные данные из вашего существующего конвейера. Замените <host> и <your_password_here> на значения вашего сервиса ClickHouse Cloud. При необходимости измените целевую базу данных или таблицу.
Используйте отдельные учётные данные для ингестии (рекомендуется)
Для продакшна создайте отдельного пользователя и предоставьте ему доступ к целевой таблице Vector. В ClickHouse Cloud откройте SQL-консоль вашего сервиса и выполните:
CREATE USER `clickstack-ingest` IDENTIFIED WITH sha256_password BY '<password>';
GRANT SELECT, INSERT ON logs.nginx_logs TO `clickstack-ingest`;Замените default на clickstack-ingest в sink Vector и укажите в password пароль выделенного пользователя.
Сохраните обновлённую конфигурацию, затем перезагрузите или перезапустите Vector с использованием вашего текущего процесса развертывания.
Дополнительные примеры ингестии данных с помощью Vector приведены в разделе Ингестия с помощью Vector, а расширенные параметры описаны в документации по sink ClickHouse для Vector.
Создайте источник данных ClickStack
Создайте источник данных для таблицы, которую наполняет ваш конвейер Vector. ClickStack предложит создать его при первом входе в систему.
Форма предзаполняется выражениями для стандартной схемы OpenTelemetry. Для таблицы Nginx, созданной в этом руководстве, задайте для источника следующие значения:
| Настройка | Значение |
|---|---|
| Название | Журналы Nginx |
| Тип исходных данных | Log |
| Имя подключения к серверу | По умолчанию |
| База данных | журнал |
| Таблица | nginx_logs |
| Столбец временной метки | time_local |
| SELECT по умолчанию | time_local, remote_addr, status, request |
| Выражение для имени сервиса | 'nginx' |
| Выражение для уровня логирования | multiIf(status >= 500, 'ERROR', status >= 400, 'WARN', 'INFO') |
| Выражение атрибутов журнала | map('http.remote_addr', toString(remote_addr), 'http.status_code', toString(status), 'http.request', request) |
| Выражение атрибутов ресурса | map('service.name', 'nginx') |
| Отображаемый столбец временной метки | time_local |
| Выражение для идентификатора трассировки | '' |
| Выражение для ID span | '' |
| Выражение неявного столбца | request |
Таблица Nginx не содержит столбца Body. В поле Body Expression укажите:
concat(
remote_addr, ' ',
remote_user, ' ',
'[', formatDateTime(time_local, '%d/%b/%Y:%H:%i:%S %z'), '] ',
'"', request, '" ',
toString(status), ' ',
toString(body_bytes_sent), ' ',
'"', http_referer, '" ',
'"', http_user_agent, '" ',
'"', http_x_forwarded_for, '" ',
toString(request_time), ' ',
toString(upstream_response_time), ' ',
'"', http_host, '"'
)Остальные настройки source описаны в справочнике по конфигурации ClickStack.
Отправьте тестовые данные
Отправьте тестовое событие на вход существующего конвейера Vector.
Дополнительные примеры источников и преобразований Vector см. в разделе Приём данных с помощью Vector.
Начните работу и подтвердите приём данных
После создания источника данных выберите Start exploring, чтобы открыть представление Search. Выберите источник данных для своей таблицы и убедитесь, что в нём есть отправленное вами событие.

Теперь у вас есть сервис Управляемый ClickStack, настроенный путь ингестии и тестовое событие, которое можно просмотреть в ClickStack.
Следующие шаги
Если для выполнения другого руководства требуются конечная точка ClickHouse Cloud или пароль, получите или сбросьте сведения о подключении, прежде чем продолжить.
Отправка данных приложений и инфраструктуры
Выберите руководство в зависимости от данных, которые хотите отправлять в ClickStack:
Инструментирование приложения
Отправляйте трассировки и журналы приложения с помощью поддерживаемого SDK OpenTelemetry.
Сбор журналов хоста
Пересылайте журналы хоста из OpenTelemetry Collector, работающего в роли агента.
Мониторинг Kubernetes
Собирайте журналы, метрики и трассировки из кластера Kubernetes.
Другие интеграции
Найдите руководства по дополнительным приложениям и источникам телеметрии.
Изучение демонстрационных данных
Используйте демонстрационный датасет, чтобы изучить возможности ClickStack на более насыщенных телеметрических данных:
Демонстрационные журналы, трассировки и метрики

Загрузите данные из публичной демонстрационной среды и диагностируйте проблему. В этом руководстве предполагается, что вы запустили новый локальный OpenTelemetry Collector. Если вы настроили существующий коллектор, адаптируйте параметры конечной точки и аутентификации к вашему развертыванию.
Локальные журналы и метрики

Собирайте локальные файлы и системные метрики в macOS или Linux.
Генерация синтетических данных
Используйте генератор, чтобы протестировать ингестию без готового приложения или датасета:
Генерация данных с помощью otelgen
Отправьте небольшой пакет синтетических журналов, трассировок и метрик OTLP.
Генерация данных с помощью telemetrygen
Генерируйте настраиваемые сигналы OpenTelemetry для нескольких сервисов.
См. все демонстрационные данные и демонстрации ClickStack.
Подготовка к продакшну
Перед использованием ClickStack для постоянных рабочих нагрузок ознакомьтесь с рекомендациями по продакшну и сайзингу:
Переход в продакшн
Ознакомьтесь с рекомендациями по учётным данным для ингестии, безопасности, хранению данных и эксплуатации.
Оценка ресурсов
Определите необходимые вычислительные ресурсы исходя из ожидаемого объёма приёма данных.
Сведения о задачах развертывания см. в руководстве по развертыванию Управляемого ClickStack.