В современном мире разработки программного обеспечения непрерывная интеграция и доставка занимают ключевое место. GitHub Actions — популярная платформа, позволяющая автоматизировать процессы сборки, тестирования и деплоя. Однако, несмотря на её распространённость, опыт работы с логами во время CI/CD часто оставляет желать лучшего. Логи бывают объёмными и непрозрачными, затрудняя выявление проблем и анализ причин неудач. Мы решили эту задачу, создав собственную платформу логирования, которая преобразила работу с логами GitHub Actions, сделав их быстро доступными, удобными для поиска и масштабируемыми.
В основе платформы лежит аналитическая база данных ClickHouse, которая идеально подходит для хранения и быстрого анализа больших объёмов данных. Проблема с логами в CI и почему нужен новый подход Логирование в процессе непрерывной интеграции — один из основных инструментов разработчика для диагностики неполадок. При неудачных сборках часто возникает ситуация, когда нужно не просто просмотреть логи конкретной задачи, но и проанализировать похожие ошибки в других сборках, сравнить данные между различными ветками и коммитами. К сожалению, стандартные средства GitHub Actions не предоставляют удобных возможностей для глубинного и быстрого поиска по логам. При большом количестве данных выполнение запросов к логам становится медленным, а интерфейс оставляет желать лучшего.
Когда мы приступали к созданию платформы, перед нами стояла задача обеспечить не только хранение огромного количества логов в реальном времени, но и возможность молниеносного поиска конкретных подстрок, выполнения агрегатных запросов по логам и гибкой настройки хранения данных с учётом политик разных заказчиков. Нам был нужен инструмент, снижающий операционные издержки и покрывающий широкий спектр запросов при минимальной стоимости хранения. Почему мы выбрали ClickHouse для хранения логов ClickHouse — это аналитическая колоночная база данных с открытым исходным кодом, которая идеально подходит для обработки огромных потоков данных. Уже находясь в нашей аналитической инфраструктуре для других задач, ClickHouse продемонстрировал отличную производительность и сжатие данных, что подтолкнуло нас к его использованию для логов GitHub Actions. Одно из главных достоинств ClickHouse — низкие издержки на эксплуатацию.
В отличие от традиционных стеков на базе Elasticsearch (ELK), с которыми часто приходится устанавливать и поддерживать Kafka-кластеры для потоковой передачи сообщений, здесь мы обошлись однородной архитектурой. Это несложно в обслуживании и экономичнее с точки зрения стоимости ресурсов. ClickHouse обладает мощными механизмами сжатия, что позволило нам уменьшить объём хранимых логов почти в 12 раз. Кроме того, он отлично справляется с выполнением агрегатных функций по миллионам строк, что открывает новые возможности для анализа и визуализации данных. Мы можем быстро строить гистограммы, тренды и искать паттерны в поведении рабочих процессов.
Оптимизация поиска подстрок с помощью индексов Bloom Одна из главных сложностей при поиске по логам — высокая стоимость выполнения подстрочного поиска. Если просматривать данные построчно, запросы будут слишком медленными. Чтобы решить эту задачу, мы воспользовались возможностями ClickHouse по созданию n-граммовых Bloom-фильтров для индексации текстовых столбцов. Принцип работы заключается в разбиении текста на фрагменты фиксированной длины, которые затем индексируются в рамках гранул — специальных блоков с данными. Bloom-фильтры дают нам возможность быстро отсеивать те части данных, где искомая подстрока точно отсутствует, не затрагивая остальные.
Фильтр может возвращать ложные срабатывания, но при этом никогда не пропускает истинные совпадения. Такой подход существенно повышает быстродействие поиска даже при сканировании миллионов строк логов. Материализованные колонки и политика хранения данных Для удобства анализа мы реализовали материализованные колонки, которые автоматически извлекают уровень логов (ошибка, предупреждение, информация) на основании известных паттернов. Это облегчает пользователям выделение наиболее важных сообщений и ускоряет понимание происходящего. ClickHouse также поддерживает управление временем жизни данных на уровне отдельных строк.
Этот функционал позволил нам гибко настраивать сроки хранения логов в зависимости от требований клиентов, сохраняя при этом оптимальный объем базы данных. Устройство потока логирования и обработка данных с учётом безопасности Когда задача запускается на платформе Blacksmith, виртуальная машина Firecracker запускает её и пишет логи в виде файлов. Из соображений безопасности VM не имеет прямого доступа к инфраструктуре, поэтому отправка логов напрямую невозможна. Вместо этого на хост-машине запускается HTTP-сервер, который принимает логи от демона внутри VM по защищённому каналу. Демон blacksmithd внутри VM следит за появлением новых и обновлением существующих файлов логов.
Как только записи завершены, они передаются на хост для дальнейшей обработки, пакетирования и следующей отправки в ClickHouse. Важно отметить, что мы сознательно отказались от использования промежуточных очередей, так как ClickHouse поддерживает высокопроизводительные асинхронные вставки и справляется с пиковыми нагрузками самостоятельно. Механизм обработки сбоев и дублирования Для обеспечения устойчивости при временных сетевых сбоях мы предусмотрели повторные попытки загрузки данных. Одной из важных задач стала борьба с дублированием. Повторные вставки одинаковых строк приводят к появлению «лишних» логов, что усложняет анализ и портит пользовательский опыт.
Решение находится в использовании движка ReplacingMergeTree, который встроен в ClickHouse и позволяет устранять дубли ещё на этапе обработки данных. С помощью особенности, связанной с окном дедупликации при асинхронных вставках, платформа эффективно исключает повторяющиеся записи, сохраняя при этом высокую скорость загрузки. Проектирование языка запросов для удобного поиска Чтобы пользователи получали максимальную пользу от платформы, мы создали собственный легковесный язык запросов для работы с логами. Он поддерживает подстрочечный поиск, фильтрацию по свойствам (например, идентификатору задачи или ветке), а также логические и сравнительные операторы. Вдохновившись языком Lucene, мы сохранили его основные преимущества, но упростили синтаксис, чтобы ускорить первые шаги пользователей и облегчить компиляцию запросов в SQL-запросы ClickHouse.
Такой подход позволяет соединять логи с другими данными из GitHub для расширенного анализа, например, связывая токены выполнения с конкретными идентификаторами задач. Возможности агрегации и трендовый анализ ClickHouse отлично справляется с задачами агрегации благодаря своей колоночной структуре и оптимизированным алгоритмам. Платформа позволяет быстро строить отчёты и графики по логам, что раскрывает новые горизонты для понимания поведения рабочих процессов и выявления аномалий. Разработчики могут мониторить рост числа ошибок, изменения в поведении тестов и распространённость конкретных исключений по времени, что автоматизирует процесс диагностики и снижает время на поиск корня проблем. Перспективы развития наблюдаемости для GitHub Actions Через нашу платформу мы открываем новую эру наблюдаемости CI/CD на базе GitHub Actions.
Раньше разработчикам приходилось довольствоваться ограниченными средствами и сталкиваться с недостатками стандартных инструментов. Сейчас появилась возможность видеть полную картину происходящего с мгновенным доступом к миллионам логов и гибкими средствами анализа. Мы продолжаем активно работать над улучшением продукта и внедряем новые функции, которые сделают процесс непрерывной интеграции ещё более прозрачным и эффективным. Платформа уже доступна нашим клиентам, и мы рекомендуем всем заинтересованным опробовать её, чтобы оценить преимущества нового уровня контроля над CI-процессами. Заключение Создание платформы логирования для GitHub Actions с использованием ClickHouse позволило решить множество накопившихся проблем, связанных с хранением, поиском и анализом логов.
Высокая производительность, низкая стоимость эксплуатации, удобные инструменты поиска и гибкие возможности агрегации сделали этот проект одним из важных шагов к улучшению опыта использования CI/CD. Полная интеграция с GitHub Actions, продуманная архитектура и инновационные технические решения формируют мощный инструмент наблюдаемости для разработчиков, позволяя им сосредоточиться на развитии продукта, а не на борьбе с инфраструктурными ограничениями.