За последние ~5 лет я много раз сталкивался с задачей собирать логи: обычно из маленьких или средних по размеру кодовой базы проектов. Отправлять логи из кода не проблема, у Java и Go для этого есть библиотеки практически из коробки. А вот разворачивать что-то для их сбора — головняк. Понятно, что решаемый (ещё до ChatGPT, а сейчас так тем более), но всё же. Все системы логов, прежде всего, ориентированы на большой-большой enterprise мир и его требования, а не на простых смертных с несколькими палками, клеем и дедлайном "вчера".
Запуск ELK для меня каждый раз испытание: куча настроек, нетривиальный деплой, а при заходе в UI разбегаются глаза от вкладок. С Loki и Graylog — немного проще, но всё равно функций сильно больше, чем мне нужно. При этом разделять логи между проектами, добавлять других пользователей в систему так, чтобы они не видели лишнего — тоже не самый очевидный процесс.
Поэтому примерно год назад я решил, что сделаю свою систему для сбора логов для себя: максимально простую в использовании и запуске. Чтобы разворачивалась на сервере одной командой, вообще без настроек и без лишних вкладок в интерфейсе. Собственно, так появился и теперь вышел в open source Log Bull: система для сбора логов для разработчиков с проектами middle-sized размера.
Содержание
Что за проект?
Log Bull — это система для сбора логов с акцентом на простоте использования (минимум настроек, минимум функций, zero-config при старте). Проект полностью open source под Apache 2.0 лицензией. Главным приоритетом для меня было сделать такое решение, чтобы Junior разработчик без проблем разобрался, как запустить систему, как в неё отправлять логи и как их просматривать за ~15 минут.
Ключевые особенности проекта:
Разворачивается одной командой через
.sh
скрипт или через Docker команду.Можно создавать несколько изолированных проектов для сбора логов (и добавлять в них пользователей).
Максимально простой интерфейс с минимумом настроек, а при запуске — вообще без настроек (zero-config).
Библиотеки для Python, Java, Go, JavaScript (TS \ NodeJS)б PHP, C#, а в планах Rust и Ruby.
Бесплатно, открытый исходный код и self hosted.
Для поиска логов не нужно знать LogQL, Kibana DSL и другие языки запросов.
Проект разработан на Go и построен на базе Open Search.
Сайт проекта - https://logbull.com (видео с обзором на YouTube, может пригодиться VPN)
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
Система станет доступна на порту 4005
.
Способ 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
# Создаём логгер
logger = LogBullLogger(
host="http://LOGBULL_HOST",
project_id="LOGBULL_PROJECT_ID",
)
# Пишем логи (отображаются в консоли и отправляюся в Log Bull)
logger.info("User logged in successfully", fields={
"user_id": "12345",
"username": "john_doe",
"ip": "192.168.1.100"
})
# Также можем добавить контекст (ID запроса, ID пользователя и т.д.)
session_logger = logger.with_context({
"session_id": "sess_abc123",
"user_id": "user_456"
})
session_logger.info("Processing request", fields={
"action": "purchase"
})
# Ждём, пока логи дойдут до Log Bull
logger.flush()
time.sleep(5)
Как просматривать логи?
Все логи попадают сразу на главный экран. При этом есть возможность:
Сделать размер сообщений меньше (урезав строку до ~50-100 символов).
Развернуть список отправленных полей (user_id, order_id и т.д.).
Нажать на поле и добавить его в фильтр.



Также можно собирать группы условий (например, сообщение включает определенный текст, но исключить конкретный IP адрес сервера).
Заключение
Надеюсь, моя система для сбора логов будет полезна той части разработчиков, которые не хотят или не могут (в рамках ограниченности ресурсов проекта) поднимать "тяжеловесные" решения по типу ELK. Я уже использую Log Bull в production проектах, полёт нормальный. Буду раз обратной связи, предложениям по улучшению и issues'ам на GitHub.
Может быть интересно: