約5年間、私は小規模から中規模のコードベースからログを収集するという課題に直面してきました。コードからログを送信すること自体は問題ではありません:JavaやGoにはこれを行うためのライブラリがほぼ最初から用意されています。しかし、それらを収集するための何かをデプロイすることは頭痛の種です。これは解決可能な課題だと理解しています(ChatGPT以前でも、そして今ではさらに容易に)。それでも、すべてのログシステムは主に大企業の世界とその要件に向けられており、少数の道具と接着剤、そして「昨日までに」という締め切りを持つ小さなチームや個人開発者向けではありません。
ELKを起動することは私にとって毎回挑戦です:多くの設定、簡単ではないデプロイメント、そしてUIに入ると、タブの多さに目が回ります。LokiやGraylogではもう少し簡単ですが、それでも私が必要とする以上の機能があります。同時に、プロジェクト間でログを分離し、他のユーザーがシステムに追加されても見るべきでないものを見ないようにすることも、最も明白なプロセスではありません。
そこで約1年前、私は自分自身のログ収集システムを作ることにしました。できるだけ使いやすく起動しやすいものです。サーバー上で単一のコマンドでデプロイされ、設定やインターフェースの不要なタブなしで。そうして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アカウントをお持ちでしたら、スター⭐️をつけていただけると嬉しいです。最初のスターを集めるのは難しいものです。あなたのサポートに非常に感謝します!
プロジェクトをデプロイする方法は3つあります:.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での問題提起を歓迎します。

