Около пяти лет я сталкивался с задачей сбора логов, обычно из малых и средних кодовых баз. Отправка логов из кода не проблема: Java и Go имеют библиотеки для этого практически из коробки. Но развертывание чего-то для их сбора - это головная боль. Я понимаю, что это решаемая задача (даже до ChatGPT, а теперь тем более). Тем не менее, все системы логирования в первую очередь ориентированы на мир крупных предприятий и их требования, а не на маленькие команды или отдельных разработчиков с несколькими палками, клеем и дедлайном "вчера".
Запуск ELK для меня каждый раз вызов: куча настроек, нетривиальное развертывание, и когда я захожу в интерфейс, мои глаза разбегаются от вкладок. С Loki и Graylog немного проще, но все равно функций гораздо больше, чем мне нужно. В то же время, разделение логов между проектами и добавление других пользователей в систему так, чтобы они не видели то, что не должны, тоже не самый очевидный процесс.
Поэтому около года назад я решил создать свою собственную систему сбора логов. Такую, которая была бы максимально проста в использовании и запуске. Она развертывалась бы на сервере одной командой, без какой-либо конфигурации или ненужных вкладок в интерфейсе. Так появился Log Bull, и теперь он с открытым исходным кодом: система сбора логов для разработчиков со средними проектами.
Содержание:
Log Bull - это система сбора логов с акцентом на простоту использования (минимальная конфигурация, минимум функций, нулевая конфигурация при запуске). Проект полностью с открытым исходным кодом под лицензией Apache 2.0. Моим главным приоритетом было создать решение, которое позволило бы младшему разработчику легко разобраться, как запустить систему, как отправлять в нее логи и как их просматривать примерно за 15 минут.
Ключевые особенности проекта:
https://www.youtube.com/watch?v=8H8jF8nVzJE&embedable=true
Проект разработан на Go и построен на OpenSearch.
Веб-сайт проекта - https://logbull.com
GitHub проекта - https://github.com/logbull/logbull
P.S. Если вы найдете проект полезным и у вас есть аккаунт GitHub, пожалуйста, поставьте ему звезду ⭐️. Первые звезды собирать сложно. Я был бы крайне благодарен за вашу поддержку!
Есть три способа развернуть проект: через .sh скрипт (что я рекомендую), через Docker и через Docker Compose.
Метод 1: Установка через скрипт
Скрипт установит Docker, разместит проект в папке /opt/logbull и настроит автозапуск при перезагрузке системы. Команда установки:
sudo apt-get install -y curl && \ sudo curl -sSL https://raw.githubusercontent.com/logbull/logbull/main/install-logbull.sh \ | sudo bash
Метод 2: Запуск через Docker Compose
Создайте файл docker-compose.yml со следующим содержимым:
services: logbull: container_name: logbull image: logbull/logbull:latest ports: - "4005:4005" volumes: - ./logbull-data:/logbull-data restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:4005/api/v1/system/health"] interval: 5s timeout: 5s retries: 30
И выполните команду docker compose up -d. Система запустится на порту 4005.
Метод 3: Запуск через Docker команду
Выполните следующую команду в терминале (система также запустится на порту 4005):
docker run -d \ --name logbull \ -p 4005:4005 \ -v ./logbull-data:/logbull-data \ --restart unless-stopped \ --health-cmd="curl -f http://localhost:4005/api/v1/system/health || exit 1" \ --health-interval=5s \ --health-retries=30 \ logbull/logbull:latest
Я разрабатывал проект с учетом удобства, в первую очередь для разработчиков. Поэтому я создал библиотеки для большинства популярных языков разработки. Я сделал это с идеей, что Log Bull может быть подключен к любой популярной библиотеке как процессор без изменения текущей кодовой базы.
Я настоятельно рекомендую ознакомиться с примерами на веб-сайте, потому что там есть интерактивная панель для выбора языка:

Возьмем Python в качестве примера. Сначала вам нужно установить библиотеку (хотя вы также можете отправлять через HTTP; есть примеры для cURL):
pip install logbull
Затем отправляйте из кода:
import time from logbull import LogBullLogger # Initialize logger logger = LogBullLogger( host="http://LOGBULL_HOST", project_id="LOGBULL_PROJECT_ID", ) # Log messages (printed to console AND sent to LogBull) logger.info("User logged in successfully", fields={ "user_id": "12345", "username": "john_doe", "ip": "192.168.1.100" }) # With context session_logger = logger.with_context({ "session_id": "sess_abc123", "user_id": "user_456" }) session_logger.info("Processing request", fields={ "action": "purchase" }) # Ensure all logs are sent before exiting logger.flush() time.sleep(5)
Все логи отображаются сразу на главном экране. Вы можете:
Уменьшить размер сообщений (обрезав строку до ~50-100 символов).
Развернуть список отправленных полей (user_id, order_id и т.д.).
Нажать на поле и добавить его в фильтр. Поиск логов с условиями:



Вы также можете собирать группы условий (например, сообщение включает определенный текст, но исключает конкретный IP-адрес сервера).
Я надеюсь, что моя система сбора логов будет полезна тем разработчикам, которые не хотят или не могут (из-за ограниченных ресурсов проекта) реализовать "тяжеловесные" решения, такие как ELK. Я уже использую Log Bull в производственных проектах, и все идет хорошо. Я приветствую отзывы, предложения по улучшению и проблемы на GitHub.


