hl — Терминальный ниндзя для ваших JSON-логов

10 Jul, 2026
3,213
🔱 64
👥 9

Знакомая картина: в продакшене что-то пошло не так, и вы судорожно пытаетесь найти причину в гигабайтах JSON-логов. Старый добрый grep уже не справляется, а пайплайны с jq становятся громоздкими и медленными. Кажется, пора искать инструмент помощнее. Сегодня я хочу рассказать об одном таком проекте, который кардинально изменил мой подход к работе с логами — hl.

Баннер hl

Что такое hl и зачем он нужен?

Если коротко, hl — это высокопроизводительная утилита командной строки, написанная на Rust, которая превращает нечитаемый поток JSON или logfmt в аккуратный, подсвеченный и, что самое главное, понятный для человека вид.

Думайте о ней как о jq, less и grep, объединенных в один сверхбыстрый инструмент, заточенный специально под логи. Вместо того чтобы часами парсить глазами монолитные JSON-строки, вы получаете наглядное представление, с которым удобно работать.

Скриншот работы hl

Реклама

Скорость, от которой захватывает дух

Первое, что поражает в hl — это производительность. Авторы не голословны и приводят сравнительный график, который говорит сам за себя.

Сравнение производительности

Обработать лог-файл размером 2.3 ГБ за ~1.1 секунды — это впечатляет. Для сравнения, популярный humanlog справляется с этой задачей за 79 секунд. Секрет такой скорости кроется не только в Rust, но и в продуманной архитектуре. Например, при сортировке (-s) hl сначала быстро индексирует файлы (со скоростью до 2 ГБ/с), что позволяет мгновенно фильтровать записи по времени или уровню без повторного сканирования.

Ключевые возможности, которые упростят вам жизнь

Давайте разберемся, что же делает hl таким полезным на практике.

Фильтрация на стероидах

hl предлагает несколько уровней фильтрации, от простых до очень мощных.

  • По уровню логов: нужно быстро найти все ошибки? Нет проблем.

    # Показать только ошибки и предупреждения
    hl -l w /var/log/my-app.log
    
  • По значению полей: самый частый кейс — отфильтровать логи по конкретному request_id или user_id.

    # Найти все записи для компонента tsdb
    hl example.log -f component=tsdb
    
  • Сложные запросы: а вот здесь начинается магия. Можно строить комплексные условия с помощью логических операторов.

    # Показать логи с уровнем выше info ИЛИ где статус-код >= 400
    hl my-service.log --query 'level > info or status-code >= 400'
    

    Поддерживаются and, or, not, сравнения (>, <, !=), проверка на вхождение в множество (in) и даже регулярные выражения.

Сортировка и tail -f для больших проектов

Работали когда-нибудь с логами из нескольких микросервисов или подов в Kubernetes? Склеивать их и пытаться понять хронологию событий — та еще задача. hl решает ее элегантно.

  • Хронологическая сортировка: просто передайте несколько файлов, и hl объединит их в один отсортированный по времени поток.

    hl -s service1.log service2.log
    
  • Live-режим: флаг -F (follow) — это, пожалуй, моя любимая функция. Он позволяет в реальном времени следить за логами из нескольких источников, объединяя и сортируя их на лету. Идеально для дебага распределенных систем.

    # Смотрим логи из двух подов Kubernetes в одном отсортированном потоке
    hl -F <(kubectl logs -l app=my-app-1 -f) <(kubectl logs -l app=my-app-2 -f)
    

Гибкая настройка вывода

Инструмент позволяет настроить внешний вид логов под себя:

  • Темы: есть встроенные темы, и можно легко создавать свои.
  • Формат времени: можно задать любой формат даты и времени, а также легко переключаться между UTC и локальным временем.
  • Скрытие полей: можно скрыть ненужные поля (--hide component) или, наоборот, показать только интересующие (--hide '*' --hide '!provider').

Практическое применение: где hl незаменим?

  1. Дебаг в сложных системах: когда вам нужно отследить запрос, проходящий через несколько микросервисов, hl с его сортировкой и live-режимом становится просто незаменимым помощником.
  2. Анализ больших объемов логов: нужно проанализировать логи за прошлую неделю, которые лежат в сжатых архивах? hl нативно работает с gzip, zstd и другими форматами, позволяя быстро отфильтровать гигабайты данных по временному диапазону.
  3. Повседневная работа с логами: даже для простых задач, вроде просмотра логов локального сервера, hl удобнее стандартных утилит благодаря подсветке, автоматическому пейджеру (less) и интуитивным фильтрам.

hl — это яркий пример того, как узкоспециализированный инструмент может значительно повысить продуктивность. Он не пытается быть швейцарским ножом, но ту задачу, для которой создан — просмотр и анализ структурированных логов — он выполняет блестяще.

Кому особенно стоит попробовать:

  • Backend-разработчикам и DevOps-инженерам, которые ежедневно работают с JSON-логами.
  • Специалистам по SRE, которым нужно быстро диагностировать проблемы в распределенных системах.
  • Всем, кто ценит быстрые и эффективные инструменты командной строки.

Если вы до сих пор мучаетесь с grep и jq для анализа логов, настоятельно рекомендую дать hl шанс. Установка проста (например, brew install hl на macOS), а польза, которую он принесет, сэкономит вам не один час времени и нервов.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.