Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Мониторинг журналов Cloudflare в ClickStack

Обзор

Cloudflare Logpush экспортирует журналы HTTP-запросов в такие пункты назначения, как Amazon S3. Перенаправив эти журналы в ClickStack, вы сможете:

  • Анализировать трафик на edge-узлах, производительность кэша и события безопасности вместе с другими данными обсервабилити
  • Выполнять запросы к журналам с помощью ClickHouse SQL
  • Хранить журналы дольше стандартного срока хранения Cloudflare

В этом руководстве ClickPipes используется для непрерывной ингестии файлов журналов Cloudflare из S3 в ClickHouse. S3 выступает как надёжный буфер между Cloudflare и ClickHouse, обеспечивая семантику «ровно один раз» и возможность повторного воспроизведения.

Интеграция с существующим Cloudflare Logpush

В этом разделе предполагается, что Cloudflare Logpush у вас уже настроен для экспорта журналов в S3. Если это не так, сначала воспользуйтесь руководством Cloudflare по настройке AWS S3.

Предварительные требования

  • сервис ClickHouse Cloud запущен (ClickPipes доступна только в Cloud и недоступна в ClickStack OSS)
  • Cloudflare Logpush активно записывает журналы в S3 бакет
  • Имя S3 бакета и регион, куда Cloudflare записывает журналы

Настройте аутентификацию для S3

ClickPipes требуется разрешение на чтение из вашего S3 бакета. Чтобы настроить доступ с использованием роли IAM или учетных данных, следуйте руководству Безопасный доступ к данным S3.

Подробные сведения об аутентификации S3 и разрешениях для ClickPipes см. в справочной документации по S3 ClickPipes.

Создание задачи ClickPipes

  1. ClickHouse Cloud Console → Источники данныхCreate ClickPipe
  2. Источник: Amazon S3
Clickpipe s3

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

  • Путь к файлам в S3: Путь к бакету с журналами Cloudflare с подстановочным символом для сопоставления файлов. Если вы включили ежедневные подпапки в Logpush, используйте **, чтобы сопоставлять файлы во всех подкаталогах:
    • Без подпапок: https://your-bucket.s3.us-east-1.amazonaws.com/logs/*
    • Ежедневные подпапки: https://your-bucket.s3.us-east-1.amazonaws.com/logs/**/*
  • Аутентификация: Выберите метод аутентификации и укажите учётные данные или ARN роли IAM

Настройки ингестии:

Нажмите Incoming data, затем настройте:

  • Включите Continuous ingestion
  • Порядок: Лексикографический порядок
Непрерывная ингестия

Cloudflare Logpush записывает файлы с именами на основе даты (например, 20250127/...), что естественным образом соответствует лексикографическому порядку. ClickPipes проверяет наличие новых файлов каждые 30 секунд и выполняет ингестию каждого файла, имя которого больше имени последнего обработанного файла.

Сопоставление схемы:

Нажмите Parse information. ClickPipes анализирует выборку из ваших файлов журнала и автоматически определяет схему. Проверьте сопоставленные столбцы и при необходимости скорректируйте типы. Задайте ключ сортировки для целевой таблицы — для журналов Cloudflare хорошим выбором будет (EdgeStartTimestamp, ClientCountry, EdgeResponseStatus).

Parse information

Нажмите Complete Setup.

Настройка источника данных HyperDX

ClickPipes загружает журналы Cloudflare в плоскую таблицу, используя исходные имена полей Cloudflare. Чтобы просматривать эти журналы в HyperDX, настройте пользовательский источник данных, который сопоставляет столбцы Cloudflare с представлением логов HyperDX.

  1. Откройте HyperDX → Team SettingsSources
Добавить источник
  1. Нажмите Add source и задайте следующие параметры. Чтобы получить доступ ко всем полям, нажмите Configure Optional Fields:
Настроить необязательные поля
Параметр Значение
Name Cloudflare Logs
Source Data Type Log
Database default
Table cloudflare_http_logs
Timestamp Column toDateTime(EdgeStartTimestamp / 1000000000)
Default Select EdgeStartTimestamp, ClientRequestMethod, ClientRequestURI, EdgeResponseStatus, ClientCountry
Service Name Expression 'cloudflare'
Log Level Expression multiIf(EdgeResponseStatus >= 500, 'ERROR', EdgeResponseStatus >= 400, 'WARN', 'INFO')
Body Expression concat(ClientRequestMethod, ' ', ClientRequestURI, ' ', toString(EdgeResponseStatus))
Log Attributes Expression map('http.method', ClientRequestMethod, 'http.status_code', toString(EdgeResponseStatus), 'http.url', ClientRequestURI, 'client.country', ClientCountry, 'client.ip', ClientIP, 'cache.status', CacheCacheStatus, 'bot.score', toString(BotScore), 'cloudflare.ray_id', RayID, 'cloudflare.colo', EdgeColoCode)
Resource Attributes Expression map('cloudflare.zone', ClientRequestHost)
Implicit Column Expression concat(ClientRequestMethod, ' ', ClientRequestURI)
  1. Нажмите Save Source
Сохранить источник

Это позволяет напрямую сопоставить исходные столбцы Cloudflare с представлением логов HyperDX без какого-либо преобразования или дублирования данных. В поле Body будет отображаться сводка по запросу, например GET /api/v1/users 200, а все поля Cloudflare будут доступны как атрибуты для поиска.

Проверьте данные в HyperDX

Перейдите в представление Search и выберите источник Cloudflare Logs. Установите временной диапазон так, чтобы он включал нужный период. Вы должны увидеть записи журнала со следующими характеристиками:

  • Сводки запросов в столбце Body (например, GET /api/v1/users 200)
  • Уровни серьёзности, выделенные цветом в зависимости от HTTP-статуса (INFO для 2xx, WARN для 4xx, ERROR для 5xx)
  • Атрибуты, доступные для поиска, такие как http.status_code, client.country, cache.status и bot.score
Представление Search
Представление логов

Демо-набор данных

Для пользователей, которые хотят протестировать интеграцию перед настройкой продакшн Cloudflare Logpush, мы предоставляем демо-набор данных с реалистичными журналами HTTP-запросов.

Запустите ClickPipes с демо-набором данных

  1. консоль ClickHouse Cloud → Источники данныхСоздать ClickPipe
  2. Источник: Amazon S3
  3. Аутентификация: Public
  4. Путь к файлу S3: https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/cloudflare/cloudflare-http-logs.json
  5. Нажмите Входящие данные
  6. Выберите JSON в качестве формата
  7. Нажмите Разобрать информацию и проверьте обнаруженную схему
  8. Укажите Название таблицы: cloudflare_http_logs
  9. Нажмите Завершить настройку

Набор данных включает 5 000 записей журнала HTTP-запросов за 24 часа с реалистичными паттернами: трафик из нескольких стран, попадания и промахи кэша, запросы к API и статическим ресурсам, ответы с ошибками и события безопасности.

Настройте источник данных HyperDX

Следуйте шагам настройки источника данных, чтобы создать источник HyperDX, указывающий на таблицу cloudflare_http_logs. Если вы уже настроили источник в разделе с продакшн интеграцией, этот шаг не нужен.

Проверьте демо-данные

SELECT count() FROM cloudflare_http_logs;
-- Должен вернуть 5000

Перейдите в представление Search в HyperDX, выберите источник Cloudflare Logs и задайте временной диапазон 2026-02-23 00:00:00 - 2026-02-26 00:00:00.

Вы увидите записи журнала со сводками по запросам, доступными для поиска атрибутами Cloudflare и уровнями серьёзности на основе кодов состояния HTTP.

Представление поиска
Представление логов

Панели мониторинга и визуализация

Скачать конфигурацию панели мониторинга

Импорт панели мониторинга

  1. HyperDX → DashboardsImport Dashboard
Импорт панели мониторинга
  1. Загрузите cloudflare-logs-dashboard.jsonFinish Import
Импорт панели мониторинга

Просмотр панели мониторинга

Пример панели мониторинга

Устранение неполадок

Данные не отображаются в ClickHouse

Убедитесь, что таблица создана и содержит данные:

SHOW TABLES FROM default LIKE 'cloudflare_http_logs';
SELECT count() FROM cloudflare_http_logs;

Если таблица существует, но пуста, проверьте наличие ошибок в ClickPipes: консоль ClickHouse Cloud → Источники данных → ваш ClickPipe → Журналы. Если возникают проблемы с аутентификацией при доступе к приватным бакетам, см. документацию по управлению доступом S3 в ClickPipes.

Журналы не отображаются в HyperDX

Если данные есть в ClickHouse, но не видны в HyperDX, проверьте конфигурацию источника данных:

  • Убедитесь, что для cloudflare_http_logs в HyperDX → Team SettingsSources существует источник
  • Убедитесь, что для Timestamp Column установлено значение toDateTime(EdgeStartTimestamp / 1000000000) — временные метки Cloudflare указаны в наносекундах, поэтому их нужно преобразовать
  • Убедитесь, что выбранный в HyperDX временной диапазон охватывает эти данные. Для демо-набора данных используйте 2026-02-23 00:00:00 - 2026-02-26 00:00:00

Следующие шаги

  • Настройте оповещения для событий безопасности (блокировки WAF, всплески бот-трафика, пороговые значения уровня ошибок)
  • Оптимизируйте политики хранения с учетом объема данных
  • Создайте дополнительные панели мониторинга для конкретных задач (производительность API, оптимизация кэша, географический анализ трафика)

Переход в продакшн

В этом руководстве показано, как выполнять ингестию журналов Cloudflare с использованием общедоступного демо-набора данных. Для развертываний в продакшне настройте Cloudflare Logpush на запись в собственный S3 бакет и настройте ClickPipes с аутентификацией на основе роли IAM для безопасного доступа. Выбирайте только нужные вам поля Logpush, чтобы сократить затраты на хранилище и объём ингестии. Включите в Logpush ежедневные подпапки для более удобной организации файлов и используйте **/* в шаблоне пути ClickPipes, чтобы охватывать вложенные подкаталоги.

Дополнительные параметры конфигурации, включая неупорядоченную ингестию на основе SQS для обработки дозагрузок и файлов, поступающих не по порядку, см. в документации по S3 ClickPipes.

Navigation