Протягом приблизно п'яти років я стикався із завданням збору логів, зазвичай із кодових баз малого та середнього розміру. Відправка логів з коду не є проблемою: 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 символів).
Розгорнути список надісланих полів (userid, orderid тощо).
Клацнути на поле та додати його до фільтра. Пошук логів з умовами:



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


![[ДУМКА] Новий статут NHA: Навряд чи формула для вирішення житлової кризи](https://www.rappler.com/tachyon/2023/08/dhsud.jpg?resize=75%2C75&crop_strategy=attention)